流程图:
流程解析:(序号与图中不是一一对应)
1、客户端发起请求,DispatcherServlet拦截到请求
2、DispatcherServlet会 找HandlerMapping来查找 URL对应的的处理器(所有的处理器在启动的时候都会注册)
3、HandlerMapping 返回一个HandlerExecutionChaind对象(里面包含一个handler 和 多个拦截器)
public class HandlerExecutionChain {
private static final Log logger = LogFactory.getLog(HandlerExecutionChain.class);
private final Object handler;
@Nullable
private HandlerInterceptor[] interceptors;
@Nullable
private List<HandlerInterceptor> interceptorList;
/***************省略其他***************/
}
4、DispatcherServlet 调用 HandlerAdapter(处理器适配器,常用的实现类是HttpRequestHandlerHandler)执行handler
5、处理器调用控制器,通过数据层得到数据,并将数据放入到数据模型中,返回模型和视图(ModelAndView)
6、DispatcherServlet得到 ModelAndView,找ViewResolver解析视图(不是必须的,如返回的是JSON格式的数据)
一般解析的视图的名称就是我们RequestMapping()注解中的路径名,然后根据这个路径取找到对应的JSP的静态文件
7、将数据和JSP模板做相应的替换处理一并返回个浏览器