学习目标
- 过滤器Filter
- 监听器Listener
Filter简介
- Filter=过滤器
- 过滤器是可用于Servlet编程的Java类,可以实现以下目的:
客户端的请求访问后端资源之前,拦截这些请求。
在服务器的响应发送回客户端之前,处理这些响应。
应用场景
- 身份验证过滤器(Authentication Filters)
- 编码过滤器
- 跨域过滤器
- 过滤敏感文字
例如可以解决请求的中文乱码问题:
request.setCharacterEncoding("utf-8"); //对于post的请求中文乱码
获取时 request.setCharacterEncoding("UTF-8");
响应时 response.setContentType("text/html; charset=UTF-8");
作用范围:过滤器>拦截器>lop
创建过滤器步骤
创建过滤器Create Filter:
默认的Filter mappings: URL Pattern/Servlet Name,会和类名一致。
Edit Filter mappings:
编辑完成后,点击OK保存。
过滤器工作的方法:doFilter
response.setHeader("Access-Control-Allow-Origin", "*");//核心
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With");
response.setHeader("Access-Control-Allow-Credentials", "true");//Credentials证书
response.setHeader("Content-Type", "application/json;charset=utf-8");
js 把 json 转为以 ‘&’ 连接的字符串可参阅:
https://www.cnblogs.com/freddyhuang/p/9337152.html
/**
* URL编码;
* @param {参数} param
*/
export function toParams(param) {
var result = ""
for (let name in param) {
if (typeof param[name] != 'function') {
result += "&" + name + "=" + encodeURI(param[name]);
}
}
return result.substring(1)
}
比较经典的跨域错误:
过滤链
- 配置多个过滤器,将引发过滤链串联效果
- 过滤链串联执行顺序:
- 同一种路径配置方式时执行顺序web.xml中的配置顺序
- 过滤器链的执行顺序按类名字符自然排序
按类名的自然排序,先执行CrossFilter,再执行EncodeFilter。
什么是监听器
-
监听器也叫Listener,是Servlet的监听器。
-
监听器就是监听某个对象的状态变化的组件。
-
事件源:被监听的对象——三个域对象request session servletContext
应用场景:监听客户端的请求、服务端的操作
- 监听在线的用户的数量。
- 框架初始化,如加载spring的配置xml文件
监听器一般都是后端用的,如加载spring的配置xml文件。
创建监听器步骤
创建监听器Create Listener:
Select the application lifecycle events to listen to.
主要打勾以下两个。
I:interface,是接口的意思。
监听器比过滤器更高级、更特殊,是最高级的servlet。
监听器>过滤器>servlet。
实现了两个接口:ServletContextListener、HttpSessionListener接口。
sessionCreated:会话创建
sessionDestroyed:会话关闭
contextDestroyed:上下文销毁
contextInitialized:上下文初始化
过滤器和监听器都是难点,重点是过滤器。
练习
用户信息列表
jsonstr一般包括:status、message和data等基本组成部分。
练习3: 用户列表----新增、删除、更新