SpringMVC以DispatcherServlet为核心,负责协调和组织不同组件以完成请求处理并返回响应的工作,实现了MVC模式。
什么是SpringMVC
SpringMVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model、View、Controller分离,将Web层进行职责解耦,把复杂的Web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
SpringMVC运行流程及九大组件
SpringMVC的运行流程
- 用户发送请求至前端控制器DispatcherServlet
- DispatcherServlet收到请求调用HandlerMapping处理器映射器
- 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
- DispatcherServlet通过HandlerAdapter处理器适配器调用处理器执行处理器(Controller,也叫后端控制器)
- Controller执行完成返回ModelAndView
- HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器
- ViewReslover解析后返回具体View
- DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
- DispatcherServlet响应用户。
从上面可以看出,DispatcherServlet有接收请求,响应结果,转发等作用。有了DispatcherServlet之后,可以减少组件之间的耦合度
SpringMVC的优点
- 可以支持各种视图技术,而不仅仅局限于JSP
- 与Spring框架集成(如IoC容器、AOP等)
- 清晰的角色分配:前端控制器(DispatcherServlet),请求到处理器映射(HandlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)。
SpringMVC的主要组件
- 前端控制器DispatcherServlet(不需要程序员开发) 作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet就减少了其它组件之间的耦合度。
- 处理器映射器HandlerMapping(不需要程序员开发) 作用:根据请求的URL来查找Handler
- 处理器适配器HandlerAdapter 注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
- 处理器Handler(需要程序员开发)
- 视图解析器ViewResolver(不需要程序员开发) 作用:进行视图的解析,根据视图逻辑名解析成真正的视图(Vew)
- 视图View(需要程序员开发JSP) View是一个接口, 它的实现类支持不同的视图类型(JSP,Freemarker,PDF等等)
SpringMVC和Struts2的区别有哪些
- SpringMVC的入口是一个Servlet即前端控制器(DispatchServlet),而Struts2入口是一个Filter过虑器(StrutsPrepareAndExecuteFilter)。
- SpringMVC是基于方法开发(一个url对应一个方法),请求参数传递到方法地形参,可以设计为单例或多例(建议单例),Struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
- Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,SpringMVC通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。JSP视图解析器默认使用JSTL。