Spring第六--SpringMVC基本入門
1. SpringMVC簡介
1.1 SpringMVC概述
SpringMVC是一種基於Java 的實現MVC 設計模型的請求驅動型別的輕量級Web 框架,屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow 中。
SpringMVC已經成為目前最主流的MVC框架之一,並且隨著Spring3.0 的釋出,全面超越Struts2,成為最優秀的MVC 框架。它通過一套註解,讓一個簡單的Java 類成為處理請求的控制器,而無須實現任何介面。同時它還支援RESTful程式設計風格的請求。
1.2 SpringMVC快速入門
需求:客戶端發起請求,伺服器端接收請求,執行邏輯並進行檢視跳轉。
開發步驟:
①匯入SpringMVC相關座標
②配置SpringMVC核心控制器DispathcerServlet
③建立Controller類和檢視頁面
④使用註解配置Controller類中業務方法的對映地址
⑤配置SpringMVC核心檔案spring-mvc.xml
⑥客戶端發起請求測試
(第一步)匯入spring和springMvc的座標
<!--Spring座標-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<!--SpringMVC座標-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
(第二步)在web.xml配置SpringMVC的核心控制器
<servlet>
<servlet-name>DispatcherServlet</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>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
(第三、四步)建立Controller,配置註解
@Controller
public class QuickController {
@RequestMapping
("/quick")
public String quickMethod(){
System.out.println("quickMethod running.....");
return "index";}}
建立檢視頁面index.jsp
<html><body><h2>Hello SpringMVC!</h2></body></html>
(第五步)建立spring-mvc.xml,配置註解掃描controller
(在spring的配置檔案applicationContext.xml配置註解掃描dao和service)
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">
<!--controller配置註解掃描-->
<context:component-scan base-package="com.itheima"/></beans>
(第六步)訪問測試地址http://localhost:8080/itheima_springmvc1/quick
1.3 SpringMVC流程圖示
2 SpringMVC元件解析
2.1 springmvc執行流程
SpringMVC的執行流程
①使用者傳送請求至前端控制器DispatcherServlet。
②DispatcherServlet收到請求呼叫HandlerMapping處理器對映器。
③處理器對映器找到具體的處理器(可以根據xml配置、註解進行查詢),生成處理器物件及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。
④DispatcherServlet呼叫HandlerAdapter處理器介面卡。
⑤HandlerAdapter經過適配呼叫具體的處理器(Controller,也叫後端控制器)。
⑥Controller執行完成返回ModelAndView。
⑦HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet。
⑧DispatcherServlet將ModelAndView傳給ViewReslover檢視解析器。
⑨ViewReslover解析後返回具體View。
⑩DispatcherServlet根據View進行渲染檢視(即將模型資料填充至檢視中)。DispatcherServlet響應使用者。
2.2 springmvc元件解析
1. 前端控制器:DispatcherServlet
使用者請求到達前端控制器,它就相當於MVC 模式中的C,DispatcherServlet是整個流程控制的中心,由它呼叫其它元件處理使用者的請求,DispatcherServlet的存在降低了元件之間的耦合性。
2. 處理器對映器:HandlerMappingHandlerMapping
負責根據使用者請求找到Handler 即處理器,SpringMVC提供了不同的對映器實現不同的對映方式,例如:配置檔案方式,實現介面方式,註解方式等。
3. 處理器介面卡:HandlerAdapter
通過HandlerAdapter對處理器進行執行,這是介面卡模式的應用,通過擴充套件介面卡可以對更多型別的處理器進行執行。
4. 處理器:Handler
它就是我們開發中要編寫的具體業務控制器。由DispatcherServlet把使用者請求轉發到Handler。由Handler 對具體的使用者請求進行處理。
5. 檢視解析器:View Resolver
View Resolver 負責將處理結果生成View 檢視,View Resolver 首先根據邏輯檢視名解析成物理檢視名,即具體的頁面地址,再生成View 檢視物件,最後對View 進行渲染將處理結果通過頁面展示給使用者。
6. 檢視:View
SpringMVC框架提供了很多的View 檢視型別的支援,包括:jstlView、freemarkerView、pdfView等。最常用的檢視就是jsp。一般情況下需要通過頁面標籤或頁面模版技術將模型資料通過頁面展示給使用者,需要由程式設計師根據業務需求開發具體的頁面
2.3 springmvc註解解析
@RequestMapping
(1)作用:用於建立請求URL 和處理請求方法之間的對應關係
(2)位置:
類上,請求URL 的第一級訪問目錄。此處不寫的話,就相當於應用的根目錄
方法上,請求URL 的第二級訪問目錄,與類上的使用@ReqquestMapping標註的一級目錄一起組成訪問虛擬路徑
(3)屬性:
value:用於指定請求的URL。它和path屬性的作用是一樣的。
@RequestMapping(value=“/user”)
method:用於指定請求的方式
@RequestMapping(value=“/user,method=RequestMethod.Get)
params:用於指定限制請求引數的條件。它支援簡單的表示式。要求請求引數的key和value必須和配置的一模一樣
例如:params= {"accountName"},表示請求引數必須有accountNameparams= {"moeny!100"},表示請求引數中money不能是100。
@Controller
@RequestMapping("/user")
public class QuickController {
@RequestMapping("/quick")
public String quickMethod(){
System.out.println("quickMethod running.....");
return "success.jsp";}}
//相對地址 return "success.jsp"
相對地址,相對當前資源所在地址,當前訪問quick所在地址http://localhost:8080/user /,所以會去user下找success
//絕對地址 return "/success.jsp"
從當前web應用下去找success.jsp
2.4 springmvc.xml配置說明
1. mvc名稱空間
引入名稱空間:xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc=http://www.springframework.org/schema/mvc
約束地址:http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd2.
元件掃描SpringMVC基於Spring容器,所以在進行SpringMVC操作時,需要將Controller儲存到Spring容器中,如果使用@Controller註解標註的話,就需要使用<context:component-scanbasepackage=“com.itheima.controller"/>進行元件掃描。
2. 檢視解析器
SpringMVC有預設元件配置,預設元件都是DispatcherServlet.properties配置檔案中配置的,該配置檔案地址org/springframework/web/servlet/DispatcherServlet.properties,該檔案中配置了預設的檢視解析器,如下:org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
翻看該解析器原始碼,可以看到該解析器的預設設定,如下:REDIRECT_URL_PREFIX = "redirect:" --重定向字首FORWARD_URL_PREFIX = "forward:" --轉發字首(預設值)
prefix = ""; --檢視名稱字首suffix = ""; --檢視名稱字尾
【說明:return "/success.jsp"; 等同於
預設return "forward:/success.jsp";】
3、配置 檢視前後綴
返回views包下的jsp【return "/views/success.jsp";
】,為了方便開發,可以在springmvc.xml配置內部資源檢視解析器,省略jsp的寫法,寫成【return "success";】,解析時,會自動加上配置的前後綴
<!--配置內部資源檢視解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>