目录

  • SpringMVC的简介
  • 开发步骤
  • 快速入门
  • SpringMVC的组件解析
  • 执行流程
  • 注解解析
  • XML配置解析
  • 知识小结
  • SpringMVC的数据响应、
  • 数据响应的方式
  • 页面跳转
  • 需要什么对象,就添加什么对象到形参
  • 回写数据
  • 回写一般字符串数据
  • 回写json格式的字符串
  • 回写对象集合
  • 小结
  • SpringMVC获取请求数据
  • 获取请求参数
  • 获得基本类型的数据
  • 获得POJO类型的数据
  • 获取数组类型的数据
  • 获取集合类型的数据
  • 请求数据的乱码问题
  • 参数绑定注解
  • 获得Restful风格的参数
  • 自定义类型转换器
  • 获取请求头数据
  • 文件上传
  • SpringMVC拦截器
  • 快速入门
  • 知识小结
  • 拦截器登录权限控制小案例
  • SpringMVC异常处理机制
  • 简单异常处理器
  • 自定义异常处理器
  • 小结

开始

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC

一、SpringMVC的简介

轻量级 基于 MVC 开发模式 的 Web框架

有一套轻量完善的注解配置机制

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_02

之前web层有很多Servlet,每个Servlet基本都需要

  • 接受使用参数、
  • 封装实体、
  • 指派视图

框架可以帮我们 将 一些 共同的操作 抽取出来,框架进行封装

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_03

对于特有功能的Servlet,只需要一个POJOBean(控制器Controller)来完成 相应功能

1.1开发步骤

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_04

  • 导坐标
  • 配置 前端控制器Servlet,也就是DispathcerServlet核心控制器
  • 编写 POJO(Controller)
  • 将Controller配置到Spring容器中(使用注解@Component或者衍生注解@Controller ,或者使用xml配置)
  • 配置组件扫描(可以在applicationContext.xml中组件扫描,一般在spring-mvc.xml中配置web层的扫描器)
  • 执行测试

1.2快速入门

导包

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_05

配置web.xml,设置前端控制器的虚拟目录,/ 就是代表所有的资源 都需要经过 前端控制器

这里后面会出现一些静态资源js,css等被拦截的问题,需要配置放行

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_06

配置跳转的view页面

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_07

配置 组件扫描,因为 在 UserController中使用注解 将 Bean 放到了Spring中

而且 访问的 资源的 和 方法 的映射,也是使用注解来配置的

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_08

web.xml,类似配置全局参数加载applicationContext.xml 配置文件那样 加载 spring-mvc.xml文件

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_09


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_10

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_11

二、SpringMVC的组件解析

2.1SpringMVC的执行流程

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_12

核心 前端控制器DispatcherServlet 完成的主要任务 是 调度 完成相应功能的 组件

  • HandlerMapping:处理映射器,目标Controller之前可能会有很多拦截器,返回执行的很多资源的顺序
  • HandlerAdaptor处理器适配器:调度需要执行的资源,也就是自己写的POJO,最后返回给DispatcherServlet 核心控制器Model and View
  • Handler:处理器,可认为自己写的POJO对象,执行完返回 Model and View
  • ViewResolver:视图解析器:从Model and View 将视图解析出来

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_13


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_14

2.2SpringMVC注解解析

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_15


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_16


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_17


因为 自定义UserController 上 加 @Controller 表示 将 Bean 放到 Spring中,需要在 spring-mvc.xml中进行组件扫描

和 applicationContext.xml 中的 组件扫描 各司其职,分管不同的层下的Bean

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_18

2.3SpringMVC的XML配置解析

可以在Spring-mvc.xml中配置 组件扫描

还可以配置 指定一些组件,像处理器适配器,处理器,映射器等,可修改缺省时候默认的组件

可以对 某些 组件 内部功能指定增强

在SpringMVC的包下,有DispatcherServlet核心控制器 组件 的配置文件

配置文件中,缺省情况下对 相关 组件 默认配置

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_19

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_20

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_21


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_22

我们 可以 重写 配置,在spring-mvc.xml配置文件中 进行 增强组件功能 配置

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_23

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_24


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_25


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_26

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_27

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_28


改用web.xml 的 Servlet-Mapping 来映射 资源

  • 发现报错

26-Nov-2020 10:33:13.701 警告 [http-nio-8080-exec-3] org.springframework.web.servlet.DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI [/demo] in DispatcherServlet with name 'DispatcherServlet'

原因是 因为 SpringMVC的拦截器功能太过强大,把我们访问的.jsp文件拦截,导致404,我们需要配置放行

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

<!--    全局初始化参数,加载applicationContext.xml文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:java/applicationContext.xml</param-value>
    </context-param>

    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--        加载配置文件spring-mvc.xml-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:java/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

<!--    映射资源-->
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
<!--    拦截器放行的资源-->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/.jsp</url-pattern>
    </servlet-mapping>
