- 一、Filter
- 1.1 开发步骤
- 1.2 Filter的执行流程
- 1.3 过滤器链
- 二、JSON
- 2.1 JSON串和Java对象的相互转换
- 2.1.1 Fastjson (JSON 库)
- 2.1.2 Fastjson 的使用
Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一
过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
Filter的作用:
而在访问到这些资源之前可以使过滤器拦截来下,也就是说在访问资源之前会先经过 Filter,如下图
过滤器还可以做 统一编码处理、 敏感字符处理 、权限控制…
-
定义类,实现 Filter接口,并重写其所有方法
-
配置Filter拦截资源的路径:在类上定义 @WebFilter 注解。而注解的 value 属性值 /* 表示拦截所有的资源
-
在doFilter方法中输出一句话,并放行
注意:
上述代码中的 chain.doFilter(request,response); 就是放行,也就是让其访问本该访问的资源。
如上图是使用过滤器的流程,我们通过以下问题来研究过滤器的执行流程:
-
放行后访问对应资源,资源访问完成后,还会回到Filter中吗?
从上图就可以看出肯定 会 回到Filter中
-
如果回到Filter中,是重头执行还是执行放行后的逻辑呢?
如果是重头执行的话,就意味着 放行前逻辑 会被执行两次,肯定不会这样设计了;所以访问完资源后,会回到 放行后逻辑,执行该部分代码。
通过上述的说明,我们就可以总结Filter的执行流程如下:
1.3 过滤器链过滤器链是指在一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链。
上图中的过滤器链执行是按照以下流程执行:
- 执行 Filter1 的放行前逻辑代码
- 执行 Filter1 的放行代码
- 执行 Filter2 的放行前逻辑代码
- 执行 Filter2 的放行代码
- 访问到资源
- 执行 Filter2 的放行后逻辑代码
- 执行 Filter1 的放行后逻辑代码
以上流程串起来就像一条链子,故称之为过滤器链。
注意:
我们现在使用的是注解配置Filter,而这种配置方式的优先级是按照过滤器类名(字符串)的自然排序。
比如有如下两个名称的过滤器 : BFilterDemo 和 AFilterDemo 。那一定是 AFilterDemo 过滤器先执行。
二、JSONJSON 本质就是一个字符串,但是该字符串内容是有一定的格式要求的。 定义格式如下:
var 变量名 = '{"key":value,"key":value,...}';
JSON 串的键要求必须使用双引号括起来,而值根据要表示的类型确定。value 的数据类型分为如下:
- 数字(整数或浮点数)
- 字符串(使用双引号括起来)
- 逻辑值(true或者false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
示例:
var jsonStr = '{"name":"zhangsan","age":23,"addr":["北京","上海","西安"]}'
2.1 JSON串和Java对象的相互转换
前后端的开发中,我们之间的数据就是通过json格式的数据传递的
重点操作:
- 请求数据:JSON字符串转为Java对象
- 响应数据:Java对象转为JSON字符串
Fastjson 是阿里巴巴提供的一个Java语言编写的高性能功能完善的 JSON 库,是目前Java语言中最快的 JSON 库,可以实现 Java 对象和 JSON 字符串的相互转换。
2.1.2 Fastjson 的使用一:导入坐标依赖:
com.alibaba fastjson 1.2.62
二: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字符串转化为封装的对象,之后利用对象来读取前段传来的数据



