1. 程式人生 > >SpringMVC框架 SpringMVC的獲取01

SpringMVC框架 SpringMVC的獲取01

patch ati 配置文件 ase name thum 發現 tty 支持

---恢復內容開始---

SpringMVC通過實現MVC模式,很好地將數據、業務與展現進行了分離。從MVC的角度來說,SpringMVC和Struts2非常類似,但SpringMVC采用了可插拔的組件結構,更加具有可擴展性和靈活性。自Spring3.0版本以後,SpringMVC已經全面超越了Struts2,成為目前最流行的MVC框架。

使用SpringMVC有“基於XML配置文件”和“基於註解”兩種形式,本書采用了目前使用較為廣泛的“基於註解”形式。

SpringMVC的獲取

Spring MVC屬於Spring FrameWork的後續產品。我們可以找到開發Spring所使用的spring-framework-4.2.5.RELEASE-dist.zip

,將其解壓,其中的libs目錄也包含了開發SpringMVC框架所依賴的jar包,具體如下:

序號 文件名 簡介
1-4 spring-aop-4.xx.RELEASE.jar spring-beans-4.xx.RELEASE.jar spring-context-4.xx.RELEASE.jar spring-core-4.xx.RELEASE.jar 這四個jar包已經在Spring中講解過,在此不再贅述。
5 spring-expression-4.xx.RELEASE.jar Spring表達式語言需要的類庫
6 spring-web-4.xx.RELEASE.jar 在Web應用開發過程中,用到Spring框架時所需的核心類庫
7 spring-webmvc-4.xx.RELEASE.jar Spring MVC框架相關的所有類。如國際化、標簽、Theme、FreeMarker等相關類

和開發Spring一樣,為了支持SpringMVC處理日誌,我們還需要commons-logging-1.1.3.jar

以上8個jar包,就是我們使用SpringMVC時需要導入的包。

說明:

以上8個jar包是開發SpringMVC的基礎,但隨著學習的深入,以後可能會逐步導入更多的jar包。若項目因為缺少jar包而運行失敗,Eclipse等開發工具都會給出錯誤提示,讀者可以根據提示內容,查找並加入所需的jar

包。

26.2 開發第一個SpringMVC程序

我們先通過一個簡單的示例,演示一下使用SpringMVC的基本流程。

(1)創建一個Web項目(項目名SpingMVCDemo),並導入上述8個jar包;

(2)src目錄下創建SpringMVC的配置文件:springmvc.xml。(在使用安裝了Spring Tool Suite的Eclipse中,具體的創建步驟:鼠標右鍵srcnew →Spring Bean Configuration File →輸入配置文件名“springmvc.xml” →finish,然後再在Namespaces中選擇“beans”、“context”及“mvc”,如圖)

技術分享圖片

圖26-01

(3)web.xml中配置前置控制器DispatcherServlet,用於攔截與<url-pattern>相匹配的請求,如下,

web.xml

復制
  1. <servlet>
  2. <servlet-name>springDispatcherServlet</servlet-name>
  3. <servlet-class>
  4. org.springframework.web.servlet.DispatcherServlet
  5. </servlet-class>
  6. <init-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <param-value>classpath:springmvc.xml</param-value>
  9. </init-param>
  10. <load-on-startup>1</load-on-startup>
  11. </servlet>
  12. <servlet-mapping>
  13. <servlet-name>springDispatcherServlet</servlet-name>
  14. <url-pattern>/</url-pattern>
  15. </servlet-mapping>

其中,

通過<url-pattern>指定了DispatcherServlet攔截的請求是:所有請求(“/”)。攔截後即交給SpringMVC處理。

SpringMVC中常見的<url-pattern>值如下表,

<url-pattern>值 含義
/ 所有請求,註意不能是/* ;“/”:所有請求;“/user”:以“user”開頭的所有請求;“/user/pay.action”:“/user/pay.action”這個唯一的請求。此方式會導致靜態資源(css,js,圖片等)無法正常顯示,後續會講解處理辦法。
*.do或*.action等 固定後綴的請求路徑。如*.action表示/save.action、/user/save.action等所有以“.action”結尾的請求。

通過<load-on-startup>設置讓DispatcherServlet隨著服務(如Tomcat)的啟動而同時啟動。

通過contextConfigLocation<param-value>值,指定了SpringMVC配置文件的路徑是:資源路徑(如src目錄)中的springmvc.xml文件。若不設置此<init-param>,則會根據SpringMVC的“默認約定”,自動加載認加WEB-INF目錄中的<servlet-name>-servlet.xml

例如,本web.xml中配置DispatcherServlet<servlet-name>是“springDispatcherServlet”,則默認路徑就是WEB-INF/springDispatcherServlet-servlet.xml

配置完contextConfigLocation後,SpringMVC就會隨著服務(如Tomcat)的啟動而自動初始化。

(4)開發前端請求頁面

index.jsp

復制
  1. <body>
  2. <a href="firstSpringMVC">My First SpringMVC Demo</a>
  3. </body>

如上,我們使用超鏈接向web.xml中的<url-pattern>發送一個可以被攔截的請求,然後交由SpringMVC處理。

(5)開發請求處理類

FirstSpringDemo.java

復制
  1. package org.lanqiao.handler;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. @Controller
  5. public class FirstSpringDemo
  6. {
  7. @RequestMapping("/firstSpringMVC")
  8. public String welcomeToSpringMVC()
  9. {
  10. return "success";
  11. }
  12. }

如上,使用@Controller註解來標識本類是一個SpringMVC Controller 對象; 使用@RequestMapping註解來映射請求的URL。

例如,在index.jsp發出的請求“/firstSPringMVC”,將會被映射到@RequestMapping("/firstSPringMVC")所標識的方法來處理。

(6)編寫SpringMVC配置文件

我們在“步驟(2)”時,已經將SpringMVC的路徑設置到了src下,並且命名為springmvc.xml

springmvc.xml

復制
  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. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
  7. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
  9. <!-- 配置需要掃描的包 -->
  10. <context:component-scan base-package="org.lanqiao.handler">
  11. </context:component-scan>
  12. <!-- 配置試圖解析器:把請求處理類的返回值,加工成最終的視圖路徑-->
  13. <bean class="org.springframework.web.servlet.
  14. view.InternalResourceViewResolver">
  15. <property name="prefix" value="/views/"></property>
  16. <property name="suffix" value=".jsp"></property>
  17. </bean>
  18. </beans>

其中,

通過<context:component-scan>,將“請求處理類(FirstSpringDemo.java)”所在的包交給SpringMVC掃描。SpringMVC在接受到請求後,就會去在該包內尋找標記有@Controller的處理類,再在找到的處理類中尋找標記有@RequestMapping的處理方法。若找到請求路徑和處理方法相匹配,就會用該處理方法來處理此請求。

例如,前臺<a href="firstSPringMVC"></a>發送一個路徑為“firstSPringMVC”的請求;而在<context:component-scan>所在包中,恰好有一個請求處理類(FirstSpringDemo.java)的welcomeToSpringMVC()方法被標識為了@RequestMapping("/firstSPringMVC"),其中參數“/firstSPringMVC”正好與發送的請求“firstSPringMVC”代表同一個路徑,SpringMVC就會用此welcomeToSpringMVC()方法來處理該請求。

通過<bean>指定視圖解析器為“InternalResourceViewResolver”類型。 此解析器會把“請求處理類中處理方法的返回值”按照“前綴+方法返回值+後綴”的形式進行加工,並把加工後的返回值作為目的路徑進行跳轉。

此解析器的常見<property>屬性值如下表,

屬性 簡介
prefix 給“請求處理類中處理方法的返回值”加上前綴,前綴就是該<property>的value值
suffix 給“請求處理類中處理方法的返回值”加上後綴,後綴就是該<property>的value值

例如,請求處理類FirstSpringDemo.java 的處理方法welcomeToSpringMVC()的返回值是“success”,就會給“success”加上前綴“/views/”和後綴“.jsp”,即加工後的返回值是“/views/success.jsp”。最後就會跳轉到“/views/success.jsp”頁面。

(7)開發前端結果顯示頁面

success.jsp

復制
  1. <body>
  2. Welcome to SpringMVC
  3. </body>

部署項目並執行index.jsp,結果如下,

技術分享圖片

圖26-02

點擊超鏈接My First SpringMVC Demo,結果如下,

技術分享圖片

圖26-03

可以發現,該請求跳轉到了超鏈接所指向的“firstSpingMVC”路徑, 再通過“請求轉發”跳轉到了結果頁/views/success.jsp

---恢復內容結束---

SpringMVC框架 SpringMVC的獲取01