1.用户发送请求至前端控制器DispatcherServlet。
2.DispatcherServlet 收到请求调用HandlerMapping处理器映射器。
3.处理器映射器找到具体的处理器(可以根据xml 配置、注解进行查找),生成处理器及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4.DispatcherServlet调用HandlerAdapter 处理器适配器。
5.HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)
6.Controller 执行完成返回ModelAndView。
7.HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet.
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9.ViewReslover解析后返回具体View。
10.DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。11.DispatcherServlet响应用户。
二、SpringMVC的主要组件Handler:也就是处理器。它直接应对着MVC中的C也就是Controller层,它的具体表现形式有很多,可以是类,也可以是方法。在Controller层中@RequestMapping标注的所有方法都可以看成是一个Handler,只要可以实际处理请求就可以是Handler
1、HandlerMapping
initHandlerMappings(context),处理器映射器,根据用户请求的资源uri来查找Handler的。在SpringMVC中会有很多请求,每个请求都需要一个Handler处理,具体接收到一个请求之后使用哪个Handler进行,这就是
HandlerMapping需要做的事。
2、HandlerAdapter
initHandlerAdapters(context),适配器。因为SpringMVC中的Handler可以是任意的形式,只要能处理请求就ok,但是Servlet需要的处理方法的结构却是固定的,都是以request和response为参数的方法。如何让固定的Servlet处理方法调用灵活的Handler来进行处理呢?这就是HandlerAdapter要做的事情。
Handler是用来干活的工具;HandlerMapping用于根据需要干的活找到相应的工具;HandlerAdapter是使用工具干活的人。
1)用户发送请求至前端控制器DispatcherServlet。
2) DispatcherServlet收到请求调用HandlerMapping 处理器映射器。
3)处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4) DispatcherServlet调用HandlerAdapter处理器适配器。
5) HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)6) Controller执行完成返回ModelAndView。
7) HandlerAdapter将controller 执行结果ModelAndView返回给DispatcherServlet。 8) DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9) ViewReslover解析后返回具体View。
10)DispatcherServlet 根据View进行渲染视图(即将模型数据填充至视图中)。11) DispatcherServlet响应用户。
控制器肯定是单例模式,单例模式就会有线程安全问题。
Spring中保证线程安全的方法:
1.将scop设置成非singleton。例如prototype,request。缺点会给服务器带来很多垃圾,不常用。
2.最好的方法是将控制器Contorller设置成无状态模式.在控制器中不要携带数据,但是可以引用无状态的service和dao。
@Component
@Contorller
public class A{
@Autowired
public XXXService service;
publec viod sout(){
System.out.println("======= A =======")
}
}



