Filter&Json

一、Filter

Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一

过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。

Filter的作用:
而在访问到这些资源之前可以使过滤器拦截来下,也就是说在访问资源之前会先经过 Filter,如下图

在这里插入图片描述
过滤器还可以做 统一编码处理敏感字符处理权限控制

1.1 开发步骤

  • 定义类,实现 Filter接口,并重写其所有方法
    在这里插入图片描述

  • 配置Filter拦截资源的路径:在类上定义 @WebFilter 注解。而注解的 value 属性值 /* 表示拦截所有的资源
    在这里插入图片描述

  • 在doFilter方法中输出一句话,并放行
    在这里插入图片描述

注意:
上述代码中的 chain.doFilter(request,response); 就是放行,也就是让其访问本该访问的资源。

1.2 Filter的执行流程

在这里插入图片描述

如上图是使用过滤器的流程,我们通过以下问题来研究过滤器的执行流程:

  • 放行后访问对应资源,资源访问完成后,还会回到Filter中吗?

    从上图就可以看出肯定 回到Filter中

  • 如果回到Filter中,是重头执行还是执行放行后的逻辑呢?

    如果是重头执行的话,就意味着 放行前逻辑 会被执行两次,肯定不会这样设计了;所以访问完资源后,会回到 放行后逻辑,执行该部分代码。

通过上述的说明,我们就可以总结Filter的执行流程如下:

在这里插入图片描述

1.3 过滤器链

过滤器链是指在一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链。

在这里插入图片描述
上图中的过滤器链执行是按照以下流程执行:

  1. 执行 Filter1 的放行前逻辑代码
  2. 执行 Filter1 的放行代码
  3. 执行 Filter2 的放行前逻辑代码
  4. 执行 Filter2 的放行代码
  5. 访问到资源
  6. 执行 Filter2 的放行后逻辑代码
  7. 执行 Filter1 的放行后逻辑代码

以上流程串起来就像一条链子,故称之为过滤器链。

注意
我们现在使用的是注解配置Filter,而这种配置方式的优先级是按照过滤器类名(字符串)的自然排序。

比如有如下两个名称的过滤器 : BFilterDemoAFilterDemo 。那一定是 AFilterDemo 过滤器先执行。

二、JSON

JSON 是一种轻量级的数据交换格式,用来实现前后端的数据交互。 定义格式如下:
属性为数字…可不用双引号

var 变量名 = '{"key":value,"key":value,...}';

json的嵌套格式:

  • 数组嵌套对象
[
  {
    "name": "ly",
    "num": 120,
    "age": "18"
  },
  {
    "name": "ly",
    "num": 120,
    "age": "18"
  }
]
  • 对象嵌套数组
{
  "id": 1001,
  "name": "Lyman",
  "goods": [
    "food1",
    "food2",
    "food3"
  ]
}

JSON 串的键要求必须使用双引号括起来,而值根据要表示的类型确定。value 的数据类型分为如下:

  • 数字(整数或浮点数)
  • 字符串(使用双引号括起来)
  • 逻辑值(true或者false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null
    示例:
var jsonStr = '{"name":"zhangsan","age":23,"addr":["北京","上海","西安"]}'

2.1 JSON串和Java对象的相互转换

前后端的开发中,我们之间的数据就是通过json格式的数据传递的
重点操作:

  • 请求数据:JSON字符串转为Java对象
  • 响应数据:Java对象转为JSON字符串

2.1.1 Fastjson (JSON 库)

Fastjson 是阿里巴巴提供的一个Java语言编写的高性能功能完善的 JSON 库,是目前Java语言中最快的 JSON 库,可以实现 Java 对象和 JSON 字符串的相互转换。

2.1.2 Fastjson 的使用

一:导入坐标依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>

二:Java对象转JSON

String jsonStr = JSON.toJSONString(obj);

三:JSON字符串转Java对象

User user = JSON.parseObject(jsonStr, User.class);

从前端获取JSON字符串之后,通过request获取的字符缓冲流读取

BufferReader reader =request.getReader();

String jsonStr =reader.readLine();

之后就可以利用使用JSON的parseObject方法,将json字符串转化为封装的对象,之后利用对象来读取前段传来的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值