欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP Filter的应用方法

程序员文章站 2024-02-10 10:38:22
servlet有一个很有意思也很有用的功能,就是filter。 所谓filter,就是在用户请求到达 servlet 之前、或者 servlet 执行之后, 执行的一段小程...

servlet有一个很有意思也很有用的功能,就是filter。 所谓filter,就是在用户请求到达 servlet 之前、或者 servlet 执行之后, 执行的一段小程序,这段程序可以对用户请求做预处理, 或者对servlet返回的结果进行一些公用处理。
filter可以在请求到达 servlet 之前执行, 甚至即使请求一个静态页面或图片等,filter也会被优先执行。 这样我们可以通过filter对应用程序内的所有对象(包括java程序和静态内容)进行预处理。 (这个功能恐怕php程序就无法做到了。)

filter通常可用于以下几种情况:
•认证
•记录访问日志
•加密解密
•字符编码转换
•数据压缩

如上面最常用的“认证”,可以在filter中书写认证代码, 这样不仅省却了在servlet中认证的麻烦,而且还能控制网站中静态内容的访问。
filter是个接口,位于 javax.servlet.filter。它与其他接口的关系如下:
JSP Filter的应用方法
我们在书写自己的filter时,只需写一个类实现 filter 接口即可。
实现filter接口需要实现以下几个方法:

复制代码 代码如下:

void init(filterconfig filterconfig) throws servletexception

filter的初始化方法。
复制代码 代码如下:

void destroy()

filter结束之前执行的方法。
复制代码 代码如下:

void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception

filter的执行内容。参数request和response分别为输入和输出参数,而chain则为filter链对象。
所谓filterchain,一个应用程序内的filter可以有多个,它们像链子一样串在一起, 其中的某个filter执行之后,可以调用chain.dofilter(request, response)将执行权转给下一个filter, 直到所有的filter都执行完毕。
这次的示例程序我们修改了上一节的登录程序, 为它增加了一个下载链接(详见sessiontest.java)。 这个下载链接指向 img/sample.jpg。 我们希望能通过一个filter,在用户试图下载 img/sample.jpg 时验证用户身份, 如果验证失败,则禁止用户下载,并跳转到登录页面。
创建filter时可惜不能像servlet那样,直接从右键菜单中选择新建, 而只能先写好源代码然后手工添加到web.xml中。 如下图,在新建类时注意要实现javax.servlet.filter接口。
JSP Filter的应用方法
写完代码之后,打开web.xml文件,手工添加filter。与servlet类似,你需要添加 和 两个标记。这里我们要对 /img/ 下的所有文件进行登录验证, 因此的 url-pattern 处我们填写了 /img/* 。
JSP Filter的应用方法
最后执行,访问 /learnjsp/img/sample.jpg ,就会跳转到登录页面。 登录之后再次访问上面的链接,才能看到正确的图片。

示例下载: