Spring容器是Spring MVC的父容器;
Spring应用的IOC容器通过tomcat的Servlet或Listener监听启动加载;
Spring MVC的容器由DispatcherServlet作为入口。
过程原理
- DispatcherServlet(前端控制器) 把请求分发到HandlerMapping (default: BeanNameUrlHandlerMapping)
- HandlerMapping匹配url请求的Handler Controller /
Interceptor(拦截器)
(根据xml / 注解) - 返回给DispatcherServlet
- DispatcherServlet处理适配器执行Handler
- 处理器适配器执行完成后,Controller返回ModelAndView
- DispatcherServlet请求视图解析器, 解析后向DispatcherServlet返回View
- DispatcherServlet进行视图渲染,向用户响应结果
分工职责
-
前置控制器DispatcherServlet
作用:接收请求 返回结果 -
映射处理器 HandlerMapping
作用:根据请求映射为HandlerExecutionChain对象,查找对应的Handler -
处理器适配 HandlerAdapter
作用:调用处理器相对应的处理方法,返回ViewAndModel - 视图解析器 ViewResolver
- 视图的渲染 View
SpringMVC的优点?
- 方便解耦,简化开发,职责鲜明,分工明确
- AOP的很好支持,方便面向切面编程
- 对主流的框架提供了很好的集成支持
- Spring属于低侵入,代码污染极低
SpringMVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?
是单例模式,所以在多线程访问的时候有线程安全问题
,不要用同步,会影响性能,解决方案是在控制器里面不能写字段
。
SpringMVC怎样设定重定向和转发 ?
在返回值的前面加”forword”,就可以实现让结果转发;
在返回值的前面加上”redirect”,就可以让返回值重定向。
网友评论