(三)SpringMVC實現

 

1、在web.xml中配置DispatcherServlet
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>                                                      
<servlet-name>Dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/Config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>                                             
<servlet-name>Dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
    Servlet定義
這裏定義了請求分發Servlet,即:org.springframework.web.servlet.DispatcherServletDispatcherServlet 是Spring MVC 中負責請求調度的核心引擎,所有的請求將由此Servlet 根據配置分發至各個邏輯處理單元。其內部同時也維護了一個ApplicationContext實例。我們在<init-param>節點中配置了名爲“contextConfigLocation”的Servlet參數,此參數指定了Spring配置文件的位置“/WEB-INF/Config.xml”。如果忽略此設定,則默認爲“/WEB-INF/<servlet name>-servlet.xml”,其中<servlet name>以Servlet 名替換(在當前環境下,默認值也就是“/WEB-INF/Dispatcher-servlet.xml)。
    請求映射
將所有以.do結尾的請求交給Spring MVC進行處理。當然,也可以設爲其他值如.action、.action等。
 
2、在config.xml中配置Spring MVC所需的核心模塊。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
SpringFrameWork Developer’s Guide Version 0.6
September 2, 2004 So many open source projects. Why not Open your Documents?
<beans>
<!--Definition of View Resolver -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResou
rceViewResolver">
<property name="viewClass">
<value>
org.springframework.web.servlet.view.JstlView
</value>
</property>
<property name="prefix">
<value>
/WEB-INF/view/
</value>
</property>
<property name="suffix">
<value>.jsp</value>
</ property>
</bean>
<!--Request Mapping -->
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUr
lHandlerMapping">
<property name="mappings">
<props>
<prop key="/login.do">LoginAction</prop>
</props>
</property>
</bean>
<!---Action Definition-->
<bean id="LoginAction"
class="com.travelsky.springMVC.action.LoginAction">
<property name="commandClass">
<value>com.travelsky.springMVC.action.LoginInfo</value>
</property>
<property name="fail_view">
<value>loginfail</value>
</property>
<property name="success_view">
<value>main</value>
</property>
</bean>
</beans>
    Resolver設定
Resolver將把輸出結果與輸出界面相融合,爲表現層提供呈現資源。
    View Resolver的viewClass參數
這裏使用JSP頁面作爲輸出,因此,設定爲:org.springframework.web.servlet.view.JstlView
其餘可選的viewClass還有:
Ø org.springframework.web.servlet.view.freemarker.FreeMarkerView(用於基於FreeMarker模板的表現層實現)
Ø org.springframework.web.servlet.view.velocity.VelocityView(用於基於velocity模板的表現層實現)等。
   ⑷ View Resolver的prefix和suffix參數
指定了表現層資源的前綴和後綴,運行時,Spring 將爲指定的表現層資源自動追加前綴和後綴,以形成一個完整的資源路徑。另參見⑻
⑸ “請求/處理單元”關係映射
可以看到,這裏我們將“/login.do”請求映射到處理單元LoginAction。<props>節點下可以有多個映射關係存在,目前我們只定義了一個。
⑹ LoginAction定義
這裏定義了邏輯處理單元LoginAction 的具體實現,這裏,LoginAction 的實現類爲com.travelsky.springMVC.action.LoginAction。
⑺ LoginAction的請求數據對象
commandClass 參數源於LoginAction 的基類BaseCommandController,BaseCommandControlle 包含了請求數據封裝和驗證方法( BaseCommandController.bindAndValidate ) , 它將根據傳入的HttpServletRequest構造請求數據對象。這裏我們指定commandClass 爲com.travelsky.springMVC.action.LoginInfo,這是一個非常簡單的Java Bean,它封裝了登錄請求所需的數據內容:
public class LoginInfo {
    private String username;
    private String password;
    public String getPassword() {
       return password;
    }
    public void setPassword(String password) {
       this.password = password;
    }
    public String getUsername() {
       return username;
    }
    public void setUsername(String username) {
       this.username = username;
    }
}
返回視圖定義
對於這裏的LoginAction 而言,有兩種返回結果,即登錄失敗時返回錯誤界面,登
錄成功時進入系統主界面。
對應我們配置了fail_view、success_view兩個自定義參數。
參數值將由Resolver進行處理,爲其加上前綴後綴,如對於fail_view而言,實
際的視圖路徑爲/WEB-INF/view/loginfail.jsp。
之後,Resolver 會將LoginAction的返回數據與視圖相融合,返回最終的顯示界
面。
3、控制器LoginAction實現
public class LoginAction extends SimpleFormController {
    private String fail_view;
    private String success_view;
   
……
//處理業務操作
    @SuppressWarnings("unchecked")
    protected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,Object cmd, BindException ex)
           throws Exception {
       LoginInfo loginInfo = (LoginInfo) cmd;
       if (login(loginInfo) == 0) {
           HashMap result_map = new HashMap();
           result_map.put("logininfo", loginInfo);
           List msgList = new LinkedList();
           msgList.add("msg1");
           msgList.add("msg2");
           msgList.add("msg3");
           result_map.put("messages", msgList);
           //返回模型視圖對象,提供解析器處理
           return new ModelAndView(this.getSuccess_view(), result_map);
       } else {
           return new ModelAndView(this.getFail_view());
       }
    }
……
}
4、視圖
Index.jsp
<body>
       <form action="login.do" method="post" >
           <p align="center">
              登錄
           </p>
           <div align="center">
           <br>
           用戶名:
           <input type="text" name="username">
           <br><br>
           密 碼 :
           <input type="password" name="password">
           <br>
           <p>
              <input type="submit" value="提交" name="B1">
              <input type="reset" value="重置" name="B2">
           </p>
           </div>
       </form>
    </body>
 
Main.jsp
<body>
        <p>
           Login Success!!!
       </p>
       <p>
           Current User:
           <c:out value="${logininfo.username}" />
           <br>
       </p>
       <p>
           Your current messages:
       </p>
       <c:forEach items="${messages}" var="item" begin="0" end="9" step="1"
           varStatus="var">
           <c:if test="${var.index % 2 == 0}">
*
</c:if>
${item}<br>
       </c:forEach>
    </body>

Spring MVC提供了WEB MVC的開發框架,與輕量級Spring結合,實現了一套MVC的開發機制,同時擁有自己的很多特性。其在架構實現方面,與Struts很相似,但其沒有實現struts的完全的功能,去除了StrutsOGNLStruts標籤,在web的應用性能上有明顯提升,展示了一個較爲輕捷的MVC開發框架。在本文中,僅對Spring MVC的基本使用及原理做了分析和介紹,至於Spring MVC的其他功能配置有待研究。

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