隨筆 - 0, 文章 - 11, 評論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          徒手搭建 SpringMVC XML AND Annotation 版

          準(zhǔn)備環(huán)境:(此例所有Spring版本:spring-framework-3.2.6)
          1、將spring-framework-3.2.6中的lib全部導(dǎo)入工程
          2、將Apache的Common-logging 導(dǎo)入工程
          3、將JSTL標(biāo)簽庫包導(dǎo)入工程(可選,這里只是為了方便讀數(shù)據(jù)而已)

          如下圖所示:


          Spring MVC XML 配置:

          1、在 Web.xml 中 配置啟動SpringMVC的Servlet映射。
           1 <!-- Spring MVC DispatcherServlet Init -->
           2     <servlet>
           3         <servlet-name>springMVC</servlet-name>
           4         <servlet-class>
           5             org.springframework.web.servlet.DispatcherServlet
           6         </servlet-class>
           7         <init-param>
           8             <param-name>contextConfigLocation</param-name>
           9             <param-value>
          10                 /WEB-INF/ApplicationContext-Controller.xml  <!-- SpringMVC的配置文件,文件名自定義 -->
          11             </param-value>
          12         </init-param>
          13         <load-on-startup>1</load-on-startup>
          14     </servlet>
          15     <servlet-mapping>
          16         <servlet-name>springMVC</servlet-name>
          17         <url-pattern>/</url-pattern>
          18     </servlet-mapping>

          2、在/WEB-INF/ 中創(chuàng)建 ApplicationContext-Controller.xml , 配置文件放在 /WEB-INF/下是約定俗成的。
           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <beans xmlns="http://www.springframework.org/schema/beans"
           3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           4     xmlns:context="http://www.springframework.org/schema/context"
           5     xsi:schemaLocation="http://www.springframework.org/schema/beans
           6          http://www.springframework.org/schema/beans/spring-beans.xsd
           7          http://www.springframework.org/schema/context
           8          http://www.springframework.org/schema/context/spring-context.xsd">
           9
          10 </beans>

          3、在src下創(chuàng)建 Contorllor 類 (Action)實現(xiàn) Controller 接口 。向ModelAndView的構(gòu)造傳入頁面名稱完成 轉(zhuǎn)發(fā) 操作
           1 package com.spring.mvc.web;
           2 
           3 import javax.servlet.http.HttpServletRequest;
           4 import javax.servlet.http.HttpServletResponse;
           5 import org.springframework.web.servlet.ModelAndView;
           6 import org.springframework.web.servlet.mvc.Controller;
           7 
           8 public class UserController implements Controller{
           9 
          10     public ModelAndView handleRequest(HttpServletRequest req,
          11             HttpServletResponse res) throws Exception {
          12         System.out.println("HelloWorld");
          13         return new ModelAndView("index.jsp");
          14     }
          15 }



          4、在 ApplicationContext-Controller.xml 中注冊 UserController 類
           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <beans xmlns="http://www.springframework.org/schema/beans"
           3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           4     xmlns:context="http://www.springframework.org/schema/context"
           5     xsi:schemaLocation="http://www.springframework.org/schema/beans
           6          http://www.springframework.org/schema/beans/spring-beans.xsd
           7          http://www.springframework.org/schema/context
           8          http://www.springframework.org/schema/context/spring-context.xsd">
           9 
          10     <bean id="/user" class="com.spring.mvc.web.UserController"></bean>
          11 
          12 </beans>

          HelloWorld完成,運行效果如下圖:
          -----------------------------------------------------------------------------------

          接著對優(yōu)化,SpringMVC 提供配置 ViewResolver 用來管理視圖層
          下面在 ApplicationContext-Controller.xml 配置 ViewResolver 對頁面轉(zhuǎn)發(fā)的控制

          首先在目錄結(jié)構(gòu)/WEB-INF/jsp/中 添加 user.jsp 頁面,用于轉(zhuǎn)發(fā)頁面,頁面內(nèi)容隨便。

           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <beans xmlns="http://www.springframework.org/schema/beans"
           3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           4     xmlns:context="http://www.springframework.org/schema/context"
           5     xsi:schemaLocation="http://www.springframework.org/schema/beans
           6          http://www.springframework.org/schema/beans/spring-beans.xsd
           7          http://www.springframework.org/schema/context
           8          http://www.springframework.org/schema/context/spring-context.xsd">
           9 
          10     <bean id="/user" class="com.spring.mvc.web.UserController"></bean>
          11 
          12     <!-- 頁面View層基本信息設(shè)定 -->
          13     <bean id="viewResolver"
          14         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          15         <property name="prefix" value="/WEB-INF/jsp" /> <!-- 前綴 -->
          16         <property name="suffix" value=".jsp" />              <!-- 后綴 -->
          17     </bean>
          18 </beans>

          對應(yīng)更改 com.spring.mvc.web.UserController :
           1 package com.spring.mvc.web;
           2 
           3 import javax.servlet.http.HttpServletRequest;
           4 import javax.servlet.http.HttpServletResponse;
           5 import org.springframework.web.servlet.ModelAndView;
           6 import org.springframework.web.servlet.mvc.Controller;
           7 
           8 public class UserController implements Controller{
           9     // 因為配置了 ViewResolver  所以轉(zhuǎn)發(fā)會自動加上 前綴 + user + 后綴 既: /WEB-INF/jsp/user.jsp
          10     public ModelAndView handleRequest(HttpServletRequest req,
          11             HttpServletResponse res) throws Exception {
          12         return new ModelAndView("user"); 
          13     }
          14 }

          看運行效果:

          接下來把 URL 請求的控制 也交給Spring處理:
           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <beans xmlns="http://www.springframework.org/schema/beans"
           3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           4     xmlns:context="http://www.springframework.org/schema/context"
           5     xsi:schemaLocation="http://www.springframework.org/schema/beans
           6          http://www.springframework.org/schema/beans/spring-beans.xsd
           7          http://www.springframework.org/schema/context
           8          http://www.springframework.org/schema/context/spring-context.xsd">
           9 
          10     <!-- 這前 id='/user',現(xiàn)在給bean起個別名,交給Spring的urlMapping來管理此ControllerAction -->
          11     <bean id="userController" class="com.spring.mvc.web.UserController"></bean>
          12 
          13     <!-- 頁面View層基本信息設(shè)定 -->
          14     <bean id="viewResolver"
          15         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          16         <property name="prefix" value="/WEB-INF/jsp/" />
          17         <property name="suffix" value=".jsp" />
          18     </bean>
          19     
          20     <!-- servlet映射列表,所有控制層Controller的servlet在這里定義 -->
          21     <bean id="urlMapping"
          22         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
          23         <property name="mappings">
          24             <props>
          25                 <!-- key 就是訪問路徑, userController 就是 ControllerAction 類的別名-->
          26                 <prop key="/user">userController</prop>
          27             </props>
          28         </property>
          29     </bean>
          30 </beans>

          配置到此,訪問效果與前面沒有區(qū)別,只是把URL交給Spring的UrlMapping管理,并介紹userController給UrlMapping認(rèn)識。

          很多時候,ControllerAction 需要處理不同的方法,顯然一個Controller處理一種邏輯不太現(xiàn)實,Spring提供了解決此類問題的配置:
           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <beans xmlns="http://www.springframework.org/schema/beans"
           3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           4     xmlns:context="http://www.springframework.org/schema/context"
           5     xsi:schemaLocation="http://www.springframework.org/schema/beans
           6          http://www.springframework.org/schema/beans/spring-beans.xsd
           7          http://www.springframework.org/schema/context
           8          http://www.springframework.org/schema/context/spring-context.xsd">
           9 
          10     <bean id="userController" class="com.spring.mvc.web.UserController">
          11         <!-- Controller Bean 配置property的methodNameResolver屬性 -->
          12         <!-- ref bean 中就是把 同一個Controller多個方法的解析器 注入給 Controller-->
          13         <property name="methodNameResolver">
          14             <ref bean="paraMethodResolver"/>
          15         </property>
          16     </bean>
          17 
          18     <bean id="viewResolver"
          19         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          20         <property name="prefix" value="/WEB-INF/jsp/" />
          21         <property name="suffix" value=".jsp" />
          22     </bean>
          23     
          24     <bean id="urlMapping"
          25         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
          26         <property name="mappings">
          27             <props>
          28                 <prop key="/user">userController</prop>
          29             </props>
          30         </property>
          31     </bean>
          32     
          33     <!-- Controller方法調(diào)用規(guī)則定義 -->
          34     <bean id="paraMethodResolver"
          35         class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
          36         <!-- value="method" 的作用好比 http://localhost/SpringMVC/user?method=add -->
          37         <property name="paramName" value="method" />
          38     </bean>
          39 </beans>

          更改Controller類
           1 package com.spring.mvc.web;
           2 
           3 import javax.servlet.http.HttpServletRequest;
           4 import javax.servlet.http.HttpServletResponse;
           5 import org.springframework.web.servlet.ModelAndView;
           6 import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
           7 
           8 // extends MultiActionController 類
           9 public class UserController extends MultiActionController {
          10 
          11     public ModelAndView add(HttpServletRequest req,
          12             HttpServletResponse res) throws Exception {
          13         return new ModelAndView("user");
          14     }
          15     
          16     // 返回類型可以是 ModelAndView , String , List , Map , Set , ModelMap , Object , viod 等等
          17     public String list(HttpServletRequest req,
          18             HttpServletResponse res) throws Exception {
          19         return "user";
          20     }
          21 }

          效果如下圖:



          SpringMVC Annotation 配置:


          前面 SpringMVC XML 的配置方法,只保留 ViewResolver的配置,其他全部不用;Spring提供的Annotation的兩處配置即可代替大部分配置代碼:

           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <beans xmlns="http://www.springframework.org/schema/beans"
           3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           4     xmlns:context="http://www.springframework.org/schema/context"
           5     xsi:schemaLocation="http://www.springframework.org/schema/beans
           6          http://www.springframework.org/schema/beans/spring-beans.xsd
           7          http://www.springframework.org/schema/context
           8          http://www.springframework.org/schema/context/spring-context.xsd">
           9 
          10     <!-- 對web包中的所有類進行掃描,以完成Bean創(chuàng)建和自動依賴注入的功能 -->
          11     <context:component-scan base-package="com.spring.mvc.web"/>
          12     <!-- 啟動Spring MVC的注解功能,完成請求和注解POJO的映射 -->
          13     <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
          14     
          15     <bean id="viewResolver"
          16         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          17         <property name="prefix" value="/WEB-INF/jsp/" />
          18         <property name="suffix" value=".jsp" />
          19     </bean>
          20     
          21     <!-- SpringMVC XML 的配置方法,只保留 ViewResolver 的配置,其他全部不用-->
          22     <!-- <bean id="userController" class="com.spring.mvc.web.UserController">
          23         <property name="methodNameResolver">
          24             <ref bean="paraMethodResolver"/>
          25         </property>
          26     </bean>
          27     <bean id="urlMapping"
          28         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
          29         <property name="mappings">
          30             <props>
          31                 <prop key="/user">userController</prop>
          32             </props>
          33         </property>
          34     </bean>
          35     <bean id="paraMethodResolver"
          36         class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
          37         <property name="paramName" value="method" />
          38     </bean> -->
          39 </beans>

          Annotation Controller 類的實現(xiàn):
           1 package com.spring.mvc.web;
           2 
           3 import javax.servlet.http.HttpServletRequest;
           4 import javax.servlet.http.HttpServletResponse;
           5 
           6 import org.springframework.stereotype.Controller;
           7 import org.springframework.web.bind.annotation.RequestMapping;
           8 import org.springframework.web.servlet.ModelAndView;
           9 
          10 /*
          11  * @Controller 聲明此類為Controller類交給Spring管理
          12  * @RequestMapping 請求路徑
          13  */
          14 @Controller
          15 @RequestMapping("/user")
          16 public class UserController {
          17 
          18     /*
          19      * @RequestMapping(params="method=add")
          20      * 此方法的對應(yīng)訪問方式 
          21      * http://localhost:8080/SpringMVC/user?method=add
          22      */
          23     @RequestMapping(params="method=add")
          24     public ModelAndView add(HttpServletRequest req,
          25             HttpServletResponse res) throws Exception {
          26         return new ModelAndView("user");
          27     }
          28     
          29     @RequestMapping(params="method=list")
          30     public String list(String uName , HttpServletRequest req,
          31             HttpServletResponse res) throws Exception {
          32     /*     默認(rèn)為轉(zhuǎn)發(fā),重定向:返回這個串:"redirect:http://www.google.com.hk/"
          33
                * 1、Controller 就是從HttpServlet 繼承而來,所以可以把它當(dāng)Servlet用
          34      * 2、需要什么對象,直接在方法的參數(shù)中寫,uName是前臺傳過來的。
          35      * 3、ModelAndView 底層的View是Object Model是Map,默認(rèn)放在Request中可通過el表達(dá)式拿值
          36      */
          37         req.getSession() ;
          38         return "user";
          39     }
          40 }

          效果如下圖:

          添加 Spring 3.0 的 新 Annotation 注解:
          1:XML 文件的 schema 更新添加 mvc 標(biāo)簽 ,標(biāo)紅”
           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <beans xmlns="http://www.springframework.org/schema/beans"
           3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           4     xmlns:mvc="http://www.springframework.org/schema/mvc"
           5     xmlns:context="http://www.springframework.org/schema/context"
           6     xsi:schemaLocation="http://www.springframework.org/schema/beans
           7          http://www.springframework.org/schema/beans/spring-beans.xsd
           8          http://www.springframework.org/schema/mvc 
           9          http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
          10          http://www.springframework.org/schema/context
          11          http://www.springframework.org/schema/context/spring-context.xsd">
          12 
          13     <!-- 支持spring3.0新的mvc注解 -->
          14     <mvc:annotation-driven />
          15     
          16     <!-- 對web包中的所有類進行掃描,以完成Bean創(chuàng)建和自動依賴注入的功能 -->
          17     <context:component-scan base-package="com.spring.mvc.web" />
          18     
          19     <!-- 啟動Spring MVC的注解功能,完成請求和注解POJO的映射 -->
          20     <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
          21 
          22     <bean id="viewResolver"
          23         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          24         <property name="prefix" value="/WEB-INF/jsp/" />
          25         <property name="suffix" value=".jsp" />
          26     </bean>
          27 </beans>

          配置Spring Interceptor 攔截器:
          添加自定義攔截器類:com.spring.mvc.interceptors.RuleInterceptor
           1 package com.spring.mvc.interceptors;
           2 
           3 import javax.servlet.http.HttpServletRequest;
           4 import javax.servlet.http.HttpServletResponse;
           5 import org.springframework.web.servlet.HandlerInterceptor;
           6 import org.springframework.web.servlet.ModelAndView;
           7 
           8 public class RuleInterceptor implements HandlerInterceptor {
           9 
          10     public void afterCompletion(HttpServletRequest request,    HttpServletResponse response, Object handler, Exception ex)    throws Exception {
          11         System.out.println("最后執(zhí)行!!!一般用于釋放資源!!");
          12         
          13     }
          14 
          15     public void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,    ModelAndView modelAndView) throws Exception {
          16         System.out.println("Action執(zhí)行之后,生成視圖之前執(zhí)行!!");
          17     }
          18 
          19     public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
          20         System.out.println("action之前執(zhí)行!!!");
          21         return true;  //繼續(xù)執(zhí)行action
          22     }
          23 }

          配置文件注冊:
           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <beans xmlns="http://www.springframework.org/schema/beans"
           3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           4     xmlns:mvc="http://www.springframework.org/schema/mvc"
           5     xmlns:context="http://www.springframework.org/schema/context"
           6     xsi:schemaLocation="http://www.springframework.org/schema/beans
           7          http://www.springframework.org/schema/beans/spring-beans.xsd
           8          http://www.springframework.org/schema/mvc 
           9          http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
          10          http://www.springframework.org/schema/context
          11          http://www.springframework.org/schema/context/spring-context.xsd">
          12 
          13     <mvc:interceptors>
          14         <bean class="com.spring.mvc.interceptors.RuleInterceptor"></bean> <!-- 攔截所有springmvc的url! -->
          15         <mvc:interceptor>
          16             <mvc:mapping path="/user" />
          17             <!--<mvc:mapping path="/test/*" />-->
          18             <bean class="com.spring.mvc.interceptors.RuleInterceptor"></bean>
          19         </mvc:interceptor>
          20     </mvc:interceptors>
          21 
          22     <!-- 支持spring3.0新的mvc注解 -->
          23     <mvc:annotation-driven />
          24     
          25     <!-- 對web包中的所有類進行掃描,以完成Bean創(chuàng)建和自動依賴注入的功能 -->
          26     <context:component-scan base-package="com.spring.mvc.web" />
          27     
          28     <!-- 啟動Spring MVC的注解功能,完成請求和注解POJO的映射 -->
          29     <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
          30 
          31     <bean id="viewResolver"
          32         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          33         <property name="prefix" value="/WEB-INF/jsp/" />
          34         <property name="suffix" value=".jsp" />
          35     </bean>
          36 </beans>

          posted on 2014-05-12 12:29 00001000 閱讀(590) 評論(0)  編輯  收藏 所屬分類: SpringMVC3/Spring3/MyBatis3


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 阳江市| 延川县| 宜兴市| 周口市| 平远县| 龙泉市| 瓮安县| 扎兰屯市| 连南| 漳平市| 龙山县| 天峨县| 怀来县| 临猗县| 慈溪市| 辽中县| 法库县| 科技| 汉阴县| 惠水县| 兴业县| 常德市| 南陵县| 镇沅| 县级市| 太康县| 容城县| 武鸣县| 南陵县| 山东| 绥芬河市| 麻栗坡县| 抚远县| 贡觉县| 寿阳县| 通山县| 康定县| 贵南县| 泰州市| 德兴市| 邻水|