SpringMvc总结

1.SpringMVC介绍

  SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC的架构模式思想,为简化日常开发,提供了很大便利

2.SpringMvc架构

  SpringMvc总结

 

 

   架构流程

    1.用户发送请求到前端控制器DispatcherServlet

    2.DispatcherServlet收到请求掉用HandlerMapping处理器映射器。

    3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

    4.DispatcherServlet通过HandlerAdapter处理器适配器掉用处理器。

    5.执行处理器(Controller也叫后端控制器)

    6.Controller执行完成返回ModelAndView

    7.HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

    8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器

    9.ViewReslover解析后返回具体的View

    10.DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)

    11.DispatcherServlet响应用户

  组件说明:

    DispatcherServlet前端控制器

      用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请                     求,dispatcherServlet的存在降低了组件之间的耦合性。

      DispathcerServlet作为springmvc的*调度器存在,DispatcherServlet创建时会默认从DispatcherServlet.properties文件加载                          springmvc所用的各各组件,如果在springmvc.xml中配置了组件则以springmvc.xml中配置的为准,DispatcherServlet的存在降低了                            springmvc各各组件之间的耦合度    

    HandlerMapping处理器映射器

      HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方                     式,实现接口方式,注解方式等。

      HandlerMapping 负责根据request请求找到对应的Handler处理器及Interceptor拦截器,将它们封装在HandlerExecutionChain 对象中                  给前端控制器返回。

      BeanNameUrlHandlerMapping:BeanNameUrl处理器映射器,根据请求的url与spring容器中定义的bean的name进行匹配,从而从                      spring容器中找到bean实例。

      SimpleUrlHandlerMapping:simpleUrlHandlerMapping是BeanNameUrlHandlerMapping的增强版本,它可以将url和处理器bean的id                    进行统一映射配置。

    Handler处理器

      Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。

              由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。

    HandlerAdapter处理器设配器

      通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

      HandlerAdapter会根据适配器接口对后端控制器进行包装(适配),包装后即可对处理器进行执行,通过扩展处理器适配器可以执行                    多种类型的处理器,这里使用了适配器设计模式。

       SimpleControllerHandlerAdapter:SimpleControllerHandlerAdapter简单控制器处理器适配器,所有实现了                                   org.springframework.web.servlet.mvc.Controller接口的Bean通过此适配器进行适配、执行。  

       HttpRequestHandlerAdapter:HttpRequestHandlerAdapter,http请求处理器适配器,所有实现了                                                                org.springframework.web.HttpRequestHandler接口的Bean通过此适配器进行适配、执行。                        

     

    View Resolver视图解析器

      View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View                   视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、                           freemarkerView、pdfView等。

    注解映射器和适配器

    RequestMappingHandlerMapping

      注解式处理器映射器,对类中标记@ResquestMapping的方法进行映射,根据ResquestMapping定义的url匹配ResquestMapping标记                的方法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装url对应的方法Method。

              从spring3.1版本开始,废除了DefaultAnnotationHandlerMapping的使用,推荐使用RequestMappingHandlerMapping完成注解式处理器映                射。

    @RequestMapping定义请求url到处理器功能方法的映射。

    RequestMappingHandlerAdapter

      注解式处理器适配器,对标记@ResquestMapping的方法进行适配。

     从spring3.1版本开始,废除了AnnotationMethodHandlerAdapter的使用,推荐使用RequestMappingHandlerAdapter完成注解式处理器适                  配。

    <mvc:annotation-driven>

      springmvc使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在                       springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。

3.springmvc处理流程源码分析

  1.用户发送请求到DispatcherServlet前端控制器

  2.DispatcherServlet掉用HandlerMapping(处理器映射器)根据url查找Handler

  SpringMvc总结

 

   SpringMvc总结

 

   3.DispatcherServlet掉用HandlerAdapter(处理器适配器)对HandlerMapping找到Handler进行包装、执行。HandlerAdapter执行Handler完成          后,返回了一个ModleAndView(Springmvc封装对象)。

    DispatherServlet找一个合适的适配器

     SpringMvc总结

    适配器执行Hanlder

      SpringMvc总结

 

   4.DispatherServlet拿着ModelAndView掉用ViewResolver(视图解析器)进行视图解析,解析完成后返回一个view(很多不同视图类型的                view)

      SpringMvc总结

 

    视图解析

    SpringMvc总结

 

   5.DispatherServlet进行视图渲染,将Model中数据放到request域,在页面展示

    SpringMvc总结

   将model数据放在request域:

    SpringMvc总结

 

 4.SpringMVC常用的注解

     1.RequestMapping

      URL路径映射,通过RequestMapping注解可以定义不同的处理器映射器规则,属性value的值是数组,可以将多个url映射到同一个方                  法。属性method可以限定请求方法,将该注解写到controller类上可以窄化请求映射。

   2.@ModelAttribute和@SessionAttributes    

      该控制器的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用                  在BaseController当中,所有的控制器继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。                   

           @ SessionAttributes 即将值放到session作用域中,写在类上面。

   3.@PathVariable       

      用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出URI模板中的变量作为参数。

    4.@ReauestParam

      主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”),它有三个常用参数:defaultValue =“0”,                required = false,value =“isApp”; defaultValue表示设置默认值,required铜过布尔设置是否是必须要传入的参数,值值表示接受的传入的                 参数类型。

   5.@ResquestBody

      该注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到内容转换为json、xml等格式的数              据并绑定到controller方法的参数上。

   6.@ResponseBody

      该注解用户将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json,xml等通过Response响             应的客户端。

      使用该注解需要在xml配置文件中配置json转换器。

       --注解适配器 -->

          <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">

             <property name="messageConverters">

               <list>

                 <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>

               </list>

             </property>

         </bean>

    如果使用<mvc:annotation-driven/>则不用定义上边的内容。

5.Springmvc参数绑定

  默认支持的参数绑定

    处理器适配器在执行Handler之前需要把http请求的key/value数据绑定到Handler方法形参数上。

    HttpServletRequest:通过request获取对象请求信息。

    HttpServletResponse:通过response处理响应信息。

    HttpSession:通过session对象得到session中存放的对象。

    Model/ModelMap:ModelMap是Model接口的实现类,通过Model或ModelMap向页面传递数据。

  Post时中文乱码

    <filter>

      <filter-name>CharacterEncodingFilter</filter-name>

      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

      <init-param>

        <param-name>encoding</param-name>

        <param-value>utf-8</param-value>

      </init-param>

    </filter>

    <filter-mapping>

      <filter-name>CharacterEncodingFilter</filter-name>

      <url-pattern>/*</url-pattern>

    </filter-mapping>

6.SpringMVC数据回显

    简单类型

      对于简单数据类型使用Model将出入的参数在放到request域中实现显示。

    pojo类型

      SpringMvc默认支持pojo数据回显,springmvc自动将形参中的pojo重新放回request域中,request的key为pojo的类名(首字母小写),相当于调用model.addAttribute方                     法。如果key不是pojo的类名(首字母小写),可以使用@ModelAttribute完成数据回显。

7.异常处理器

  springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理器。

  异常处理器思路

    系统中异常包括两类:预期异常和运行时异常RuntimeException,前端通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发          生。系统的dao、service、controller、出现通过Throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理。

    1.自定义异常类

      SpringMvc总结

 

     2.自定义异常处理器

      SpringMvc总结

 

     3.错误页面

      SpringMvc总结

 

     4.异常处理器配置

      SpringMvc总结

 

 8.Springmvc中文件上传

  1.配置虚拟目录

    在tomcat上配置图片虚拟目录,在tomcat下conf/server.xml中添加:<Context docBase="F:\develop\upload\temp" path="/pic" reloadable="false"/>

    http://localhost:8080/pic即可访问F:\develop\upload\temp下的图片。

  2.配置解析器

     SpringMvc总结

 

     

  3.controller

    SpringMvc总结

 

   4.页面

    form添加enctype="multipart/form-data":

       SpringMvc总结

 

      file的name与controller形参一致

      SpringMvc总结

 

 9.RESTful支持

    添加DispatcherServlet的rest配置

        SpringMvc总结

10.静态资源访问

    如果在DispatcherServlet中设置url-pattern为/则必须对静态资源进行访问处理。springmvc的<mvc:resources mapping="" location="">实现对静态资源进行映射访问。

11.拦截器 

       定义:springmvc中的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

    定义拦截器:实现HandlerInterceptor接口

      SpringMvc总结

 

     拦截器配置

      针对某种mapping配置拦截器

      SpringMvc总结

 

       针对所有mapping配置全局拦截器

      SpringMvc总结

 

 

   

    

              

  

上一篇:DispatcherServlet、HandlerMapping、HandlerExectionChain


下一篇:SpringMVC的执行流程