过滤器笔记
过滤器
过滤器是什么?
生活中的过滤器:
饮水机的滤芯、保温杯、空调的滤网、渔网
过滤器的作用
Java中的过滤器可以过滤请求
当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
过滤器的作用:
一般用于通用的操作。如:登录验证,统一编码处理、敏感字符过滤
过滤器原理:
过滤器链:
注意:不是项目中定义多个过滤器,就是过滤器链,
多个过滤器在同一个时间点过滤同一个目标的时候,构成过滤器链
过滤器如何使用
1. 创建类,实现Filter接口;
2. 在web.xml中进行相应配置
过滤器不能直接访问,不能处理请求
filter-mapping的位置决定过滤器执行的顺序
案例:
登录案例
login.jsp和index.jsp
在访问index.jsp之前必须先登录,如果没登录,需跳转到登录页
中文乱码过滤器
过滤器原理
转发默认不过滤
过滤器的几种类型:
REQUESET:请求过滤器,浏览器直接发起的请求会被过滤
FORWARD:转发过滤器,服务器的转发会被过滤
INCLUDE:包含过滤器,动态包含会被过滤
ERROR:错误过滤器,服务器错误会被过滤,
要配合error-page使用 exception-type location
如果没有写Dispatcher节点的情况下,默认是REQUEST,如果手动写了会有覆盖效果
静态包含
<%@ include file="include.jsp" %>
动态包含
<jsp:include page="include.jsp"></jsp:include>
过滤器案例:编码过滤器
乱码:
请求的get乱码:
new String(name.getBytes(“ISO8859-1”),”UTF-8”);
请求的post乱码:
req.setCharacterEncoding(“UTF-8”);
响应的乱码:
resp.setContentType(“text/html;charset=UTF-8”);
处理get请求乱码
- 获得所有数据(req.getParameterMap();)
- 遍历MAP拿到所有key(参数名)
- 根据key取得参数值(数组)
- 遍历参数值(数组),处理乱码之后放回去
因tomcat版本的变化,导致效果的不同
Tomcat6:
MyEclipse Tomcat 没有问题
Tomcat6.0.14 没有问题
其他的tomcat6.x.x有不支持的情况
Tomcat7:
不支持
Tomcat8:
Get请求根本不需要处理
Post请求跟原来处理方式一样
禁止jsp缓存
过滤所有jsp
*.jsp
response.setDateHeader("Expires",-1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
/**
* @author liwu_chen
* @date ${date}
*
* ${tags}
*/

浙公网安备 33010602011771号