天天看點

SpringMVC詳解

   現在主流的web mvc架構除了struts這個主力 外,其次就是spring mvc了,是以這也是作為一名程式員需要掌握的主流架構,架構選擇多了,應對多變的需求和業務時,可實行的方案自然就多了。不過要想靈活運用spring mvc來應對大多數的web開發,就必須要掌握它的配置及原理。

  一、spring mvc環境搭建:(spring 2.5.6 + hibernate 3.2.0)

  1. jar包引入

  spring 2.5.6:spring.jar、spring-webmvc.jar、commons-logging.jar、cglib-nodep-2.1_3.jar

  hibernate 3.6.8:hibernate3.jar、hibernate-jpa-2.0-api-1.0.1.final.jar、antlr-2.7.6.jar、commons-collections-3.1、dom4j-1.6.1.jar、javassist-3.12.0.ga.jar、jta-1.1.jar、slf4j-api-1.6.1.jar、slf4j-nop-1.6.4.jar、相應資料庫的驅動jar包

springmvc是一個基于dispatcherservlet的mvc架構,每一個請求最先通路的都是dispatcherservlet,dispatcherservlet負責轉發每一個request請求給相應的handler,handler處理以後再傳回相應的視圖(view)和模型(model),傳回的視圖和模型都可以不指定,即可以隻傳回model或隻傳回view或都不傳回。

dispatcherservlet是繼承自httpservlet的,既然springmvc是基于dispatcherservlet的,那麼我們先來配置一下dispatcherservlet,好讓它能夠管理我們希望它管理的内容。httpservlet是在web.xml檔案中聲明的。

SpringMVC詳解
SpringMVC詳解

 spring-servlet.xml配置

  spring-servlet這個名字是因為上面web.xml中<servlet-name>标簽配的值為spring(<servlet-name>spring</servlet-name>),再加上“-servlet”字尾而形成的spring-servlet.xml檔案名,如果改為springmvc,對應的檔案名則為springmvc-servlet.xml。

SpringMVC詳解
SpringMVC詳解

dispatcherservlet會利用一些特殊的bean來處理request請求和生成相應的視圖傳回。

關于視圖的傳回,controller隻負責傳回來一個值,然後到底傳回的是什麼視圖,是由視圖解析器控制的,在jsp中常用的視圖解析器是internalresourceviewresovler,它會要求一個字首和一個字尾

在上述視圖解析器中,如果controller傳回的是blog/index,那麼通過視圖解析器解析之後的視圖就是/jsp/blog/index.jsp。

主要是說說controller.

一個類使用了@controller進行标記的都是controller

SpringMVC詳解
SpringMVC詳解

以上4個方法示例,是一個controller裡含有不同的請求url,也可以采用一個url通路,通過url參數來區分通路不同的方法,代碼如下:

SpringMVC詳解
SpringMVC詳解

 其實requestmapping在class上,可看做是父request請求url,而requestmapping在方法上的可看做是子request請求url,父子請求url最終會拼起來與頁面請求url進行比對,是以requestmapping也可以這麼寫:

SpringMVC詳解
SpringMVC詳解

在springmvc中常用的注解還有@pathvariable,@requestparam,@pathvariable标記在方法的參數上,利用它标記的參數可以利用請求路徑傳值,看下面一個例子

在該例子中,blogid是被@pathvariable标記為請求路徑變量的,如果請求的是/blog/comment/1.do的時候就表示blogid的值為1. 同樣@requestparam也是用來給參數傳值的,但是它是從頭request的參數裡面取值,相當于request.getparameter("參數名")方法。

在controller的方法中,如果需要web元素httpservletrequest,httpservletresponse和httpsession,隻需要在給方法一個對應的參數,那麼在通路的時候springmvc就會自動給其傳值,但是需要注意的是在傳入session的時候如果是第一次通路系統的時候就調用session會報錯,因為這個時候session還沒有生成。