您的位置:首页 > 其它

Web开发中的过滤器设计

2007-04-25 17:12 225 查看
五一快到,办公室天天有人讨论去哪去哪玩的,明天公司又集体组织在岛内玩一天,现在都没什么心思工作了,还好任务不多,老总出差不在,可以放肆一下,呵呵..
翻了翻以前学习web开发时留下的学习文档,感觉有些拿出来复习复习还是很有用的。下面是一篇有关web.xml中过滤器设计的学习体会,希望对大家有些帮助。

Web开发中的过滤器设计
在web.xml文件中,过滤器的声明如下:
Element : filter
Content Model : (((description*, display-name*, icon*)), filter-name, filter-
class, init-param*)
其中的filter-name在引用该filter时就会用到。
init-param 可以有多个,用来对该过滤器定义的参数(通常是全局变量)进行初始化,初始化是在调用该过滤器时发生的。注意的是要真正让其起作用,还需要在该过滤器的init方法内进行调用:
this.param = filterConfig.getInitParameter("param");///得到在web.xml中配置的编码
为了让过滤器工作,只声明是不够的,我们还需要确定该Filter的作用域:
Element : filter-mapping
Content Model : (filter-name, (url-pattern | servlet-name), dispatcher*)
filter-name 对应filter声明的filter-name
url-pattern 为url地址映射,任何url字符串含有该url-pattern的定义将被映射(或者说,重定向)到filter-name。
servlet-name 与url-pattern类似,一般的url-pattern定义的是jsp页面的重定向,而servlet-name定义的是对servlet类的引用。注意的是servlet在大多数的应用服务器的web容器内具有一个缺省的url路径:
http://host/webAppPrefix/servlet/packageName.ServletName
如果直接在页面调用servlet会暴露servlet的真实地址,并且不利于定制url,也就需要我们对其进行一定的设置。另外,如果使用缺省的url是不能从init(jsp对应于jspinit)方法读取初始化参数的。为避免误用缺省的url造成不能初始化参数的问题,可以使用下面两种方法:
1、 在每个Web应用中重新映射/servlet/模式
也就是重定向servlet
2、 全局关闭激活器servlet
这个在某些应用服务器是不支持的。它需要对服务器的web.xml(不是项目中的web.xml)进行配置。

过滤器对请求分发器(Request [b]Dispatcher[/b])的控制

Servlet 2.4版的Web程序增强了filter和request dispatcher的配合功能,这样过滤器可以根据请求分发器(request dispatcher)所使用的方法有条件地对Web请求进行过滤。
在web.xml中,Dispatcher的有4个值可以选择:REQUEST、FORWARD、INCLUDE、ERROR。缺省或不设置时为REQUEST
要注意的是,Dispatcher可以对传进来的请求(request)起作用,也可以对传递出去的请求(response)进行控制。



设定元素的过滤器
  ·只有当request直接来自客户(来自客户端的请求),过滤器才生效,对应为REQUEST条件。
  ·只有当request被一个请求分发器使用forward()方法转到一个Web构件时(采用或定义),对应称为FORWARD条件。
  ·类似地,只有当request被一个请求分发器使用include()方法转到一个Web构件时(采用或定义),对应称为INCLUDE条件。
   ·只有当request被一个请求分发器使用“错误信息页”机制方法转到一个Web构件时,对应称为ERROR条件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: