今天来给大家分享一下我在学习java过滤器的一些积累。
要学习过滤器首先就要明白什么是过滤器以及过滤器有什么作用
过滤器简介
过滤器的学名为Filter,它是基于servlet的一种技术实现,所有java web项目
都可以使用它对服务器管理的一些web资源.例如jsp,以及静态图片和静态html
文件实行拦截,从而进行一些特殊的功能处理。
小知识点:2000 年,Sun 公司在 Servlet2.3 规范中添加了 Filter 功能,
并在 Servlet2.4 中对 Filter 进行了细节上的补充。
过滤器主要功能
主要功能分为两个方面
1.在HttpServletRequest到达servlet之前,对HttpServletRequest
进行拦截并可以修改header和request数据.
2.在HttpServletResponse到达客户端之前,对HttpServletResponse
进行拦截并可以修改header和respon数据.
了解了过滤器是什么和主要功能之后就需要了解过滤器有哪些应用场景
过滤器主要应用场景
1.设置字符编码
2.过滤敏感词汇
3.压缩响应信息
4.url级别的权限访问控制
接下来分析一下过滤器的工作原理
过滤器的工作原理
Filter接口中有一个doFilter方法,当我们编写好Filter,并配置对哪个
web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,
会先调用一下filter的doFilter方法.因此,在该方法内编写代码可达到如下目的:
调用目标资源之前,让一段代码执行。
是否调用目标资源(即是否让用户访问web资源)。
调用目标资源之后,让一段代码执行。
web服务器在调用doFilter方法时,会传递一个filterChain对象进来,
filterChain对象是filter接口中最重要的一个对象,它也提供了一个
doFilter方法,开发人员可以根据需求决定是否调用此方法,
调用该方法,则web服务器就会调用web资源的service方法,
即web资源就会被访问,否则web资源不会被访问。
现在就可以上代码实践啦
创建一个Filter01类.实现Filter接口即可
注意:
Filter类是javax.servlet下面的(很重要哟!!!)
Filter类是javax.servlet下面的(很重要哟!!!)
Filter类是javax.servlet下面的(很重要哟!!!)
package com.itgzw;
import javax.servlet.*;
import java.io.IOException;
//创建过滤器最重要的步骤就是实现Filter接口
//需要注意的是Filter接口是javax.servlet下面的
//Filter接口中有三个方法
//init--初始化 doFilter--具体的过滤方法 destroy--销毁
public class Filter01 implements Filter {
//初始化方法.程序启动的时候调用此方法
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Filter01 init ......");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("Filter01 doFilter ......");
//执行filterChain.doFilter()方法之后才会调用servlet的service()方法
filterChain.doFilter(servletRequest,servletResponse);
}
//销毁方法,程序停止或者重新部署的时候会调用方法
@Override
public void destroy() {
System.out.println("Filter01 destroy ......");
}
}
web.xml中配置Filter
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>Filter01</filter-name>
<filter-class>com.itgzw.Filter01</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter01</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
至此,java Filter就算是入门啦!!!
小伙伴们如果在项目中遇到问题可以在线讨论哟!!!
本文章纯属个人学习记录,如有问题,请不吝赐教。