filter和JSON
Posted 小王子jvm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了filter和JSON相关的知识,希望对你有一定的参考价值。
Filter(过滤器)
web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
1、Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
2、Filter 过滤器它是 JavaEE 的规范。也就是接口
3、Filter 过滤器它的作用是:拦截请求,过滤响应。
例如登录拦截:
Filter 过滤器的使用步骤:
1、编写一个类去实现 Filter 接口
2、实现过滤方法 doFilter()
3、到 web.xml 中去配置 Filter 的拦截路径(或者使用注解配置),@WebFilter("/*")
访问所有资源之前,都会执行该过滤器
@WebFilter("/*")//访问所有资源之前,都会执行该过滤器
public class FilterDemo1 implements Filter
@Override
public void init(FilterConfig filterConfig) throws ServletException
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
System.out.println("filterDemo1被执行了....");
//放行
filterChain.doFilter(servletRequest,servletResponse);
@Override
public void destroy()
过滤器细节
过滤器执行流程
- 执行过滤器
- 执行放行后的资源
- 回来执行过滤器放行代码下边的代码
过滤器生命周期方法
- init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
- doFilter:每一次请求被拦截资源时,会执行。执行多次
- destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。
用于释放资源,过滤器配置详解,拦截路径配置:
- 具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
- 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
- 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
- 拦截所有资源:/* 访问所有资源时,过滤器都会被执行
拦截方式配置:资源被访问的方式
-
注解配置:
设置dispatcherTypes属性
REQUEST 默认值。浏览器直接请求资源 FORWARD 转发访问资源 INCLUDE 包含访问资源 ERROR 错误跳转资源 ASYNC 异步访问资源 -
web.xml配置
设置标签即可
过滤器链(配置多个过滤器)
-
执行顺序:如果有两个过滤器:过滤器1和过滤器2
- 过滤器1
- 过滤器2
- 资源执行
- 过滤器2
- 过滤器1
-
过滤器先后顺序问题:
- 注解配置:按照类名的字符串比较规则比较,值小的先执行
如: AFilter 和 BFilter,AFilter就先执行了。
2. web.xml配置: 谁定义在上边,谁先执行
JSON
json 是由键值对组成,并且由花括号(大括号)包围。每个键由引号引起来,键和值之间使用冒号进行分隔, 多组键值对之间进行逗号进行分隔。
json 定义示例:
var jsonObj =
"key1":12,
"key2":"abc",
"key3":true,
"key4":[11,"arr",false],
"key5":
"key5_1" : 551,
"key5_2" : "key5_2_value"
,
"key6":[
"key6_1_1":6611,
"key6_1_2":"key6_1_2_value"
,
"key6_2_1":6621,
"key6_2_2":"key6_2_2_value"
]
;
json 本身是一个对象。 json 中的 key 我们可以理解为是对象中的一个属性。 json 中的 key 访问就跟访问对象的属性一样: json 对象.key
json 的两个常用方法
json 的存在有两种形式。
-
对象的形式存在,我们叫它 json 对象。
-
字符串的形式存在,我们叫它 json 字符串。
一般我们要操作 json 中的数据的时候,需要 json 对象的格式。 一般我们要在客户端和服务器之间进行数据交换的时候,使用 json 字符串。
JSON 在 java 中的使用
javaBean 和 json 的互转:(导入jackson的相关jar包,这个是使用GSON包)
@Test
public void test1()
Person person = new Person(1,"哥好帅!");
// 创建 Gson 对象实例,包中组件
Gson gson = new Gson();
// toJson 方法可以把 java 对象转换成为 json 字符串
String personJsonString = gson.toJson(person);
System.out.println(personJsonString);
// fromJson 把 json 字符串转换回 Java 对象
// 第一个参数是 json 字符串
// 第二个参数是转换回去的 Java 对象类型
Person person1 = gson.fromJson(personJsonString, Person.class);
System.out.println(person1);
也可以使用jackson:
//Java对象转为JSON字符串
@Test
public void test1() throws Exception
//1.创建Person对象
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
//2.创建Jackson的核心对象 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//3.转换
/* 转换方法:
writeValue(参数1,obj):
参数1:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
writeValueAsString(obj):将对象转为json字符串
*/
String json = mapper.writeValueAsString(p);
//"name":"张三","age":23,"gender":"男"
System.out.println(json);//"name":"张三","age":23,"gender":"男"
//JSON字符串转为Java对象
@Test
public void test5() throws Exception
//1.初始化JSON字符串
String json = "\\"gender\\":\\"男\\",\\"name\\":\\"张三\\",\\"age\\":23";
//2.创建ObjectMapper对象
ObjectMapper mapper = new ObjectMapper();
//3.转换为Java对象 Person对象
Person person = mapper.readValue(json, Person.class);
System.out.println(person);
以上是关于filter和JSON的主要内容,如果未能解决你的问题,请参考以下文章
使用 Rxjs map 和 filter 一起从 json 中选择国家和州