1、SpringMVC简介
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
2、SpringMVC的核心
SpringMVC的核心是 DispatcherServlet 。正如它的名字一样,它是一个Servlet,它的顶层实现了Servlet接口。DispatcherServlet 在SpringMVC框架中起着至关重要的作用:
- 接收请求,转发给相应的组件处理,相当于转发器
- 响应结果
DispatcherServlet 在SpringMVC 中扮演了中央处理器的角色,负责根据用户的请求调用相关组件进行处理,有了DispatcherServlet 就减少了其它组件之间的耦合度。
顺便记录一下它的配置:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 如果不设置init-param标签,则必须在/WEB-INF/下创建xxx-servlet.xml文件,其中xxx是servlet-name中配置的名称。 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
配置 DispatcherServlet 之前必须配置 ContextLoaderListener 监听器。它的作用是在启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。
3、SpringMVC的组件
- DispatcherServlet: 前端控制器,是SpringMVC框架的核心组件,负责接收用户发来的请求,并且调用相应的组件处理并响应结果,可降低组件之间的耦合性,提高每个组件的扩展性。
- HandlerMapping: 处理器映射器,负责根据前端的请求路径查找与之对应的Handler(即Controller),映射方式有注解映射、配置文件映射和接口映射。
- HandlerAdapter: 处理器适配器,负责适配执行Handler(适配器模式)
- Handler: 处理器,即处理请求的业务逻辑,就是我们平常所编写的 Controller
- ViewResolver: 视图解析器,把返回的逻辑视图解析成真正的视图
- View: 即视图页面,由开发人员编写,不限于JSP(FreeMarker等)
4、SpringMVC的工作流程
该图片摘选自 https://blog.csdn.net/wdehxiang/article/details/77619512
- 用户发送请求,由 DispatcherServlet 接收。
- DispatcherServlet 收到请求调用 HanlderMapping 查询与请求相对应的处理器。
- HanlderMapping 查询到结果返回 HandlerExecutionChain,其中包含 HandlerIntercepter 处理器拦截器和响应的Handler对象。
- DispatcherServlet 获取到 Handler 调用HandlerAdapter 去执行Handler。
- HandlerAdapter 调用执行对应的Handler对象。
- Handler 处理器处理完毕后返回一个 ModelAndView 。
- HandlerAdapter 将处理结果返回给 DispatcherServlet。
- DispatcherServlet 调用 ViewResolver 视图解析器进行视图解析。
- ViewResolver 解析完毕返回一个 View 视图。
- DispatcherServlet 渲染视图,并将model数据转化为Response响应。
- DispatcherServlet 响应用户
5、SpringMVC 与 Struts2 的区别
-
SpringMVC 的入口是一个servlet即前端控制器(DispaterchServlet),而Struts2 入口是一个filter过滤器(StrutsPrepareAndExecuteFilter)。
-
SpringMVC 是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
-
Struts2采用值栈存储请求和响应的数据,通过OGNL存取数据,SpringMVC 通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。