</web-app>

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_29

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_30


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_31

2.4知识小结

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_32

三、SpringMVC的数据响应、

3.1 数据响应的方式

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_33

页面跳转

  • 直接返回字符串:return "success.jsp"
  • 返回Model and View ,简单理解就是一个封装,需要 对 Model and View 再解析为 View

回写数据

  • 直接返回字符串:reponse.getWritter().print();
  • 返回对象或集合:Ajax访问服务器,返回json格式的字符串,通过json的转换工具,然后在response.getWriter().print()进行回写SpringMVC集成之后,只需要 在方法上 返回 对象的集合就行,然后帮助我们转换成串,直接回写

3.2页面跳转

  1. 直接返回字符串的形式,只写view的字符串形式即可,然后视图跳转字符串指定资源
  2. Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_34

  3. 返回ModelAndView
  4. Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_35

  5. 其中setViewName()设置 展示 的 view,即 访问 index.jsp
  6. Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_36


  7. Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_37

  8. 方法形参注入思想,当方法 形参包含 ModelAndView对象,Spring调用方法,传入实参,即创建实际的对象,自动注入ModelAndView 对象
  9. Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_38

  10. 也可以将ModelAndView拆开,单独返回View
  11. Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_39

3.3需要什么对象,就添加对象到方法的形参

靠着Spring来注入,如需要request对象(不常用)

和Model model 类似,Model 是 SpringMVC封装好的对象,而request对象是Tomcat服务器创建的原生对象

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_40

3.3回写数据

3.3.1回写一般的字符串到页面

通过之前的response对象回写

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_41


还可以 通过方法上加注解 区别事务跳转 来直接return “字符串”

  • @ResponseBody 告诉 SpringMVC框架,不进行视图跳转,直接进行数据响应,以HTTP响应体的方式回写

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_42

3.3.2回写json格式的字符串

将数据库查询的对象,转化为json格式,然后再回写,需要json转换工具

  • 导包

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_43

  • 创建使用ObjectMapper 对象 通过objectMapper.writeValueAsString(对象) 得到 json字符串,然后返回

上述 操作,不管是对象,对象集,都需要通过objectMapper来处理为json字符串,很繁琐

可以通过配置SpringMVC来 封装 转换过程,自动将对象、对象集转化为json字符串

3.3.3SpringMVC来返回对象集合

调用 Controller 中方法的是 处理器适配器RequestMappingHandlerAdapter,但是默认情况下是不能将对象转化为json格式,需要功能增强

因此需要我们在 配置适配器时,指定一个json的转换器,然后在处理器适配器调用方法的时候,完成转换,

就类似之前配置的 资源视图解析器,自动加上 后缀、前缀

  • 配置处理器映射器,spring-mvc.xml中对处理器适配器进行注入,功能增强
  • Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_44

    Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_45


  • Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_46

  • mvc注解驱动,底层默认集成jackson转换器
  • Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_47

  • 导命名空间mvc,配置注解驱动
  • Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_48

3.4小结

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_49

四、SpringMVC获取请求数据

4.1获取请求参数

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_50

SprigMVC接受客户端请求参数类型可以是:

  • 基本数据类型:字符串、数字等
  • POJO:简单JavaBean,将参数封装到Bean,在进行业务逻辑操作
  • 数组类型:例如复选框数据
  • 集合类型:和数组类似

4.2获得基本类型数据

客户端 提交基本类型数据 名称 和 SpringMVC 中的Controller中的形参名称相同,完成自动封装

类似request.getParamater(),将获得的请求数据和service、dao层进行交互

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_51

4.3获得POJO类型的数据

请求的数据是一个 对象 整体

之前是通过request.getParamaterMap()获取 请求数据封装的 Bean

底层很复杂,但是使用只需 形参设置User user,就可以直接拿到 请求参数 对应的实体Bean

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_52

4.3获取数组类型的数据

通过方法形参传入一个数组

对类似多选框的参数进行封装为一个数组

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_53

4.4获取集合数据类型的参数

4.4.1封装集合数据到VO对象的List<User>属性中

就是封装多个User对象数据,封装的对象需要放到List<User>集合中,但是List集合还要依赖于 某个对象(某个对象作为方法的形参)

List<User>作为对象的属性,每个请求的参数数据类型为User集合

相对数组类型的封装较复杂,需要 设置单独的JavaBean,

一般叫做VO对象(value Object值对象) 里面设置一个集合,获取的集合参数 需要 到POJO中的集合中

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_54


需要 将请求参数集合 封装到VO对象中的集合 中,即VO对象的 List<User> userList 成员变量

但是 List<User> userList 是一个 List,并且 List 的元素为 User 对象,就是

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_55

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_56


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_57


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_58

4.1.2直接接受json格式的集合数据类型

使用ajax请求数据

不用再封装到VO对象中,直接形参写成List<User> list

