通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,一般常用于实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
小知识:Servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。(如果你不认识Servlet,那么可以直接将Servlet看成是asp .net里的Controller控制器)
javax.servlet.Filter这个接口提供了3个方法,在服务器调用doFilter方法时,会传递filterChain对象进服务端,filterChain是Filter接口中很重要的一个对象。
这个对象它也提供了doFilter方法,我们可以根据需求决定是否调用,如调用,则web服务器就会调用web资源的service方法,即web资源就会被访问,否则web资源不会被访问。利用它可以在调用目标资源之后,让一段代码执行。
当我们编写好Filter,配置好对哪个资源进行过滤后,WEB服务器每次在调用web资源之前,都会先调用一下filter的doFilter方法。
//该方法在客户端请求及服务器端回复时都将被自动调用
public void doFilter (ServletRequest, ServletResponse, FilterChain)
//初始化配置参数,在doFilter()方法之前被调用
public void init(FilterConfig filterConfig)
//结束过滤器,doFilter()方法完成后被调用
public void destroy() 

在客户向服务端发起请求时,Filter会横在Servlet、jsp、html跟客户的连接通道之间,从而达到过滤的效果。 在过滤器中的我们可以执行一段代码,这段代码是很有意义的,以此可以提高网站的安全性
<web-app>
<filter>
<filter-name>testFitler</filter-name> <!-- 过滤器名称 -->
<filter-class>org.test.TestFiter<!-- 路径指定对哪个Servlet --></filter-class>
<init-param>
<param-name>word_file</param-name>
<param-value>/WEB-INF/word.txt<!-- 路径指定对哪个资源文件 --></param-value>
</init-param>
</filter>
</web-app>filter-mapping元素位于web.xml文件中filter元素之后serlvet元素之前。
它包含如下三个可能的子元素:
对于路径,当我们想要过滤的元素过多时,一个个配置太麻烦,可以用 ‘ * ’ 号,进行代替,例:
<web-app>
<filter>
<filter-name>testFitler</filter-name> <!-- 过滤器名称 -->
<filter-class>*<!-- * 针对于所有的Servlet --></filter-class>
<init-param>
<param-name>word_file</param-name>
<param-value>*<!-- * 针对于所有的资源文件 --></param-value>
</init-param>
</filter>
</web-app>这样在进入服务端,进行资源调用时,都会经过该过滤器,要是有一两个不想执行过滤器中的代码,给个if吧
1. 加载和实例化
2. 初始化
3. doFilter
4. 销毁
对于Filter过滤器,我们可以在过滤器中,过滤掉一些低俗文字,危险字符,也可以针对传输Servlet的参数进行修改,因为过滤器的机制就摆在那。
针对于某个资源文件进行使用都会经过过滤器,在过滤器中,虽然是一小块代码,但是这一小段代码对于Web开发是具有非常意义的。