[置頂]配置SpringMVC

      這一篇我們進行簡單的基礎的SpringMVC框架的搭建與初步認識,我以一名初學者的身份,一點一點進行Spring框架的搭建。

      我介紹下我所使用的編程環境,個人見解,不喜勿噴,僅做參考。

      首先,請確定您對jsp或其他網頁頁面有一點了解,對jstl有一點點了解,理解servlet中的request、response的含義和使用,做過jsp與servlet的直接對接小demo。

      我在電腦上已經裝好了eclipse-jee-kepler,我用的是eclipse,自己安裝好了JDK7,我認爲MyEclipse已經包含了太多插件,而且對於架構和配置做到了部分傻瓜化,而使使用者已經逐漸忘記了自己搭框架的快樂與痛苦,對框架使用也沒有更深瞭解。

      我在eclipese中搭建好了tomcat,並運行無誤。在此基礎上我們進行springMVC的搭建。如果有人對如何搭建tomcat不瞭解,可以先jinxingtomcat的學習,參考:http://jingyan.baidu.com/article/8065f87fcc0f182330249841.html。

創建一個Web項目,file-new-project-Dynamic Web project,設置自己的項目名稱(如SpringMvcTest),最後記得勾選創建項目本身帶有的web.xml。

      搭建SpringMVC需要Spring、hibernate等的jar包,我在項目中使用的jar包可以閱讀我的隨筆進行下載,配置SpringMVC時出現Tomcat無法啓動,SpringMVC的jar包。對於jar包的引入按道理說應該是用到哪些jar包就添加哪些jar包,但對於初學者來說,在不瞭解各個jar包作用的情況下,請按照我說的,將所有SpringMVC的jar包統統放進Web-INF下的lib文件夾中!!!因爲即使你知道各個jar包的作用你也不一定知道該怎麼取捨。下面我們開始搭建,是不是還有點小激動呢。。。

      首先找到項目——WebContent——Web-INF下的web.xml文件,我們要對此文件進行配置。

 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <web-app version="2.5"  
 3     xmlns="http://java.sun.com/xml/ns/javaee"  
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
 7     <context-param>  
 8         <param-name>contextConfigLocation</param-name>  
 9         <param-value>/WEB-INF/springmvc-servlet.xml, classpath:applicationContext-*.xml</param-value>  
10     </context-param>  
11       
12      <servlet>  
13         <servlet-name>springmvc</servlet-name>  
14         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
15         <load-on-startup>1</load-on-startup>  
16     </servlet>  
17     <servlet-mapping>  
18         <servlet-name>springmvc</servlet-name>  
19         <url-pattern>*.do</url-pattern>  
20     </servlet-mapping>  
21       
22     <listener>  
23         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
24     </listener>  
25       
26     <welcome-file-list>  
27         <welcome-file>login.jsp</welcome-file>  
28     </welcome-file-list>  
29     
30 </web-app>  

 

      web.xml配置好後,我們要在同目錄下,配置springmvc-servlet.xml。(對於xml文件可以右鍵單擊來創建xmlFile)。

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
    http://www.springframework.org/schema/tx     
    http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
      
    <!-- 【配置映射處理器】 -->  
    <!-- SpringMVC自帶的映射處理器均實現了Spring的Ordered接口,這意味着我們可以在應用系統中聲明多個處理器映射 -->  
    <!-- 並且可以設置它們的優先級,這主要體現在order屬性上,其值越小,則對應的該映射處理器的優先級越高 -->  
    <!-- 本例中,SimpleUrlHandlerMapping的order值比BeanNameUrlHandlerMapping的小 -->  
    <!-- 這意味着DispatcherServlet在映射URL的時候,首先會諮詢SimpleUrlHandlerMapping -->  
    <!-- 只有在SimpleUrlHandlerMapping無法返回結果時,才諮詢BeanNameUrlHandlerMapping -->  
    <bean id="beanNameUrlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">  
        <property name="order" value="1"/>  
    </bean>
      
    <!-- DispatcherServlet使用的默認處理器映射是BeanNameUrlHandlerMapping,它使用URL樣式的名字 -->  
    <bean name="/login.do" class="com.lxn.controller.Login"/>  
    
       
    <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
        <property name="order" value="0"/>  
        <property name="mappings">  
            <props>  
                <prop key="/login.do"  >login</prop>
            </props>  
        </property>  
    </bean>  
 
    <!-- 這裏的id="login"對應的是上面中的<prop>裏面的value(login)即當有請求的Action爲login.do時,將執行id爲value(login)的操作或此類 -->     
     
    <bean id="login" class="com.lxn.controller.Login" />
    
