Spring MVC执行流程和组件
郭尕 人气:01.Spring MVC执行流程
Spring MVC的完整执行流程如下:
- 客户端发送请求给DispatcherServlet前端控制器
- DispatcherServlet根据请求调用HandlerMapping处理器映射器
- HandlerMapping解析请求对应的Handler,返回一个执行链
- DispatcherServlet将执行链返回的Handler信息发给HandlerAdapter处理器适配器
- HandlerAdapter会调用对应的Handler处理器(即Controller)
- Handler执行完成后,会返回一个ModelAndView对象给HandlerAdapter
- HandlerAdapter将接收到的ModelAndView对象返回给DispatcherServlet
- DispatcherServlet根据ModelAndView对象选择合适的ViewResolver视图解析器
- ViewResolver根据逻辑View返回实际的view给DispatcherServlet
- DispatcherServlet对View进行渲染
- 将视图渲染结果返回给浏览器(客户端)
2.Spring MVC常用组件
2.1 DispatcherServlet
前端控制器。⽤户请求到达前端控制器,它就相当于MVC模式中的C,DispatcherServlet是整个流程控制的中⼼,由它调⽤其它组件处理⽤户的请求,DispatcherServlet的存在降低了组件之间的耦合性,系统扩展性提⾼。
<!-- SpringMVC的前端控制器--> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--初始化时加载配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-config.xml</param-value> </init-param> <!--表示容器在启动时立即加载Servlet--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
2.2 HandlerMapping
HandlerMapping,处理器映射器。根据⽤户的请求地址来找到对应的Handler即控制器,spring mvc提供了不同的映射器实现不同的映射⽅式,分别有:
- xml配置⽅式
- 实现接⼝⽅式
- 注解⽅式
2.3 HandlAdapter
HandlAdapter,处理器适配器。按照特定的规则去执行Handler,通过HandlerAdapter执行处理器。
2.4 Handler
Handler,处理器。Handler 是DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的⽤户请求进⾏处理。由于Handler涉及到具体的⽤户业务请求,所以⼀般情况需要程序员根据业务需求开发Handler。也就是我们常说的控制器类和方法。
//标识此类为控制器类 @Controller public class JspController { @RequestMapping("/index") public String firstController(){ //返回视图名称 return "success"; } }
2.5 ViewResolver
ViewResolver,视图解析器。ViewResolver负责将处理结果⽣成View视图,ViewResolver⾸先根据逻辑视图名解析成物理视图名即具体的页⾯地址,再⽣成View视图对象,最后对View进⾏渲染将处理结果通过页⾯展⽰给⽤户。
<!--默认的内置视图解析器--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--视图前缀--> <property name="prefix" value="/WEB-INF/jsp/"/> <!--视图后缀--> <property name="suffix" value=".jsp"/> </bean>
总结
加载全部内容