SpringMVC配置XML


核心架構的具體流程步驟如下:

1、 首先用戶發送請求——>DispatcherServlet,前端控制器收到請求后自己不進行處理,而是委托給其他的解析器進行處理,作為統一訪問點,進行全局的流程控制;

2、 DispatcherServlet——>HandlerMapping, HandlerMapping將會把請求映射為HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象、多個HandlerInterceptor攔截器)對象,通過這種策略模式,很容易添加新的映射策略;

3、 DispatcherServlet——>HandlerAdapter,HandlerAdapter將會把處理器包裝為適配器,從而支持多種類型的處理器,即適配器設計模式的應用,從而很容易支持很多類型的處理器;

4、 HandlerAdapter——>處理器功能處理方法的調用,HandlerAdapter將會根據適配的結果調用真正的處理器的功能處理方法,完成功能處理;並返回一個ModelAndView對象(包含模型數據、邏輯視圖名);

5、 ModelAndView的邏輯視圖名——> ViewResolver, ViewResolver將把邏輯視圖名解析為具體的View,通過這種策略模式,很容易更換其他視圖技術;

6、 View——>渲染,View會根據傳進來的Model模型數據進行渲染,此處的Model實際是一個Map數據結構,因此很容易支持其他視圖技術;

7、返回控制權給DispatcherServlet,由DispatcherServlet返回響應給用戶,到此一個流程結束。

 

 

1、 前端控制器DispatcherServlet;

2、 HandlerMapping

3、 HandlerAdapter

4、 ViewResolver

5、 處理器/頁面控制器

6、 視圖

 

 

配置DispatcherServlet

