springmvc核心流程及配置

原文連接http://zhhll.icu/2020/06/14/%E6%A1%86%E6%9E%B6/springmvc/springmvc%E6%A0%B8%E5%BF%83%E6%B5%81%E7%A8%8B%E5%8F%8A%E9%85%8D%E7%BD%AE/css

核心流程及配置

核心流程

  • 首先用戶發送請求-------->DispatcherServlet,前端控制器收到請求後本身不進行處理,而是委託給其餘的解析器進行處理,做爲同一訪問點,進行全局的流程控制html

  • DispatcherServlet--------->HandlerMapping,HandlerMapping將會把請求映射爲HandlerExecutionChain對象(包含一個Handler處理器對象、多個HandlerInterceptor攔截器),經過策略模式,很容易添加新的映射策略前端

  • DispatcherServlet---------->HandlerAdapter,HandlerAdapter將會把處理器包裝爲適配器,從而支持多種類型的處理器,即適配設計模式的應用,從而很容易支持不少類型的處理器web

  • HandlerAdapter------------->處理器功能處理方法的調用,HandlerAdapter將會根據適配的結果調用真正的處理器的功能處理方法,完成功能處理,並返回一個ModelAndView對象spring

  • ModelAndView的邏輯視圖名-------->ViewResolver,ViewResolver將把邏輯視圖解析爲具體的View,經過這種策略模式,很容易更換其餘視圖技術設計模式

  • View------>渲染,View會根據傳進來的Model模型進行渲染,此處的Model實際是一個Maptomcat

  • 返回控制權給DispatcherServlet,有DispatcherServlet返回響應給用戶服務器

配置

DispatcherServlet

DispatcherServlet充當SpringMVC的前端控制器。與其餘Servlet同樣,DispatcherServlet必須在Web應用程序的web.xml文件中進行配置架構

web.xml配置mvc

<!-- springmvc會過濾掉.html的 致使視圖解析器沒法找到
     若是隻是使用jsp資源而未使用html的話能夠不配置該項
-->
<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.html</url-pattern>
</servlet-mapping>
<!-- 配置DispatcherServlet -->
<servlet>
  <servlet-name>DispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <!-- 初始化參數:配置Springmvc配置文件的位置和名稱
        默認配置文件爲:/WEB-INF/<servlet-name>-servlet.xml
  -->
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:springmvc.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>
<!-- 處理靜態資源 -->
<mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"></mvc:resources>
<mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"></mvc:resources>
<mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"></mvc:resources>
靜態資源請求問題

由於DispatcherServlet的 配置的是/,針對的是全部請求,因此對於一些的靜態資源(如.js、.css)等也會通過DispatcherServlet,可是DispatcherServlet是處理動態請求的,沒法處理靜態資源

配置<mvc:default-servlet-handler/>來解決,做用是處理靜態資源,將在SpringMVC上下文中定義一個DefaultServletHttpRequestHandler,會對進行DispatcherServlet的請求進行篩選,若是發現是沒有通過映射的請求,就將請求交給WEB服務器默認的Servlet來處理,不然交由DispatcherServlet來處理

default-servlet-name默認是default,若是不是default須要顯式的進行配置(看所使用的web服務器,tomcat是default

<mvc:default-servlet-handler default-servlet-name="default"/>

須要注意的是,配置了<mvc:default-servlet-handler/>以後,@RequestMapping的映射會失效,須要加上<mvc:annotation-driven/>配置

HandlerMapping

spring自帶了多個處理器映射實現

  • BeanNameUrlHandlerMapping 根據控制器Bean的名字將控制器映射到URL

  • ControllerBeanNameHandlerMapping 與BeanNameUrlHandlerMapping相似

  • ControllerClassNameHandlerMapping 經過使用控制器的類名做爲URL基礎將控制器映射到URL

  • DefaultAnnotationHandlerMapping 將請求映射給使用@RequestMapping註解的控制器和控制器方法

  • SImplerUrlHandlerMapping 使用定義在Spring應用上下文的集合將控制器映射到URL

<!-- 開啓註解 -->
<mvc:annotation-driven/>
<bean id="defaultAnnotationHandlerMapping" 		 	class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
mvc:annotation-driven配置的做用
  • <mvc:annotation-driven/>會自動註冊RequestMappingHandlerMapping、RequestMappingHandlerAdater、ExceptionHandlerExceptionResolver三個bean
  • 支持使用ConversionService實例對錶單參數進行類型轉換
  • 支持使用@NumberFormatannotation、@DataTimeFormat註解完成數據類型的格式化
  • 支持使用@Vaild註解對JavaBean實例進行JSR 303驗證
  • 支持使用@RequestBody和@ResponseBody註解

HandlerAdapter

<bean id="annotationMethodHandlerAdapter"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

配置視圖

InternalResourceViewResolver將邏輯視圖名稱解析爲View對象,架構該對象渲染的任務委託給Web應用程序上下文的一個模板

<!-- 配置視圖解析器,將ModelAndView及字符串解析爲具體的頁面 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
    <property name="prefix" value="/WEB-INF/jsp/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>

因爲自己的博客百度沒有收錄,博客地址http://zhhll.icu

相關文章
相關標籤/搜索