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>