springmvc框架溫習

SpringMVC是Spring框架的一個模塊,springmvc和spring無需通過中間整合層進行整合,是基於mvc的web框架
一、步驟描述及圖解
在這裏插入圖片描述
SpringMVC圖解
在這裏插入圖片描述
第1步 瀏覽器發送請求到前端控制器DispatchServlet
第2步 前端控制器請求HandlerMapping查找Handler,可以根據xml配置、註解進行查找
第3步 處理映射器HandlerMapping前端控制器返回Handler
第4步 前端控制器請求處理器適配器(HandlerAdapter)執行Handler
第5步 處理器適配器調用Handler
第6步 處理器(Handler)處理器適配器返回ModelAndView(是spring框架的一個底層對象)
第7步 處理器適配器前端控制器返回ModelAndView
第8步 前端控制器請求視圖解析器(viewResolver)進行視圖解析,根據邏輯視圖名解析成真正的視圖(如jsp頁面)
第9步 視圖解析器向前端控制器返回view
第10步 前端控制器進行視圖渲染,將模型數據(在ModelAndView對象中)填充到request域
第11步 前端控制器向用戶響應結果
組件解釋:
1、前端控制器 DispatchServlet(框架提供)接收請求、響應結果,相當於轉發器(中央處理器),減少了其它組件之間的耦合
2、處理器映射器 HandlerMapping(框架提供),根據請求的url查找Handler
3、處理器適配器 HandlerAdapter 按照HandlerAdapter 要求的規則去執行Handler
4、處理器Handler(需要開發)編寫時按照HandlerAdapter的要求,這樣適配器才能正確執行Handler
5、視圖解析器ViewResolver(框架提供)進行視圖解析,根據視圖名解析成真正的視圖(view)
6、視圖 view(需要開發)是一個接口,實現類支持不同的view類型(jsp、freemarke…)
二、編碼部分
web.xml配置前端控制器DispatchServlet

<!-- springMvc前端控制器 -->
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	
  	<!-- contextConfigLocation配置springmvc加載的配置文件(其中配置處理器映射器,適配器等)
  		如果不配置contextConfigLocation,默認加載的是WEB-INF/servlet名稱-servlet.xml(即springmvc-servlet.xml)
  	 -->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:spring-mvc.xml</param-value>
  	</init-param>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<!-- 
  		1、匹配順序
		該標籤處理客戶端請求的順序爲:
		(1)完全匹配
		<url-pattern>/test/userList.action</url-pattern>
		完全匹配就是等值匹配,它是最先被匹配到的客戶端請求。
		
		(2)路徑匹配
		<url-pattern>/*</url-pattern> 匹配根路徑下的全部請求
		路徑匹配類似於模糊匹配,對於/list、listInfo.do、checkInfo.action、index.jsp、abc.css、my.js等等url請求,都可以被匹配到。這種匹配的順序排在完全匹配後面。
		(3)擴展名匹配
		<url-pattern>*.action</url-pattern>匹配全部action 結尾的請求
		<url-pattern>*.css</url-pattern> 匹配全部 css結尾的請求
		<url-pattern>*</url-pattern> 不能用 * ,否則報錯
		說明:這種匹配匹配在開發中用的比較多,但不能使用*代替,否則會報錯。
		結論:容器會首先查找完全匹配,如果找不到,再查找目錄匹配,如果也找不到,就查找擴展名匹配。
		
		(1)<url-pattern>/</url-pattern>
		會匹配到 /toIndex 這種類型的 url ,不會匹配到模式爲 *.jsp 這樣的後綴型 url。
		(2)<url-pattern>/*</url-pattern>
		會匹配所有路徑型的和後綴型的url。
  	 -->
  	<!--配置方式 
  		第一種:*.action  訪問以.ation結尾的路徑 由DispatcherServlet進行解析
  		第二種:/  所有訪問的地址都由DispatcherServlet進行解析,對於靜態文件的解析需要配置不讓DispatcherServlet解析
  				使用此種方式可以實現RESTful風格的url
  		第三種:/*  這樣配置錯誤,使用這種配置最終要轉發一個jsp頁面時仍然會使用DispatcherServlet解析jsp地址,不能根據jsp頁面找到Handler會報錯
  	 -->
  	<url-pattern>*.action</url-pattern>
  </servlet-mapping>

spring-mvc.xml配置
配置處理器適配器

<!-- 處理器適配器  所有處理器適配器都實現了HandlerAdapter -->
<bean id="simpleControllerHandlerAdapter" class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

此接口實現了controller的Handler接口在這裏插入圖片描述
配置處理器映射器

<!-- 處理器映射器 簡單url映射
	將bean的name作爲url進行查找,需要配置Handler時指定beanname(即url)
-->
<bean id="beanNameUrlHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

配置視圖解析器

<!-- 視圖解析器 解析jsp視圖,默認使用jstl標籤,classpath下得有jstl的包 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>

配置Handler

<!-- 配置Handler 這裏的後綴對應web.xml中url-pattern的配置 -->
<bean id="itemsController" name="/queryList.action" class="com.idea.controller.ItemsController"></bean>

簡單的url映射

<bean id="simpleControllerHandlerAdapter" class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">
	<property name="mappings">
		<props>
			<!-- 對controller進行url映射 填寫controller bean標籤的id,同一個bean可以有多個url -->
			<prop key="/query1.action">itemsController</prop>
		</props>
	</property>
</bean>

多個映射器可以並存,前端控制器會判斷url符合規則的都可以
關於spring註解配置
前端控制器從/org/springframework/web/servlet/DispatcherServlet.properties文件中加載處理器映射器、適配器、視圖解析器等組件,如果不在springmvc.xml中配置,則使用默認加載
在spring版本3.1前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping註解映射器
在這裏插入圖片描述
在spring版本3.1後使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping註解映射器
在這裏插入圖片描述
在spring版本3.1之前使用org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter註解適配器
在這裏插入圖片描述
在spring版本3.1之後使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter註解適配器
在這裏插入圖片描述
通過springmvc源碼分析執行過程
第一步:前端控制器接收請求
調用 doDispatch方法在這裏插入圖片描述
第二步:doDispatch方法會執行getHandler方法 返回HandlerExecutionChain
在這裏插入圖片描述
第三步:調用處理器適配器處理Handler,返回ModelAndView
在這裏插入圖片描述
第四步:調用視圖解析器得到view
視圖解析器
視圖渲染 將model數據填充到Request域
在這裏插入圖片描述
視圖解析器配置,可配置jsp頁面前後綴

在這裏插入圖片描述

發佈了24 篇原創文章 · 獲贊 3 · 訪問量 4034
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章