SpringMVC学习笔记

1.简介

1.简介

        SpringMVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用Spring可插入的 MVC架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。

2.特性

a.Spring MVC分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。

b.易于同其它View框架(Tiles等)无缝集成,采用IOC便于测试。


2.功能

1.Spring MVC中提供了一个Dispatcher Servlet,无需额外开发。
2.Spring MVC中使用基于XML的配置文件,可以编辑,而无需重新编译应用程序。
3.Spring MVC实例化控制器,并根据用户输入来构造bean。
4.Spring MVC可以自动绑定用户输入,并正确地转换数据类型。例如,Spring MVC能自动解析字符串,并设置float或decimal类型的属性。
5.Spring MVC可以校验用户输入,若校验不通过,则重定向回输入表单。输入校验是可选的,支持编程方式以及声明。关于这一点,Spring MVC内置了常见的校验器。
6.Spring MVC是Spring框架的一部分。可以利用Spring提供的其它能力。
7.Spring MVC支持国际化和本地化。支持根据用户区域显示多国语言。
8.Spring MVC支持多种视图技术。最常见的JSP技术以及其它技术包括Velocity和FreeMarker。

3.与Struts2的对比

        在之前的SSH框架中,MVC框架选用的是Struts2,而随着框架的发展,如今MVC框架主键被Spring MVC占据主流。那么Spring MVC和Struts2有何区别呢?如下进行比较。
1.Spring MVC和Struts2的加载机制不同:Spring MVC的入口是DispatchServlet,而Struts2的入口是StrutsPrepareAndExecuteFilter。

2.性能上不同:Struts2基于类的设计,是类级别的拦截,每次发一次请求都会实例一个action,即在Struts2中,一个Action对象对应一个request上下文。Spring MVC是基于方法的设计,粒度更细,是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在Spring MVC中,一个方法对应一个request上下文。总的来说,Spring MVC性能稍微优于Struts2.

3.参数传递不同:struts2在接受参数的时候,可以用成员属性来接受参数,这就说明参数是让多个方法共享的,即其类属性供所有方法共享;Spring MVC的方法之间基本上是独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量。

4.框架集成:Spring MVC和Spring是无缝集成的,无须数据格式转换,直接访问来自数据源数据格式,利于项目管理,因此Spring MVC在项目的管理和安全上比Struts2高。

5.数据验证:Spring MVC验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐。

6.Ajax交互:Spring MVC处理ajax的请求十分方便,只需一个注解@ResponseBody,然后直接返回响应文本即可;Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来相对不方便。

7.拦截机制的实现:Spring MVC使用的是独立的AOP实现,而Struts2有自己的interceptor机制,这样导致了struts2的配置文件量比Spring MVC大。


4.运行原理

        如下图所示,展示了Spring MVC从接受请求到响应请求整个完整的流程
                       SpringMVC学习笔记
        接下来通过将上图转化为下图,使得整个流程更加具体直观。
                  SpringMVC学习笔记
        观察上图可知,Spring MVC的流程可以概括如下:
1.客户端请求提交到DispatcherServlet
2.DispatcherServlet控制器查询一个或者多个HandlerMapping,找到处理该请求的Controller
3.DispatcherServlet将请求提交给Controller
4.Controller调用业务逻辑进行处理,返回ModelAndView
5.DispatcherServlet查询一个或者多个ViewResoler视图解析器,找到ModelAndView指定的视图
6.视图负责将结果显示在客户端

        从上面的流程内容可以看出,DispatcherServlet是整个Spring MVC完整运行的核心,它需要查询HandlerMapping,找到相应的Controller,找到后还需要将请求提交给Controller,同时待请求处理完之后,还是需要DispatcherServlet查询视图解析器,找到相应的视图。因此整个流程下来DispatcherServlet起着中心调控的作用,控制着整个Spring MVC框架的运行,负责接收HTTP请求组织协调Spring MVC的各个组成部分,其主要工作可概括如下:
1.截获符合特定格式的URL的请求。
2。初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久层的WebApplicationContext建立关联。
3.初始化Spring MVC的各个组成组件,并装配到DispacherServlet中。