Spring MVC学习笔记

Spring思维导图,让Spring不再难懂(mvc篇)

 

Spring MVC 教程目录:

第一章 Web MVC简介

  1)经典的MVC架构

    

    存在的问题:1、控制器负责流程控制、请求数据整理与校验、模型与视图选择等功能,过于复杂。2、模型层没有进行分层设计

  2)改进的MVC设计

    a、控制器功能拆分:Front Controller + Application Controller + Page Controller + Context

    

    前端控制器:表现层提供统一访问点,主要负责流程控制

    应用控制器:负责选择具体的页面控制器(处理器)和具体的视图

    页面控制器:功能处理代码,收集参数、封装参数到模型,转调业务对象处理模型,返回逻辑视图名交给前端控制器(和具体的视图技术解耦)

    b、模型(JavaBean)采用三层架构

    

    

第二章 Spring MVC入门

  Spring MVC 框架图

  

  1)设计原则:约定大于配置(惯例优先原则)的契约式编程

  2)DispatcherServlet -> 前端控件器, HandlerMapping与ViewResolver -> 应用控制器, Handler -> 页面控制器

  2)web.xml 用于配置过滤条件、DispatcherServlet

  3)用于设置DispatcherServlet上下文bean的配置文件默认路径:WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml

第三章 DispatcherServlet详解

  1)DispatcherServlet相关属性可在web.xml中配置,如配置文件路径

  2)DispatcherServlet的默认配置在DispatcherServlet.properties(和DispatcherServlet类在一个包下)中

第四章 Controller接口控制器详解

  Controller接口类图,其中,Spring 4 不支持BaseCommandController

  

  1、 4.1 ~ 4.4

    继承自Controller接口的实现类AbstractController,可实现:

    1)请求类型限定,如post

    2)session校验

    3)缓存控制,如强缓存、协商缓存

  2、 4.5 ~ 4.10

  3、 4.11 ~ 4.14

    无功能处理,直接映射到视图的Controller接口的实现类:

    1、ParameterizableViewController  指定某一视图名

    2、UrlFilenameViewController  采用Ant-style 模式进行匹配,通过url生成视图名

  4、 4.15

    一个Controller能够映射多个功能处理方法的实现类:MultiActionController,两种使用方式:

    1)继承MultiActionController

    2)直接实例化MultiActionController, 定义并注入delegate

  5、 4.16 数据类型转换和数据验证

    a、 4.16.1 数据类型转换

      PropertyEditor被限制为只能String<——>Object之间转换,不能Object<——>Object,包括两类

      1)Spring内建的PropertyEditor

      2)用户自定义,需继承PropertyEditorSupport ,用户自定义PropertyEditor有三类注册方式:

        a、WebDataBinder:针对单个控制器,暂无使用方式

        b、WebBindingInitializer:批量注册,MultiActionController中存在setter方法,可通过bean注入

        c、使用约定自动全局注册:自定义的PropertyEditor放在和模型类同包下,且Editor命名规则必须是“模型类名Editor”

    b、 4.16.2 数据类型验证

第五章 处理器拦截器简介

  接口为HandlerInterceptor,一个实现类为HandlerInterceptorAdapter,继承该类允许我们只实现需要的回调方法

  1、拦截器本质也是AOP(面向切面编程),有三个切入点:preHandle(处理前),postHandle(处理后、渲染前)、afterCompletion(渲染后)

  2、自定义拦截器的步骤:

    a、从HandlerInterceptorAdapter继承,自定义拦截器

    b、配置文件中,定义拦截器bean

    c、注入到HandlerMapping bean中

  3、推荐能使用servlet规范中的过滤器Filter实现的功能就用Filter实现,因为HandlerInteceptor只有在Spring Web MVC环境下才能使用,因此Filter是最通用的、最先应该使用的。如登录这种拦截器最好使用Filter来实现 (未尝试,待实践)

第六章 注解式控制器详解

  1、 6.1 ~ 6.4 

    1)注解式控制器开发步骤(相对于非注解)

      a、HandlerMapping 与HandlerAdapter 分别配置为RequestMappingHandlerMapping、RequestMappingHandlerAdapter(或者添加配置:<mvc:annotation-driven />,详见:<mvc:annotation-driven/>的作用

      b、定义Controller类,添加注解@Controller

      c、实例化为bean(xml中显示配置为bean,或添加配置:<context:component-scan />)

    2)注解式Controller类为POJO类

      a、类上添加注解@Controller,与@Service、@Repository对应常见的三层开发架构组件

      b、@RequestMapping定义到方法上为提供映射规则,定义在Controller类则为窄化请求映射

    3)注解式返回数据(如json、xml),而非页面

      a、@ResponseBody  作用于控制器的某一方法,参见:@responseBody注解的使用

      b、@RestController   作用于控制器,参见:@Controller和@RestController的区别

      c、在pom文件中须添加两个依赖,用于json类型转换      

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.4.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.3</version>
</dependency>

      d、json转换默认采用ISO-8859-1编码,对于中文会出现乱码,解决方法:Spring Mvc @ResponseBody String返回中文字符串乱码

      e、对tomcat跨域请求,通过filter添加跨域头部,参见:  tomcat 添加CROS跨源请求

  2、 6.5 请求映射

    依据http协议结构中的可变部分,可以将映射规则分为四类:

    1)URL路径映射

    2)请求方法映射限定

    3)请求参数映射限定

    4)请求头映射限定

  3、 6.6 参数绑定

    

    参数绑定的两种方式:自动绑定与注解绑定

    a、 6.6.1 功能处理方法支持的参数类型

      讲解了调用功能处理方法时,spring mvc默认自动绑定的参数类型

    b、 6.6.2 ~ 6.6.8

      讲解了调用功能处理方法时,通过注解的方式,从url、cookie等绑定方法参数

      1)@RequestParam  绑定单个请求参数值

      2)@PathVariable   绑定URI模板变量值

      3)@CookieValue   绑定Cookie数据值

      4)@RequestHeader  绑定请求头数据

      5)@ModelAttribute  绑定请求参数到命令对象

      6)@SessionAttributes  绑定命令对象到session

      7)@Value  绑定SpEL表示式

  4、 生产者、消费者限定

    a、MIME类型的格式:type/subtype(;parameter)

    b、控制器的功能处理方法中,通过HttpServletRequest、HttpServletResponse对htpp请求和响应进行操控

    c、在java代码中进行http请求发送与响应解析功能,可通过ClientHttpRequest、ClientHttpResponse实现

    d、从请求头中Accept、Content-Type与响应头中Content-Type的解析关系,抽象出了消息的生产者与消费者模型

      1)可使用@RequestMapping属性值headers,限定请求的过滤和响应

      2)@RequestMapping单独提供了consumes、produces两个属性,对应生产者与消费者,其中consumes对请求的Content-Type进行过滤,表示处理方法能处理的请求类型,produces对请求的Accept进行过滤,表示处理方法能生产的响应类型

    e、@RequestMapping的窄化处理,只有生产者/消费者 模式 是 覆盖(功能方法的限制覆盖类的限制),其他是继承

  5、静态文件的访问

    a、‘webapp’ 是站点的根目录,tomcat默认禁止对目录 'WEB-INFO'  及非 jsp文件的访问

    b、开放对静态访问的方法有多种,常用的方式是使用默认servlet:default,详细可参考 web.xml中出现default是什么意思?

第七章 注解式控制器的数据验证、类型转换及格式化

  1、 7.1 ~ 7.2 

    a)类型转换有两个技术框架:PropertyEditor、Converter

      1)PropertyEditor只提供String<-->Object之间的转换,Spring默认使用该方式,内置的类型转换无需要额外注册

      2)Converter提供任何类型之间的转换,需注册才能生效

      3)PropertyEditor、Converter同时存在时,优先PropertyEditor,如无法转换则使用Converter

    b)本节提供了注解式控制器下,注册自定义PropertyEditor的方法

  2、 7.3

  3、 7.4

 第八章 使用Spring MVC统一异常处理实战

  Spring MVC处理异常有3种方式: 
  (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver; 
  (2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器; 
  (3)使用@ExceptionHandler注解实现异常处理;

  多种方式的并存会增大维护的成本,因此异常处理方式选择其中一种,再配合web.xml中的<error-page>即可

  异常处理与<error-page>配合关系,参见 spring 思维导图

  关于异常处理的补充:

  Spring MVC异常处理详解

  springmvc处理异常的4种方式

第九章 Spring定时任务的几种实现

  定时任务有三种方式:

  1、java.util.Timer  只支持固定频度的定时任务,很少使用

  2、使用Quartz  

    a、作业类继承自特定的基类  该方式已从spring 4.0开始不支持

    b、作业类不继承特定基类  spring 4.0之后依然支持,但CronTriggerBean、CronTriggerBean须替换成SimpleTriggerFactoryBean、CronTriggerFactoryBean,使用方式相同

  3、Spring Task  支持配置及注解两种方式

  项目一般使用spring task方式,详细配置及cron表达式详解可参考:spring定时任务详解(@Scheduled注解)

  

教程原地址

 

posted @ 2017-04-10 18:16  Matt_Cheng  阅读(308)  评论(0编辑  收藏  举报