共计 1411 个字符,预计需要花费 4 分钟才能阅读完成。
过滤器
实质:
实现 Filter 接口的 Java 类 API: init() // 启动服务器时执行 doFilter(ServletRequest ,ServletResponse , FilterChain)// 当可以拦截的请求到达时,新建一个线程去执行。同 Servlet 一样,destory()// 关闭服务器时执行
public class FilterDemo1 implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
// 拦截时执行语句
// 执行这一句,说明放行(让下一个过滤器执行,如果没有过滤器了,就执行执行目标资源)
chain.doFilter(req, resp);
// 从后一个过滤器返回,或从目标资源返回时,执行语句。
}
public void init(FilterConfig config) throws ServletException {
}
}
功能:
拦截访问 Servlet 的请求,在执行 Servlet 前执行自定义代码
通过 chain.doFilter(req, resp); 的有无决定是否放行,放行的话会执行到过滤器链下一个过滤器,如果还有的话;如果没有则会执行请求的目标 Servlet
在 Servlet 执行后,返回到 Filter 时,执行一些自定义代码
实现方法:
新建 Filter 类,实现 doFilter 方法
部署,即配置 Filter 所拦截的 url、参数等等
实现方式一、在 web.xml 中配置
//filter 用于注册过滤器
<filter>
<filter-name>FilterDemo1</filter-name>
<filter-class>FilterDemo1</filter-class>
<init-param>
<param-name>word_file</param-name>
<param-value>/WEB-INF/word.txt</param-value>
</init-param>
</filter>
//<filter-mapping> 元素用于设置一个 Filter 所负责拦截的资源
// 一个 Filter 拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径
<filter-mapping>
<filter-name>FilterDemo1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
实现方式二、在 Filter 类上直接写注解
@WebFilter(filterName = “FilterDemo1”,urlPatterns = “/*”)
使用场景
编码问题,解决中文乱码
过滤敏感词汇(用户输入的敏感词汇)
对所有输出进行压缩(包括文本流和字节流的)
权限验证(登录权限、资源访问权限 …)
自动登录
禁止浏览器缓存数据
在服务器端内存中缓存客户端经常访问的数据(提高访问速度,不用每次都去硬盘读)
借鉴:
https://www.cnblogs.com/ygj09…
https://mp.weixin.qq.com/s?__…(Java3y)
Filter 高级应用 https://mp.weixin.qq.com/s?__…