zoukankan      html  css  js  c++  java
  • 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注解)

      

    教程原地址

  • 相关阅读:
    微软经典项目实例
    Extjs在vs中使用及弹出对话框的介绍
    微软企业库5.0学习笔记(七)
    微软企业库5.0学习笔记(八)
    微软企业库5.0学习笔记(十)
    .NET 4 并行(多核)编程系列之五
    NET 应用架构指导 V2[12]
    .NET 4 并行(多核)编程系列之四
    .NET 4 并行(多核)编程系列之三
    微软企业库5.0学习笔记(十二)
  • 原文地址:https://www.cnblogs.com/MattCheng/p/6690266.html
Copyright © 2011-2022 走看看