DispatcherServlet是SpringMVC的核心,將下面Servlet的注冊信息登記在web.xml中。
初始化 DispatcherServlet 時,該框架在 web 應用程序WEB-INF 目錄中尋找一個名為[servlet-名稱]-servlet.xml的文件,並在那里定義相關的Beans,重寫在全局中定義的任何Beans,像上面的web.xml中的代碼,對應的是dispatcher-servlet.xml;當然也可以使用<init-param>元素,手動指定配置文件的路徑; load-on-startup:表示啟動容器時初始化該Servlet; url-pattern:表示哪些請求交給Spring Web MVC處理, “/” 是用來定義默認servlet映射的。也可以如“*.html”表示攔截所有以html為擴展名的請求。

 

 

 

  1. <servlet>        
  2.     <servlet-name>Dispatcher</servlet-name>        
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.     <init-param>  
  5.         <description>加載/WEB-INF/spring-mvc/目錄下的所有XML作為Spring MVC的配置文件</description>  
  6.         <param-name>contextConfigLocation</param-name>  
  7.         <param-value>/WEB-INF/spring-mvc/*.xml</param-value>  
  8.     </init-param>        
  9.     <load-on-startup>1</load-on-startup>        
  10. </servlet>        
  11. <servlet-mapping>        
  12.     <servlet-name>Dispatcher</servlet-name>        
  13.     <url-pattern>"/"/"*.do"/"*.html"</url-pattern>        
  14. </servlet-mapping>   

 

[servlet-名稱]-servlet.xml 配置:

 

<?xml version= "1.0" encoding= "UTF-8" ?>
        xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
        xmlns:mvc= "http://www.springframework.org/schema/mvc"
        xmlns:p= "http://www.springframework.org/schema/p"
        xmlns:context= "http://www.springframework.org/schema/context"
        xmlns:aop= "http://www.springframework.org/schema/aop"
        xmlns:tx= "http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http: //www.springframework.org/schema/beans
             http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd
             http: //www.springframework.org/schema/context
             http: //www.springframework.org/schema/context/spring-context-3.0.xsd
             http: //www.springframework.org/schema/aop
             http: //www.springframework.org/schema/aop/spring-aop-3.0.xsd
             http: //www.springframework.org/schema/tx
             http: //www.springframework.org/schema/tx/spring-tx-3.0.xsd
             http: //www.springframework.org/schema/mvc
             http: //www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
             http: //www.springframework.org/schema/context
             http: //www.springframework.org/schema/context/spring-context-3.0.xsd">
     <!--
         使Spring支持自動檢測組件,如注解的Controller    
     <context:component-scan base-package= "com.minx.crm.web.controller" />
 
<context:annotation-config />     
       <!-- 把標記了@Controller注解的類轉換為bean -->       
      <context:component-scan base-package="test.controller" />   
    <!-- 啟動Spring MVC的注解功能,完成請求和注解POJO的映射 -->       
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />   

    -->
     <bean id= "viewResolver"
           class = "org.springframework.web.servlet.view.InternalResourceViewResolver"
           p:prefix= "/WEB-INF/jsp/"
           p:suffix= ".jsp" />
</beans>


InternalResourceViewResolver在ModelAndView返回的視圖名前加上prefix屬性配置的前綴,再在最后加上suffix屬性配置的后綴。由於HelloController返回的ModelAndView中視圖名為welcome,所以InternalResourceViewResolver將在/WEB-INF/jsp/welcome.jsp處查找視圖。


 

1、BeanNameUrlHandlerMapping

這是Dispatcher Servlet的默認的HandlerMapping,所以在應用上下文配置文件中簡單地用“Url樣式”來定義一個控制器Bean的名字,就可以告訴Dispatcher Servlet什么樣式的請求應該由哪個控制器去處理,而不用顯式地定義一個HandlerMapping。(私下說一句,這樣做雖然簡單,但這樣用URL樣式定義出來的ControllerBean,其名字顯得古怪,因為這個名字同時也是Controller Bean的實例名)

例:若控制器ListCoursesController的URL樣式是“listCourses.go”,則

       <bean name="/listCourses.go"

class="com.w3cs.vlar.ListCoursesController">

        <property name="couseService">

             <ref bean="courceService"/>

        </property>

    </bean>

當然,也可以在定義這個控制器Bean之前,顯式地聲明你所用的HandlerMapping,顯式定義如下:

<bean id="beanNameUrlMapping"

class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">

 

2、SimpleUrlHandlerMapping

這種方式不同於BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping不需定義Controller Bean的名字,而是直接把URL映射到控制器。

由於SimpleUrlHandlerMapping不是Dispatcher Servlet默認的HandlerMapping,所以這個HandlerMapping必須得顯式定義。

下面定義了一個ID為“SimpleUrl”的HandlerMapping Bean:

<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<property name="mappings">

<props>

    <prop key="/listCourses.go">listCoursesController</prop>

    <prop key="/login.go">loginController</prop>

</props>

</property>

</bean>

3.默認HandlerMapping 

默認執行Class名稱  如:這里有一個CoursesController  那么/courses 就會調用這個Controller     多方法的為/courses/方法名 

 

配置一個視圖解析器將控制器與JSP結合起來。

將解析器的配置片段加到上面的test-servlet.xml中。

<bean id="viewResolver"

    class="org.springframework.web.servlet.view.InternalResourceViewResolver">

       <property name="prefix" value="/WEB-INF/jsp/" />

       <property name="suffix" value=".jsp" />

</bean>

InternalResourceViewResolver在ModelAndView返回的視圖名前加上prefix屬性配置的前綴,再在最后加上suffix屬性配置的后綴。由於HelloController返回的ModelAndView中視圖名為welcome,所以InternalResourceViewResolver將在/WEB-INF/jsp/welcome.jsp處查找視圖。



(1) url和動作(后端控制器)的映射。

springMVC里有個映射處理器(HandlerMapping)的概念。它實際上是一個處理器映射Bean,用來將一個控制器指定到一個URL上。Spring提供了三種有用的HandlerMapping的實現:

—— BeanNameUrlHandlerMapping

       根據控制器的名字將控制器映射到URL

—— SimpleUrlHandlerMapping

       用上下文配置文件中定義的屬性集合將控制器映射到URL

—— CommonsPathMapHandlerMapping

       使用控制器代碼中的元數據將控制器映射到URL  

(2) 邏輯視圖名和視圖對象的映射。

springMVC里還有個視圖解析器(ViewResolver)的概念。它決定了ModelAndView對象的邏輯視圖名如何解析成一個用於將結果渲染給用戶的視圖Bean..Spring有四種ViewResolver實現:

—— InternalResourceViewResolver

       將邏輯視圖名解析成一個用模板文件(如JSP和Velocity模板)渲染的視圖對象

—— BeanNameViewResolver

       將邏輯視圖名解析成一個DispatcherServlet應用上下文中的視圖Bean

—— ResourceBundleViewResolver

       將邏輯視圖名解析成一個ResourceBundler中的視圖對象

—— XmlViewResolver

       從一個XML文件中解析視圖Bean,這個文件是從DispatcherServlet應用上下文中分離出來的。

 

 

Annotation注釋

 

 

@Controller:用於標識是處理器類;

@RequestMapping:請求到處理器功能方法的映射規則;

@RequestParam:請求參數到處理器功能處理方法的方法參數上的綁定;

@ModelAttribute:請求參數到命令對象的綁定;

@SessionAttributes:用於聲明session級別存儲的屬性,放置在處理器類上,通常列出模型屬性(如@ModelAttribute)對應的名稱,則這些屬性會透明的保存到session中;

@InitBinder:自定義數據綁定注冊支持,用於將請求參數轉換到命令對象屬性的對應類型;

 

RESTful架構風格支持(通過@PathVariable注解和一些其他特性支持),且又引入了更多的注解支持:

@CookieValue:cookie數據到處理器功能處理方法的方法參數上的綁定;

@RequestHeader:請求頭(header)數據到處理器功能處理方法的方法參數上的綁定;

@RequestBody:請求的body體的綁定(通過HttpMessageConverter進行類型轉換);

@ResponseBody:處理器功能處理方法的返回值作為響應體(通過HttpMessageConverter進行類型轉換);

@ResponseStatus:定義處理器功能處理方法/異常處理器返回的狀態碼和原因;

@ExceptionHandler:注解式聲明異常處理器;

@PathVariable:請求URI中的模板變量部分到處理器功能處理方法的方法參數上的綁定,從而支持RESTful架構風格的URI;

 

POST中文亂碼解決方案

 

spring Web MVC框架提供了org.springframework.web.filter.CharacterEncodingFilter用於解決POST方式造成的中文亂碼問題,具體配置如下:

  1. <filter>      
  2.     <filter-name>CharacterEncodingFilter</filter-name>      
  3.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>      
  4.     <init-param>      
  5.         <param-name>encoding</param-name>      
  6.         <param-value>utf-8</param-value>      
  7.     </init-param>      
  8. </filter>      
  9. <filter-mapping>      
  10.     <filter-name>CharacterEncodingFilter</filter-name>      
  11.     <url-pattern>/*</url-pattern>      
  12. </filter-mapping>   

以后我們項目及所有頁面的編碼均為UTF-8。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM