SpringMVC---基礎篇

1.SpringMVC和Spring的關係:

    軟件開發的三層架構:
          web層【表示層、表現層】---->Service層---->Dao[DataBase Access Object]---->數據庫!
    SpringMVC其實是Spring的一個子模塊,咱們用SpringMVC來代替這個JavaWEB部分!
    MVC:也是一種設計模式:
          M:Model【模型】-->Model用來封裝數據的 
           V:View---->View:用來顯示數據
          C[Controller]------>Controller:用於接收前端頁面發送的請求,而後調用Service層處理,拿處處理結果,將該結果返回給前端頁面!
 
    SpringMVC:至關於MVC架構中的C以及V!
 
    JavaEE-->J2EE   開發企業環境下的應用程序,主要針對Web程序開發
 

2.SpringMVC有什麼優點?

    Spring 爲展示層提供的基於 MVC 設計理念的優秀的Web 框架,是目前最主流的 MVC 框架之一。
 
    Spring3.0 後全面超越 Struts2,成爲最優秀的 MVC 框架。
 
    Spring MVC 經過一套 MVC 註解,讓 POJO 成爲處理請求的控制器,而無須實現任何接口。
 
    支持 REST 風格的 URL 請求。
             GET 用來獲 取資源,
             POST 用來新建資源,
             PUT 用來更新資源,
             DELETE 用來刪除資源。
          Java 開發者對 MVC 框架必定不陌生,從 Struts 到 WebWork,Java MVC 框架層出不窮。咱們已經習慣了處理 *.do 或 *.action 風格的 URL,爲每個 URL 編寫一個控制器,並繼承一個 Action 或者 Controller 接口。然而,流行的 Web 趨勢是使用更加簡單,對用戶和搜索引擎更加友好的 REST 風格的 URL。例如,來自豆瓣的一本書的連接是 http://www.douban.com/subject/2129650/,而非 http://www.douban.com/subject.do?id=2129650。
          有經驗的 Java Web 開發人員會使用 URL 重寫的方式來實現相似的 URL,例如,爲前端 Apache 服務器配置 mod_rewrite 模塊,並依次爲每一個須要實現 URL 重寫的地址編寫負責轉換的正則表達式,或者,經過一個自定義的 RewriteFilter,使用 Java Web 服務器提供的 Filter 和請求轉發(Forward)功能實現 URL 重寫,不過,仍須要爲每一個地址編寫正則表達式。
 
    採用了鬆散耦合可插拔組件結構,比其餘 MVC 框架更具擴展性和靈活性.
 
    目前主流的開發軟件!

 

3.SpingMVC是基於SpingMVC4.x

 

4.SpringMVC的HelloWorld快速入門!

 
    1.加入JAR包( 下載連接):
            –commons-logging-1.1.3.jar
            –spring-aop-4.0.0.RELEASE.jar
            –spring-beans-4.0.0.RELEASE.jar
            –spring-context-4.0.0.RELEASE.jar
            –spring-core-4.0.0.RELEASE.jar
            –spring-expression-4.0.0.RELEASE.jar
            –spring-web-4.0.0.RELEASE.jar
            –spring-webmvc-4.0.0.RELEASE.jar
 
    2.配置前端控制器【DispatcherServlet】
   
 <!-- The front controller of this Spring Web application, responsible for handling all application requests -->
        <!--向服務器註冊前端控制器!  -->
        <servlet>
            <servlet-name>springDispatcherServlet</servlet-name>
            <!--DispatcherServlet指的是SpringMVC的前端控制器!,給服務器使用,建立servlet對象!  -->
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- 初始化參數contextConfigLocation用於指定SpringMVC配置文件的路徑以及名稱 -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc.xml</param-value>
            </init-param>
            <!-- 數字0或者大於0的數字表示的是:在服務器啓動的時候建立Servlet對象,而不是第一次訪問的時候建立
                小於0的數字指的是:在第一次訪問的時候建立Servlet對象.
                在數字大於O的狀況下,數字越小,優先級越高!
             -->
            <load-on-startup>1</load-on-startup>
        </servlet>
 
        <!-- Map all requests to the DispatcherServlet for handling -->
        <!-- 用 servlet-mapping指定請求映射的路徑-->
        <servlet-mapping>
            <servlet-name>springDispatcherServlet</servlet-name>
            <!-- 用url-pattern指定攔截 的請求路徑! -->
            <url-pattern>/</url-pattern>
        </servlet-mapping>

  

    3.建立SpringMVC的配置文件並添加要掃描的包
        注意:1.建立SpringMVC配置文件的名字要和上面在web.xml文件中指定的名字一致!
             2.咱們建立SpringMVC配置文件的時候使用的是Spring Bean Configuration File建立的,不是XML!
    
<!-- 配置SpingMVC容器要掃描的包! -->
        <context:component-scan base-package="com.neuedu.controller"></context:component-scan>
 
    4.在springMVC掃描的包下建立控制器類[Controller/Handler],注意要加入@Controller註解
 
       
/**
             * 咱們經過@RequestMapping作請求URL的映射!
             * @return
             */
            @RequestMapping("/sayHello")
            public String sayHello(){
                return "/WEB-INF/views/success.jsp";
            }
 
 
      注意:在類的方法上咱們使用的是@RequestMapping,而後在括號裏指定請求url的請求路徑!
 

    5.建立頁面!

 
    注意:1.當咱們不用init-param指定springMVC配置文件的路徑好位置的時候,SpringMVC默認會去
            /WEB-INF/<servlet-name>-servlet.xml
 
         2.配置視圖解析器
 
    <!--InternalResourceViewResolvers 是視圖解析器 ,它會將邏輯視圖轉換成實際的物理視圖,作一個轉發操做!
            也就是說具體步驟:prefix +  方法的返回值  + suffix-->
            <!-- /WEB-INF/views/success.jsp -->
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="prefix" value="/WEB-INF/views/"></property>
                <property name="suffix" value=".jsp"></property>
            </bean>

        3.請求一個SpringMVC的流程!
 
5.使用 @RequestMapping 映射請求
    ?Spring MVC 使用 @RequestMapping 註解爲控制器指定能夠處理哪些 URL 請求
    ?在控制器的類定義及方法定義處均可標註
 
    @RequestMapping
    –    類定義處:提供初步的請求映射信息。至關於當前 WEB 應用的根目錄
    –    方法處:提供進一步的細分映射信息。相對於類定義處的 URL。
                若 類定義處未標註 @RequestMapping,則方法處標記的 URL 至關於當前 WEB 應用的根目錄
                若 類定義處標註 @RequestMapping,則方法處標記的 URL 相對於類定義處的@RequestMapping而言的!
 
 
    DispatcherServlet 截獲請求後,就經過控制器上@RequestMapping 提供的映射信息肯定請求所對應的處理方法。
 
    映射請求參數、請求方法或請求頭
        ?@RequestMapping 除了能夠使用請求 URL 映射請求外,還能夠使用請求方法、請求參數及請求頭映射請求
        ?@RequestMapping 的 value、method、params 及 heads 分別表示請求   URL、請求方法、請求參數及請求頭的映射條件,他們之間是與的關係,聯合使用多個條件可以讓請求映射 更加精確化。
 
        params 和 headers支持簡單的表達式:
        –    param1: 表示請求必須包含名爲 param1 的請求參數
        –    !param1: 表示請求不能包含名爲 param1 的請求參數
        –    param1 != value1: 表示請求包含名爲 param1 的請求參數,但其值 不能爲 value1
        –{「param1=value1」, 「param2」}: 請求必須包含名爲 param1 和param2 的兩個請求參數,且 param1 參數的值必須爲 value1!
 
       Method:GET / POST /PUT /DELETE
 
       使用 @RequestMapping 支持Ant風格的請求URL!
        ?    Ant 風格資源地址支持 3 種匹配符:
        –    ?:匹配文件名中的一個字符
        –    *:匹配文件名中的任意多個任意字符[0個字符除外!]
        –    **:** 匹配多層路徑
 
        ?@RequestMapping 還支持 Ant 風格的 URL:
        –/user/*/createUser: 匹配
        /user/aaa/createUser、/user/bbb/createUser 等 URL
        –/user/**/createUser: 匹配
        /user/createUser、/user/aaa/bbb/createUser 等 URL
        –/user/createUser??: 匹配
        /user/createUseraa、/user/createUserbb 等 URL
 
 
    @PathVariable    映射 URL 綁定的佔位符
        帶佔位符的 URL 是 Spring3.0 新增的功能,該功能在 SpringMVC 向 REST 目標挺進發展過程當中具備里程碑的意義
        經過 @PathVariable 能夠將 URL 中佔位符參數綁定到控制器處理方法的入參中:URL 中的 {xxx} 佔位符能夠經過
          @PathVariable("xxx") 綁定到操做方法的入參中,須要注意的是:該註解的value屬性值要與佔位符保持一致。

6.REST:即 Representational State Transfer。(資源)表現層狀態轉化。是目前最流行的一種互聯網軟件架構。

        它結構清晰、符合標準、易於理解、擴展方便, 因此正獲得愈來愈多網站的採用.
         HTTP 協議裏面,四個表示操做方式的動詞:GET、POST、PUT、DELETE。
         它們分別對應四種基本操做:
             GET 用來獲 取資源,
             POST 用來新建資源,
             PUT 用來更新資源,
             DELETE 用來刪除資源。
 
        示例:
            –/order/1    HTTP GET :獲得 id = 1 的 order
            –/order/1    HTTP DELETE:刪除 id = 1的 order
            –/order/1    HTTP PUT:更新id = 1的 order
 
            –/order    HTTP POST:新增 order
 
            ?HiddenHttpMethodFilter:瀏覽器 form 表單只支持 GET 與 POST 請求,而DELETE、PUT 等 method 並不支 持,Spring3.0  添加了一個過濾器,能夠將這些請求轉換 爲標準的 http 方法,使得支持 GET、POST、PUT 與 DELETE 請求。
 
        POST請求如何轉化爲put請求和delele請求?
         1.在web.xml文件中配置:       
  <!-- HiddenHttpMethodFilter過濾器能夠將POST請求轉化爲put請求和delete請求! -->
            <filter>
                <filter-name>hiddenHttpMethodFilter</filter-name>
                <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
            </filter>
            <filter-mapping>
                <filter-name>hiddenHttpMethodFilter</filter-name>
                <url-pattern>/*</url-pattern>
            </filter-mapping>
 
       2.在表單域中須要攜帶一個name值爲_method,value值爲put或者delete的參數,以下所示:
 
 
 <form action="${pageContext.request.contextPath }/order/1" method="post">
            <input type="hidden" name="_method" value="put"/>
            <input type="submit" value="Submit"/>
        </form>
        <form action="${pageContext.request.contextPath }/order/1" method="post">
            <input type="hidden" name="_method" value="delete"/>
            <input type="submit" value="Submit"/>
        </form>

7.@RequestParam---【能夠接收請求的參數,至關於Servlet的getParameter()方法!】

           注意:要把@RequestParam和@PathVariable區分開:
                    三個默認屬性:
                         value:這個字段要與請求參數的name屬性值一致!
                         required:布爾值,默認是true,當指定爲false的時候,說明這個參數不是必須的,能夠不帶!
                         defaultValue:在咱們不傳值的時候,默認使用defaultValue的值,傳遞參數的時候,使用咱們傳遞的參數值!
                這裏須要聲明一下:咱們在利用defaultValue這個屬性的時候,是咱們在表單項裏面沒有該表單項輸入框時纔會使用到的。

8.@RequestHeader---【獲取請求頭信息】

     默認屬性:
             value:這個字段要與請求參數的name屬性值一致!
             required:布爾值,默認是true,當指定爲false的時候,說明這個參數不是必須的,能夠不帶!
             defaultValue:在咱們不傳值的時候,默認使用defaultValue的值,傳遞參數的時候,使用咱們傳遞的參數值!
 
 

9.針對POST請求亂碼的處理:

              在web.xml文件中加上CharacterEncodingFilter
         須要注意的是:咱們在攔截這個請求的時候,須要在比較靠前的位置,因此通常都是在配置完controller之後當即配置這個post listener亂碼監聽器。
    
<filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
相關文章
相關標籤/搜索