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.课外阅读


目录
相关文章
|
6月前
|
XML JSON JavaScript
javaweb实训第六天上午——JSON&SpringMVC进阶(1)
1.课程介绍 JSON; (了解) SpringMVC返回JSON; (掌握) SpringMVC文件上传、下载; (掌握) SpringMVC拦截器; (掌握) SpringMVC执行流程; (掌握) 2.JSON 2.1.JSON概述
77 0
|
6月前
|
JSON 前端开发 Java
javaweb实训第五天下午——SpringMVC基础(4)
7.3.向页面传值 传递数据就是Controller往前台(页面)传递数据;
77 0
|
6月前
|
前端开发 Java 应用服务中间件
|
6月前
|
开发框架 前端开发 Java
javaweb实训第五天下午——SpringMVC基础(1)
1.课程介绍 SpringMVC概述; (了解) SpringMVC入门; (掌握) 前端控制器配置; (掌握) 业务控制器的三种实现; (掌握) 全注解; (掌握) 控制器常用操作(接收数据,向页面传值,重定向转发); (掌握)
57 0
|
2月前
|
JSON 前端开发 JavaScript
JavaWeb基础8——Filter,Listener,Ajax,Axios,JSON
Filter过滤器、Listener监听器、AJAX、 同步、异步优点和使用场景、Axios异步框架、JSON、js和JSON转换、案例,Axios + JSON 品牌列表查询和添加
JavaWeb基础8——Filter,Listener,Ajax,Axios,JSON
|
5月前
|
JSON 前端开发 数据格式
SpringMVC的数据响应-直接回写json字符串
SpringMVC的数据响应-直接回写json字符串
|
6月前
|
JSON Java 数据格式
javaweb实训第五天下午——SpringMVC基础(3)
7.控制器常用操作 控制器除了处理请求并返回视图以外,还需要一些事情,比如接收页面请求参数、绑定数据到页面、返回json数据、文件上传、文件下载等;
53 0
|
27天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
13天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
17天前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。