`
renzhelife
  • 浏览: 670090 次
文章分类
社区版块
存档分类
最新评论

Servlet中的Filter

 
阅读更多

Servlet过滤器(Filter)介于与之相关的Servlet和或sp页面和客户之间,即:客户端—》Filter—》servlet或jsp。在《Servlet和JSP的关系以及此关系在Tomcat中的》中已简阐述了servlet和jsp的关系。本篇简要介绍下Filter的作用、对比下它与Servlet的创建过程以及Filter的简单使用!

开发web application 经常会遇到如下情况:

1、访问特定资源(Web 页、JSP 页、servlet)时的身份认证
2、应用程序级的访问资源的审核和记录
3、应用程序范围内对资源的加密访问,它建立在定制的加密方案基础上
4、对被访问资源的及时转换, 包括从 servlet 和 JSP 的动态输出

而这些就是Filter能够处理的事情了,也由此我们可以将Filter分为如下几类:

1、用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求。
2、日志Filter:详细记录某些特殊的用户请求。
3、负责解码的Filter:包括对非标准编码的请求解码。
4、能改变XML内容的XSLT Filter等。

通过上述介绍我们可以看出,Filter是个典型的处理链,它可以执行servlet之前和之后进行一番处理,并且可以有多个Filter配套使用。而它是在servlet2.3中提出的,其创建和使用过程与Servlet的创建和使用过程类似!分别包括如下两个过程:

servlet:1、创建servlet处理类(一般要实现doGet、doPost或service方法);2、配置web.xml文件(配置servlet标签和servlet-mapping标签)

Filter: 1、创建Filter处理类(要实现init、doFilter和destroy方法); 2、配置web.xml文件(配置filter标签和filter-mapping标签)

servlet举例参见《Servlet和JSP的关系以及此关系在Tomcat中的》,下面简单举例Filter,实现在访问jsp时设置字符集。

Filter处理类代码如下:

filter配置如下:

 其调用过程如下图所示:

image<!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->

通过上述介绍,可以清楚filter可以在访问jsp或servlet之前和之后做一些事情。其实质是拦截了request和response两个请求,具体操作可以参见上述代码

中的27-31行。filter的优点除了可以解决上述面临的问题外,还有一点是做软件值得借鉴的地方,这便是filter是可“插拔的”,只需要对配置文件进行更改不

需要改动其他代码,便可以决定使用filter与否和一些参数等的设置非常灵活!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics