SpringMVC執行詳細流程與springmvc配置文件
SpringMVC執行詳細流程
- 用戶發送請求至前端控制器DispatcherServlet,判斷springmvc中是否存在與請求相應的映射,存在直接轉“3”。
- 是否配置<mvc:default-servlet-handler>,是則訪問目標靜態資源,否則前端404+後端控制檯報錯"No mapping found for HTTP request with URI [/xxx/xxx] in DispatcherServlet" 。
- DispatcherServlet收到請求調用處理器映射器HandlerMapping。
- 處理器映射器根據請求url找到具體的處理器,生成處理器執行鏈HandlerExecutionChain(帶業務對象方法和攔截器)一併返回給DispatcherServlet。
- DispatcherServlet根據處理器Handler獲取處理器適配器HandlerAdapter執行HandlerAdapter處理一系列的操作,如:參數封裝,數據格式轉換,數據驗證等操作。
- 調用攔截器的preHandler方法。
- 執行處理器Handler(Controller,也叫頁面控制器)。
- Handler執行完成返回ModelAndView
- 調用攔截器的postHandler方法。
- HandlerAdapter將Handler執行結果ModelAndView返回到DispatcherServlet
- DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
- ViewReslover解析後返回具體View
- DispatcherServlet對View進行渲染視圖(即將模型數據model填充至視圖中)。
- 調用攔截器的afterHandler方法。
- DispatcherServlet響應用戶。
- 流程爲我自己的理解與原作者文章與整合,原文出處:https://www.jianshu.com/p/8a20c547e245
springmvc配置文件
web.xml
最基本必配的前端控制器:
<!-- springMVC的前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--init-param配置文件的位置 如果springmvc.xml是以xxx-servlet.xml命名,並且位於/WEB-INF下則不需要配置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup><!-- 1表示立即加載 -->
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
springmvc.xml
- 類包掃描
- 視圖解析器
- 靜態資源處理器與註解驅動器
<beans>
<context:component-scan base-package="com.*" >
</context:component-scan>
<!-- 配置視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/"/><!-- 前綴 -->
<property name="suffix" value=".jsp"/>><!-- 後綴 -->
</bean>
<mvc:annotation-driven /><!-- 使靜態資源可被訪問 -->
<mvc:default-servlet-handler/><!-- 配置註解驅動後不配這個無法正常訪問requestMapping -->
</beans>
vlet-handler/>