servlet有一个非常有趣和有用的功能,那就是过滤器,所谓的过滤器是一个小程序,在用户请求servlet或servlet执行之前执行。该程序可以对用户请求进行预处理,也可以对servlet返回的结果进行一些公开处理。
过滤器可以请求到达Servlet之前执行,即使是要求一个静态页面或图片,和过滤器将首先执行。这样,我们可以预处理内的所有对象(包括java应用程序和静态内容)通过过滤器。(恐怕PHP程序不能做。)

在下列情况下通常可以使用筛选器:
认证
日志访问日志
密码
字符编码转换
数据压缩

作为最常用的认证方式,您可以在过滤器中编写验证码,这不仅省去了servlet中的身份验证的麻烦,而且还控制了网站静态内容的访问。
滤波器是一个接口,位于javax.servlet.filter.it与其他接口的关系如下:

当我们编写自己的过滤器时,我们只需要编写一个类来实现过滤器接口。
过滤器接口的实现需要实现以下方法:
复制代码代码如下所示:
void init(filterconfig filterconfig)将返回

滤波器初始化方法。
复制代码代码如下所示:
空销毁()

在过滤器结束前执行的方法。
复制代码代码如下所示:
无效的doFilter(ServletRequest请求,ServletResponse响应,FilterChain链)抛出IOException,返回

滤波器的执行,参数请求和响应分别是输入和输出参数,而链是滤波器链对象。
所谓FilterChain,过滤器内的一个应用程序可以有多个,它们串在一起就像一个链条,一个过滤器执行后,你可以叫chain.dofilter(请求、响应)将执行权的下一个过滤器,直到所有的过滤器执行。
这个简单的程序修改了登录程序的前一部分,为它添加一个下载链接(见sessiontest。java)。这个下载链接指向IMG / sample.jpg.we希望可以验证用户身份通过过滤器,当用户尝试下载IMG / sample.jpg。如果身份验证失败,我们将禁止用户下载并跳转到登录页面。
创建一个过滤器时,可惜你不能选择新的从右键菜单如Servlet,但你只能写的源代码,将它添加到web.xml手动。如下图,在新的班级,注重的javax.servlet.filter接口的实现。

你完成的代码后,打开web.xml文件和手动添加过滤。像servlet,您需要添加两标签。这里我们要验证 / /下所有IMG文件,所以我们填写 / / *在IMG的URL模式。

最终的执行,learnjsp / / / sample.jpg IMG的访问,将跳转到登录页面,登录后,上面的链接可以再次看到正确的图片。

例:servlet-filter_net.zip下载