1、SpringMVC运行流程
1、用户向服务器发送请求,请求被前端控制器DispathcerServlet捕获。
2、DispathcerServlet对请求的URL进行解析,得到请求资源标识符(URI),然后根据URL调用HandlerMapping获得Handler配置的所有相关对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回。
3、 DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter;(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法)。
4、提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。
5、 Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象。
6、根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet。
7、ViewResolver 结合Model和View,来渲染视图。
8、将渲染结果返回给客户端。
2、SpringMVC的控制器是不是单例的?如果是,有什么问题,怎么解决?
是单例模式,所以在多线程访问的时候有线程安全的问题,不要用同步,会影响性能,解决方案是在控制器里面不能写字段。
3、SpringMVC的主要组件
1、前端控制器DispatcherServlet
作用:前端请求,相应结果,相当于转发器
2、处理器映射器HandlerMapping
作用:根据请求的URL来查找对应的Handler
3、处理器适配器HandlerAdapter
4、视图解析器
4、SpringMVC是怎么实现重定向和转发的?
1、转发:在返回值前年加“forward:”
2、重定向:在返回值前面加“redirect:”