javaweb实训第六天上午——JSON&SpringMVC进阶(2)

简介: 5.SpringMVC拦截器5.1.创建拦截器

javaweb实训第六天上午——JSON&SpringMVC进阶(1)https://developer.aliyun.com/article/1415126

5.SpringMVC拦截器

5.1.创建拦截器

public class MyInterceptor implements HandlerInterceptor {
  //preHandle()方法在业务处理器处理请求之前被调用   
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
    System.out.println("进入拦截器了....");
    //这里可以判断用户是否登录 
    //没有登录可以使用 request/response跳转回登录页面
    //注:如果不继续执行返回false,否则返回true
    return false;
  }
  // postHandle()方法在业务处理器处理请求之后被调用   
  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
      ModelAndView modelAndView) throws Exception {
  }
  // afterCompletion()方法在DispatcherServlet完全处理完请求后被调用   
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
      throws Exception {
  }
}

5.2.配置拦截器

<!-- 配置拦截器组 -->
<mvc:interceptors>
  <!-- 拦截器 -->
  <mvc:interceptor>
    <!-- 要拦截的配置,该配置必须写在不拦截的上面,/*拦截一级请求,/**拦截多级请求 -->
    <mvc:mapping path="/**"  />
    <!-- 设置不拦截的配置 -->
    <mvc:exclude-mapping path="/login"/>
    <!-- 配置拦截器 -->
    <bean class="cn.itsource.springmvc._06_interceptor.MyInterceptor" />  
  </mvc:interceptor>
</mvc:interceptors>

6.SpringMVC执行流程

6.1.流程图

20210602163125909.png

6.2.流程描述

注:控制器即处理器(Handler)

用户向服务器发送请求,请求会统一交给SpringMVC前端控制DispatcherServlet处理;

DispatcherServlet通过请求HandlerMapping(处理器映射管理对象)找到该请求对应的Handler对象(包括控制器以及Handler对象对应的拦截器) 和HandlerExecutionChain对象(包含:控制器+2个拦截器);

DispatcherServlet请求HandlerAdapter,选择一个合适的HandlerAdapter去处理Handler。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法);

提取request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

 HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

 数据格式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet;

ViewResolver 结合Model和View,来渲染视图(Model+View合成)

将渲染结果返回给客户端;

6.3.SpringMVC工作流程描述(简易版本:面试)

客户端将请求统一提交到DispatcherServlet;

DispatcherServlet会将请求交给HandlerMapping进行请求映射,匹配该请求的Handler;

DispatcherServlet再请求HandlerAdapter调用相应的Handler处理请求,并向前端控制器返回一个ModelAndView对象;

DispatcherServlet将ModelAndView对象交给ViewResoler视图解析器处理,返回指定的视图View;

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

DispatcherServlet 将页面响应给用户;

7.课程总结

7.1.重点

  1. SpringMvc返回Json数据;
  2. SprignMvc文件上传;
  3. SpringMvc执行流程;

7.2.难点

  1. SprignMvc文件上传;
  2. SpringMvc执行流程;

7.3.如何掌握

  1. 课上认真听课;
  2. 完成课后练习;
  3. 抓住课程重点;

7.4.排错技巧

  1. 通过异常和错误找出问题,分析问题,解决问题;
  2. 还原代码;
  3. 代码最小化;
  4. 断点;

8.常见问题

状态异常:如果出现406状态异常,jackson的jar文件没有导入

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?

分析:缺少配置

9.课后练习

  1. 课堂代码1-2遍;

10.面试题

  1. SpringMVC执行流程?

11.扩展知识或课外阅读推荐(可选)

11.1.扩展知识

拦截器(interceptor)与过滤器(filter)的区别?

拦截器与过滤器有很多相似之处,都可以拦截请求,也可以放行;

拦截器是SpringMVC中的组件,需要在Spring的配置文件中配置。而过滤器是JavaEE中的组件,在web.xml中配置。Filter的执行顺序在Interceptor之前;

拦截器(Interceptor)是基于Java的反射机制,而过滤器(Filter)是基于函数回调。从灵活性上说拦截器功能更强大些,Filter能做的事情,都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor;

20210602163636570.png

11.2.课外阅读


目录
相关文章
|
4月前
|
XML JSON JavaScript
javaweb实训第六天上午——JSON&SpringMVC进阶(1)
1.课程介绍 JSON; (了解) SpringMVC返回JSON; (掌握) SpringMVC文件上传、下载; (掌握) SpringMVC拦截器; (掌握) SpringMVC执行流程; (掌握) 2.JSON 2.1.JSON概述
55 0
|
5月前
|
JSON JavaScript fastjson
SpringMVC原理分析 | JSON、Jackson、FastJson
SpringMVC原理分析 | JSON、Jackson、FastJson
65 0
|
5月前
|
JSON 数据格式
SpringMVC-接收请求中的json数据及日期类型参数传递
SpringMVC-接收请求中的json数据及日期类型参数传递
52 0
|
5月前
|
JSON 数据格式
SpringMVC JSON数据交互 数据不回显问题
SpringMVC JSON数据交互 数据不回显问题
26 1
|
5月前
|
JSON 前端开发 数据格式
SpringMVC之JSON返回&异常处理机制
SpringMVC之JSON返回&异常处理机制
36 0
|
5月前
|
XML 存储 JSON
SpringMVC之JSON数据返回及异常处理机制
SpringMVC之JSON数据返回及异常处理机制
|
5月前
|
JSON 前端开发 Java
SpringMVC之JSON返回及异常处理
SpringMVC之JSON返回及异常处理
61 0
|
24天前
|
JSON 前端开发 Java
Json格式数据解析
Json格式数据解析
|
23小时前
|
JSON JavaScript Java
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
7 0
|
3天前
|
JSON 数据格式 Python
Python标准库中包含了json模块,可以帮助你轻松处理JSON数据
【4月更文挑战第30天】Python的json模块简化了JSON数据与Python对象之间的转换。使用`json.dumps()`可将字典转为JSON字符串,如`{&quot;name&quot;: &quot;John&quot;, &quot;age&quot;: 30, &quot;city&quot;: &quot;New York&quot;}`,而`json.loads()`则能将JSON字符串转回字典。通过`json.load()`从文件读取JSON数据,`json.dump()`则用于将数据写入文件。
9 1