深入总结 Spring MVC

来源:互联网 发布:卖萌软件 编辑:程序博客网 时间:2024/05/21 21:24

1. 前言

大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了。Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀。

官方的下载网址是:http://www.springsource.org/download (本文使用是的Spring 3.0.5版本)

Struts2也是比较优秀的MVC构架,优点非常多比如良好的结构。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降。Struts2的多层拦截器、多实例action性能都很好。

Spring3 MVC的优点:

1、Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。

2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)

3、Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。

2. 核心类与接口

先来了解一下,几个重要的接口与类。现在不知道他们是干什么的没关系,先混个脸熟,为以后认识他们打个基础。

  • DispatcherServlet – 前置控制器
  • HandlerMapping接口 – 处理请求的映射
  • SimpleUrlHandlerMapping 通过配置文件,把一个URL映射到Controller
  • DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上
  • HandlerAdapter接口 – 处理请求的映射
  • Controller接口 – 控制器
  • Controller接口 – 控制器
  • HandlerInterceptor 接口–拦截器
  • ViewResolver接口的实现类
  • ModelAndView类
  • HandlerExceptionResolver接口 –异常处理

3. 核心流程图

这里写图片描述

具体执行步骤如下:
1、 首先用户发送请求————>前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;图2-1中的1、2步骤;
2、 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);图2-1中的3、4、5步骤;
3、 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;图2-1中的步骤6、7;
4、 前端控制器再次收回控制权,将响应返回给用户,图2-1中的步骤8;至此整个结束。

5.DispatcherServlet说明

使用Spring MVC,配置DispatcherServlet是第一步。

DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet。

DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。

“某某规则”:是根据你使用了哪个HandlerMapping接口的实现类的不同而不同。

web.xml

<servlet>  <servlet-name>springMVC</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <init-param>      <param-name>contextConfigLocation</param-name>      <param-value>classpath*:/springMVC.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>  

指明了配置文件的文件名,不使用默认配置文件名,而使用springMVC.xml配置文件。

其中**.xml 这里可以使用多种写法
1、不写,使用默认值:/WEB-INF/-servlet.xml
2、/WEB-INF/classes/springMVC.xml
3、classpath*:springMVC-mvc.xml
4、多个值用逗号分隔

6.springMVC-mvc.xml 配置文件片段讲解

7.处理ajax请求

1、引入下面两个jar包,我用的是1.7.2,好像1.4.2版本以上都可以,下载地址: http://wiki.fasterxml.com/JacksonDownload

jackson-core-asl-1.7.2.jar

jackson-mapper-asl-1.7.2.jar

2、spring的配置文件中要有这一行,才能使用到spring内置支持的json转换。如果你手工把POJO转成json就可以不须要使用spring内置支持的json转换。

3、使用@ResponseBody注解

@RequestMapping("/ajax")  @ResponseBody  public Object ajax(HttpServletRequest request){  List<String> list=new ArrayList<String>();  list.add("电视");  nbsp;       list.add("洗衣机");  list.add("冰箱");  list.add("电脑");  list.add("汽车");  list.add("空调");  list.add("自行车");  list.add("饮水机");  list.add("热水器");  return list;  }  

8. 转发与重定向

可以通过redirect/forward:url方式转到另一个Action进行连续的处理。

可以通过redirect:url 防止表单重复提交 。

写法如下:

return "forward:/order/add";return "redirect:/index.jsp";
0 0