1. 程式人生 > >Spring總結之SpringMvc上

Spring總結之SpringMvc上

source 中間 adapter listen ehcache apple contex rod map

一、簡介

Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架。

二、流程架構

技術分享圖片

1.用戶發送請求至 前端控制器DispatcherServlet。

2.前端控制器DispatcherServlet收到請求後調用處理器映射器HandlerMapping。

3.處理器映射器HandlerMapping根據請求的Url找到具體的處理器,生成處理器對象Handler及處理器攔截器HandlerIntercepter(如果有則生成)一並返回給前端控制器DispatcherServlet。

4.前端控制器DispatcherServlet通過處理器適配器HandlerAdapter調用處理器Controller。

5.執行處理器(Controller,也叫後端控制器)

6.處理器Controller執行完後返回ModelAnView。

7.處理器映射器HandlerAdapter將處理器Controller執行返回的結果ModelAndView返回給前端控制器DispatcherServlet。

8.前端控制器DispatcherServlet將ModelAnView傳給視圖解析器ViewResolver。

9.視圖解析器ViewResolver解析後返回具體的視圖View。

10.前端控制器DispatcherServlet對視圖View進行渲染視圖(即:將模型數據填充至視圖中)

11.前端控制器DispatcherServlet響應用戶。

三、springmvc xml配置總結

  1. springmvc.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context
    ="http://www.springframework.org/schema/context" 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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!--處理器映射器--> <!--<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />--> <!--簡單url映射器--> <!--<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" />--> <!--=========非註解配置==========--> <!--處理器適配器1 實現controller接口 --> <!--<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> --> <!--處理器適配器2實現HttpRequestHandler接口 --> <!--<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/> --> <!-- controller配置 --> <!-- <bean name="/userController.do" class="sy.controller.UserController"/>--> <!--===================--> <!--=========註解配置==========--> <!-- 掃描controller註解,多個包中間使用半角逗號分隔 --> <context:component-scan base-package="sy.controller"/> <!--註解映射器 --> <!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>--> <!--註解適配器 --> <!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>--> <!-- springmvc使用<mvc:annotation-driven>自動加載RequestMappingHandlerMapping和RequestMappingHandlerAdapter, 可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代註解處理器和適配器的配置。--> <!--加載了很多參數 --> <mvc:annotation-driven></mvc:annotation-driven> <!--視圖解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans>

    2、web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
    http://www.springmodules.org/schema/cache/springmodules-cache.xsd  
    http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>MyBatisPro05</display-name>
      <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
      </welcome-file-list>
       
        <!-- Spring配置文件 -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
        <!-- 編碼過濾器 -->
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <async-supported>true</async-supported>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!-- Spring監聽器 -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
         
        <!-- 添加對springmvc的支持 -->
        <servlet>
            <servlet-name>springMVC</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring-mvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
            <async-supported>true</async-supported>
        </servlet>
        <servlet-mapping>
            <servlet-name>springMVC</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
    </web-app>

    四、Springmvc常用註解總結

    (1)@RequestMapping:(@RequestMapping(value="/book"))

    RequestMapping是一個用來處理請求地址映射的註解(將請求映射到對應的控制器方法中),可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。

    @RequestMapping有三個屬性:value:指定實際的url、method:指定請求method類型(get,put,post,delete等)、params:指定request中必須包含某些參數值,才讓該方法處理、headers:指定request中必須包含某些指定的header值,才處理請求、consumes:指定處理請求的的提交內容類型(Content-type)、produces:指定返回的內容類型

    例子@RequestMapping(value="/get/{bookid}",method = RequestMethod.GET, params="myParam=myValue",headers = "Accept=application/json")

    (2)@RequestParam:

    @RequestParam用於將請求參數區數據映射到功能處理方法的參數上。

    @RequestParam有以下三個參數:
    value:參數名字,即入參的請求參數名字,如username表示請求的參數區中的名字為username的參數的值將傳入;
    required:是否必須,默認是true,表示請求中一定要有相應的參數,否則將拋出異常;
    defaultValue:默認值,表示如果請求中沒有同名參數時的默認值,設置該參數時,自動將required設為false。

    例子: public String requestparam4(@RequestParam(value="username",required=false) String username)

    (3)@PathVariable

    @PathVariable用於將請求URL中的模板變量映射到功能處理方法的參數上。

    例子:@RequestMapping(value="/users/{userId}/topics/{topicId}")
    public String test(@PathVariable(value="userId") int userId, @PathVariable(value="topicId") int topicId)

    (4)@Responsebody

    @ResponseBody 將內容或對象作為 HTTP 響應正文返回,並調用適合HttpMessageConverter的Adapter轉換對象,寫入輸出流。
    作用:
    該註解用於將Controller的方法返回的對象,通過適當的HttpMessageConverter轉換為指定格式後,寫入到Response對象的body數據區。
    使用時機:
    返回的數據不是html標簽的頁面,而是其他某種格式的數據時(如json、xml等)使用;

    (5)@RequestBody

    @RequestBody 將HTTP請求正文轉換為適合的HttpMessageConverter對象。

    作用:
    i) 該註解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然後把相應的數據綁定到要返回的對象上;
    ii) 再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上。
    使用時機:
    A) GET、POST方式提時, 根據request header Content-Type的值來判斷:
    application/x-www-form-urlencoded, 可選(即非必須,因為這種情況的數據@RequestParam, @ModelAttribute也可以處理,當然@RequestBody也能處理);
    multipart/form-data, 不能處理(即使用@RequestBody不能處理這種格式的數據);
    其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的數據,必須使用@RequestBody來處理);
    B) PUT方式提交時, 根據request header Content-Type的值來判斷:
    application/x-www-form-urlencoded, 必須;
    multipart/form-data, 不能處理;
    其他格式, 必須;
    說明:request的body部分的數據編碼格式由header部分的Content-Type指定;

Spring總結之SpringMvc上