</beans>

      這裏稍微說一下,當tomcat運行時,項目運行過程中發出一系列的請求,而web.xml中我們定義了listener,當請求根據要求轉到springmvc-servlet.xml時,我們會將請求進行分類也就是弄明白請求到底要去到哪個servlet中進行相應的操作,此時或者是由form來提交Action的請求,或者是由url來指定.do,如:(<a href="<%=request.getContextPath()%>/login.do">Press</a>  )。在springmvc-servlet.xml中,我們會根據請求*.do前面的id得到此請求要到哪個servlet類中去進行操作。

      在上面的springmvc-servlet.xml中,我們使用了兩種方式來進行Action與servlet的對接,併爲他們設置了相應的優先級。一種是直接通過urlname的方法,一種是通過id來判別。上述代碼中,order的數值越低,優先級越高。因此當我們檢測到login.do請求時,我們優先使用simpleUrlMapping方式。獲得*.do,由*.do得到相匹配的servlet的id,根據id得到class位置,從而進行相應的servlet操作。

      接下來我們創建login.jsp與login.java以及一個Model User.java。

      首先我們考慮login的相關頁面,login是登陸界面,登錄之後應顯示成功或失敗,我們設定成功後登錄到一個顯示頁面,失敗後顯示失敗頁面並打印失敗的原因。需要三個jsp頁面,在WebContent下新建三個jsp,分別爲login.jsp、manageview.jsp、error.jsp。

      login.jsp!!!!!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登錄</title>
</head>
<body>
<center>
<h1>登錄</h1>
<br/><br/>
<form method="post" Action="login.do">
<table>
<tr/>
<td align="center">用戶名</td><td><input type="text" name="username"></td>
</tr>
<tr>
<td align="center">密碼</td><td><input type="password" name="password"></td>
</tr>

</table>
<input type="submit" value="登錄">

</form>

</center>
</body>
</html>

      manageview.jsp!!!!!!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>操作控制界面</title>
</head>
<body>
<center>
<c:set value="${loginperson}" var=" loginperson"></c:set>

<h1>登錄成功</h1>
<br/><br/>
<table border="1" cellpadding="5">
<tr>
<td align="center">登錄者信息</td><td><c:out value="${loginperson.information}"></c:out></td>
</tr>
<tr>
<td align="center">登錄者用戶名</td><td><c:out value="${loginperson.username}"></c:out></td>
</tr>
<tr>
<td align="center">登錄者密碼</td><td><c:out value="${loginperson.password}"></c:out></td>
</tr>
</table>
</center>
</body>
</html>

      error.jsp!!!!!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>出錯了</title>
</head>
<body>
<center>
<h1>出錯了</h1>
<c:set  value="${error_reason }" var="error"></c:set>
<h3>錯誤原因爲:<c:out value="${error}"/></h3>
</center>

</body>
</html>

      OK!三個頁面建立成功。(當然裏面有一些細節包含着我在servlet中的以部分操作,比如manageview中,爲什麼woyongjstl標籤得到了loginperson這個對象,並展示了他的信息,這個在後面的servlet中會講到)。

      下面,我們在src中建一個包,名爲com.lxn.model,然後在這個包中建立User.class。

package com.lxn.model;  
  

public class User {  
    private String username;  
    private String password;  private String information;
      
    public String getUsername() {  
        return username;  
    }  
    public void setUsername(String username) {  
        this.username = username;  
    }  
    public String getPassword() {  
        return password;  
    }  
    public void setPassword(String password) {  
        this.password = password;  
    } public String getInformation() {
        return information;
    }
    public void setInformation(String information) {
        this.information = information;
    }  
}  

       在src下,建立包,名爲com.lxn.controller,並建立Login.java。繼承 AbstractController

package com.lxn.controller;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import com.lxn.model.User;

/** 
 * @author   :lin xiangnan
 * @date      :2014年8月19日 上午11:46:42 
 * @function:
 */

public class Login extends AbstractController {

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // TODO Auto-generated method stub
        HttpSession session=request.getSession();    
        User loginperson=new User();
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        loginperson.setUsername(username);
        loginperson.setPassword(password);
        session.setAttribute("loginperson", loginperson);
        System.out.println("用戶名爲"+loginperson.getUsername());
        System.out.println("密碼爲"+loginperson.getPassword());
        if(loginperson.getUsername().equals("1111111")&&loginperson.getPassword().equals("1111111")){
            
            loginperson.setInformation("登錄成功");
            return new ModelAndView("manageview","loginperson",loginperson);
        }
        
        String error_reason="登錄用戶名密碼錯誤";
        return new ModelAndView("error","error_reason",error_reason);
    }
    

}

      在此servlet的操作中,我們接收到request得到的form提交的值,對其進行檢驗與登錄,當用戶名與密碼均爲1111111時,我們判定此用戶可以登錄,並將他的相關屬性保存在user中,將此user對象傳遞到頁面,進行輸出。如果用戶名密碼錯誤,我們返回一個error頁面,從而得到error的相關信息輸出到頁面。

      運行login.jsp,右鍵run on server,偉大的時刻即將來臨,期待你們的實現,有問題請留言或評論。

 

      

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章