1.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>