Java之Filter

一、何为Filter?

Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源。换句话说其主要用于前台向后台传递数据的过滤操作。

例如Jsp, Servlet,静态图片文件或静态
html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级能。

二、在开发中的应用

首先看一下Filter在项目中的应用。

从图中可见它在web容器和Servlet、jsp之间,类似于一个过滤器将web传过来的垃圾信息全部过滤掉,然后再传给服务器,这样提高了一些效率。接下来从代码中看看它是怎么用的:

1、新建一个类,实现filter接口并实现doFilter()方法

packagecom.bjpowernode.drp.util.filter;

importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
/**
 * 采用Filter统一处理字符集
 * @author yujie
 *
 */
public classCharsetEncodingFilter implements Filter {

private Stringendcoding;

publicvoid destroy() {
}

publicvoid doFilter(ServletRequest request, ServletResponse response,
FilterChainchain) throws IOException, ServletException {

//System.out.println("CharsetEncodingFilter--->>>begin");
//设置字符集
request.setCharacterEncoding(endcoding);

//继续执行
chain.doFilter(request,response);

//System.out.println("CharsetEncodingFilter--->>>end");
}

publicvoid init(FilterConfig filterConfig) throws ServletException {
this.endcoding= filterConfig.getInitParameter("encoding");
System.out.println("CharsetEncodingFilter.init()-->>endcoding=" + endcoding);
}
}

2、在web.xml中进行配置

  <filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>        

<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

3、访问一个页面看看能否进行控制

三、深入Filter应用场景

1>通过控制对chain.doFilter的方法的调用,来决定是否需要访问目标资源。

比如,可以在用户权限验证等等。判断用户是否有访问某些资源的权限,有权限放行,没权限不执行chain.doFilter方法。

2>通过在调用chain.doFilter方法之前,做些处理来达到某些目的。

比如,解决中文乱码的问题等等。可以在doFilter方法前,执行设置请求编码与响应的编码。甚至可以对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写相应的request.getParameter方法)。

3>通过在调用chain.doFilter方法之后,做些处理来达到某些目的。

比如对整个web网站进行压缩。在调用chain.doFilter方法之前用类A对response对象进行封装装饰,重写getOutputStream和重写getWriter方法。在类A内部中,将输出内容缓存进ByteArrayOutputStream流中,然后在chain.doFilter方法执行后,获取类A中ByteArrayOutputStream流缓存数据,用GZIPOutputStream流进行压缩下。

四、Filter生命周期

简单的一句话和Servlet一样Filter的创建和销毁也是由WEB服务器负责。简单过程如下:

init()->doFilter()->destroy()

注意:init方法与destroy方法只会执行一次。

五、总结

以上就是对Java中filter的简单理解,简单的一句话:filter就是一个过滤器。它的功能很强大,希望在今后的学习中渐渐深入。

Java之Filter

时间: 2024-09-30 09:17:24

Java之Filter的相关文章

JAVA–利用Filter和session防止页面重复提交

JAVA–利用Filter和session防止页面重复提交解决思路:1 用户访问表单页面,先经过过滤器,过滤器设置一个随机id作为token令牌, 并将该token放入表单隐藏域中.2 表单响应到浏览器,用户填充数据后提交请求;3 请求经过过滤器,过滤器获取表单中的令牌进行验证,如果和之前生成的令牌一致,则将请求放行,并且清空令牌;4 如果用户重复提交表单,请求经过过滤器,过滤器进行验证.因为第一次放行后令牌已经清空失效,令牌不一致,不放行.跳转到提醒界面. 需用知识:1 过滤器基础知识2 se

Java中Filter过滤器的使用

过滤器过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改.判断等,把不符合规则的请求在中途拦截或修改.也可以对响应进行过滤,拦截或修改响应.如下图,浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤.过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端.当请求通过了链中所有过滤器后就可以访问资源文件了,如果不能通过,则可能在中间某个过滤器中被处理掉.过滤

Java Web Filter登录验证

初做网站需要登录验证,转自 :http://blog.csdn.net/daguanjia11/article/details/48995789 Filter: Filter是服务器端的组件,用来过滤web请求.当发生一个web请求时,web容器会先检查请求的URL是否设置了Filter,如果设置了,则执行该Filter的doFilter方法.所有Filter都实现了javax.servlet.Filter接口,doFilter是定义在该接口中的最重要的方法. 最常见的使用过滤器的例子有:登录访

java中filter的用法

filter过滤器主要使用于前台向后台传递数据是的过滤操作.程度很简单就不说明了,直接给几个已经写好的代码: 一.使浏览器不缓存页面的过滤器 Java代码 import javax.servlet.*;import javax.servlet.http.HttpServletResponse;import java.io.IOException; /** * 用于的使 Browser 不缓存页面的过滤器 */public class ForceNoCacheFilter implements F

通过Java Web Filter实现一个最简单的UrlRewrite过滤器

工具:支持JavaEE的Eclipse IDE Web 过滤器可以通过动态Web项目来直接添加:或者直接创建Java项目通过添加类来完成,参看如下过滤器代码: package me.ereach.urlfilter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.se

转 Java中Filter、Servlet、Listener的学习

1.Filter的功能filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链). 一个Filter包括: 1).在servlet被调用之前截获; 2).在servlet被调用之前检查serv

java过滤器——filter的使用和配置

在做DRP的过程中用到了filter.前几天昌哥和欢姐在小会议室向我们介绍了AOP的思想,用到filter时觉得它们两者特别相似. 如下图: 在我们正常的编程中,每一条线,都是从上到下依次调用,而filter是在每一个完整的调用中横着"切了一刀".通过配置,它可以对任意代码路径进行过滤. 这里就以转码/设置字符集为例,简单了解一下如何使用filter. 建立Filter CharsetEncodingFilter.java package com.drp.filter; import

java web filter 学习(2)

本文主要对filter的基本使用进行了讲解,其中涉及到了 filter是什么 一个filter处理一个jsp 多个filter处理一个jsp filter是什么 Filter 是java下的一种过滤器 ,能实现对java web程序 客户端和服务器端消息的过滤,也就是在服务器段接受request之前,可以预先对request进行处理,或在客户端接受response之前,对response进行处理. Filter的使用非常灵活,是在"链"到客户端和服务器之间的,在需要时可以配置到客户端与

java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序

过滤器拦截到响应url的请求后会先执行doFilter()方法中chain.doFilter()之前的代码,然后执行下一个过滤器或者servelt.紧接着执行chain.doFilter()之后的代码. 一下为两个过滤器的执行顺序: 过滤器一: package com.rskd_yswb.lib.filter; import javax.servlet.*; import java.io.IOException; public class HttpRequestAndResponseFilter