使用ajax发送请求数据,可以将数据的格式设置为json格式

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_59


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_60

开启静态资源访问权限

可能出现页面404错误

问题出现在 前端控制器DispatcherServlet 的 配置,默认的 <url-patten>/<url-patten>

访问的资源都要进行虚拟路径的匹配,都需要经过DIspatcherServlet 前端控制器

把 JQuery的请求也当成Controller 的请求,简单理解就是在SpringMVC框架中找JQuery文件,当然找不到

匹配失败,因此需要 在SpringMVC框架中 开放 某些静态资源 的访问权限

就是当在SpringMVC框架中 找不到 指定资源的时候,将寻找权交给 之前的容器 Tomcat容器 寻找静态资源

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_61

或者

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_62

对应的三次请求

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_63

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_64

4.5请求数据的乱码问题

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_65


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_66

之前我们解决的方法就是 request.setCharacterEnCoding()设置编码

对于get请求,Tomcat服务器解决

对于post请求,使用过滤器解决

现在设置一个 全局过滤器filter 进行编码的过滤

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_67

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_68

4.6参数绑定注解

请求的参数键名,需要和 Bean的属性名一致,不一致则SpringMVC无法通过 方法形参的方式 获取请求参数

  • 通过@requestParam注解 解决 请求参数名称 和 业务方法参数名称不一致时 的 参数获取问题

其他参数

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_69

4.6获得Restful风格的参数

一种风格

参数不是?= 值 的形式,而是作为URL的一部分传递

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_70


在方法的形参中,可以设置 占位符 匹配URL中的参数,完成参数获取

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_71


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_72

4.7自定义类型转换器

SpringMVC内部具备一些内置的数据类型转换器,请求的参数都是字符串,SpringMVC可以把字符串数字 转化为 数字

但是这些内置的 不满足我们的需求,例如对日期 格式 的转换

使用步骤

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_73

场景

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_74

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_75


会报错,需求是封装自定义格式的数据

使用

  • 创建convert.DateConverter 实现 converter接口
  • spring-mvc.xml声明转换器
    声明 转换器服务工厂,让工厂产生我们定义的转换器Bean
  • 指定转换器工厂来产生 转换器Bean

4.8获取请求头数据

请求头也是键值的的形式,一般根据键获取值

  • @RequestHeader注解获取请求头参数

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_76


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_77


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_78

  • @CookieVale注解

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_79


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_80

4.9文件上传

web阶段文件上传客户端需要具备:

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_81

  • 文件上传项type=“file”
  • 表单提交为post
  • enctype属性是多表单形式

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_82

4.9.1文件上传原理

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_83

获取的数据 都在http请求体当中

SpringMVC内部封装的也是apach文件上传小组件,可以直接使用

4.9.2单文件上传
  • 导坐标
  • 配置文件上传解析器
  • 编写文件上传代码

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_84


在spring-mvc.xml文件中配置 文件上传解析器,由Spring提供的CommonsMultipartResolver对象

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_85


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_86


编写文件上传代码,SpringMVC 会将上传的文件 封装成一个对象

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_87


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_88

4.9.3多文件上传

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_89

表单准备对个参数即可,对应方法的参数也增加

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_90

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_91

五、SpringMVC拦截器

类似之前的 过滤器

简单理解 就是 访问资源目标方法的时候,做一些干预

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_92


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_93

5.1快速入门

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_94

controller.TargetController

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_95


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_96

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_97


然后在spring-mvc.xml配置

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_98


测试

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_99


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_100

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_101


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_102

5.2知识小结

拦截方法说明

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_103


自定义拦截器的步骤

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_104

5.3拦截器登录权限控制小案例

实现不登录情况下,不能操作,转到登录页面

在preHandel验证有没有登录,检查有无session中有无user

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_105


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_106


配置spring-mvc.xml

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_107


这里先简单实现 拦截 未登录 跳转到 登录页面的情况,因涉及案例环境,后续实现在补充…

六、SpringMVC异常处理机制

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_108


基本环境

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_spring_109


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_110


之前阶段 对异常的处理就是 在业务层try...catch...

有弊端,抓异常代码和业务耦合,不利于异常定位

我们可以把解决异常抽取出来,让某一个组件进行异常处理

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_web_111


异常处理器可以使用SpringMVC定义好的异常处理器,也可以自定义异常处理器

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_112

6.1简单异常处理器

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_113


spring-mvc.xml配置默认异常处理器

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_114

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_115

6.2自定义异常处理器

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_SpringMVC_116


Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_MVC_117

6.3小结

在业务中直接抛出异常即可,由对应的异常处理组件来处理

Java进阶篇5_SpringMVC的简介、SpringMVC的组件解析、SpringMVC的数据响应、SpringMVC获取请求数据、SpringMVC拦截器、SpringMVC异常处理机制_JavaEE_118