原文鏈接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/
核心流程及配置
核心流程
-
首先用戶發送請求-------->DispatcherServlet,前端控制器收到請求后自己不進行處理,而是委托給其他的決議器進行處理,作為同一訪問點,進行全域的流程控制
-
DispatcherServlet--------->HandlerMapping,HandlerMapping將會把請求映射為HandlerExecutionChain物件(包含一個Handler處理器物件、多個HandlerInterceptor攔截器),通過策略模式,很容易添加新的映射策略
-
DispatcherServlet---------->HandlerAdapter,HandlerAdapter將會把處理器包裝為配接器,從而支持多種型別的處理器,即適配設計模式的應用,從而很容易支持很多型別的處理器
-
HandlerAdapter------------->處理器功能處理方法的呼叫,HandlerAdapter將會根據適配的結果呼叫真正的處理器的功能處理方法,完成功能處理,并回傳一個ModelAndView物件
-
ModelAndView的邏輯視圖名-------->ViewResolver,ViewResolver將把邏輯視圖決議為具體的View,通過這種策略模式,很容易更換其他視圖技術
-
View------>渲染,View會根據傳進來的Model模型進行渲染,此處的Model實際是一個Map
-
回傳控制權給DispatcherServlet,有DispatcherServlet回傳回應給用戶
配置
DispatcherServlet
DispatcherServlet充當SpringMVC的前端控制器,與其他Servlet一樣,DispatcherServlet必須在Web應用程式的web.xml檔案中進行配置
web.xml配置
<!-- 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的
配置<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" />
mvc:annotation-driven配置的作用
- <mvc:annotation-driven/>會自動注冊RequestMappingHandlerMapping、RequestMappingHandlerAdater、ExceptionHandlerExceptionResolver三個bean
- 支持使用ConversionService實體對表單引數進行型別轉換
- 支持使用@NumberFormatannotation、@DataTimeFormat注解完成資料型別的格式化
- 支持使用@Vaild注解對JavaBean實體進行JSR 303驗證
- 支持使用@RequestBody和@ResponseBody注解
HandlerAdapter
<bean id="annotationMethodHandlerAdapter"
/>
配置視圖
InternalResourceViewResolver將邏輯視圖名稱決議為View物件,架構該物件渲染的任務委托給Web應用程式背景關系的一個模板
<!-- 配置視圖決議器,將ModelAndView及字串決議為具體的頁面 -->
<bean >
<property name="viewClass" value="https://www.cnblogs.com/life-time/p/org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="https://www.cnblogs.com/WEB-INF/jsp/"></property>
<property name="suffix" value="https://www.cnblogs.com/life-time/p/.jsp"></property>
</bean>
由于本身的博客百度沒有收錄,博客地址http://zhhll.icu
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/265262.html
標籤:Java
下一篇:如何發起并運營一個開源專案
