Servlet 过滤

Servlet 过滤提供名为过滤器的新类型对象,它可以变换请求或修改响应。

您可以将过滤器链接在一起,这样一组过滤器就可以对指定资源或资源组的输入和输出起作用。

过滤器通常包含记录过滤器、图像转换过滤器、加密过滤器和多用途因特网邮件扩展 (MIME) 类型过滤器(其功能等价于 Servlet 链接)。尽管过滤器不是 Servlet,但它们的生命周期非常相似。

以下列方式处理过滤器:

  1. Web 容器确定是否需要构造包含请求资源的 LoggingFilterFilterChain

    FilterChain 以调用 LoggingFilter 开始并以调用请求的资源结束。

  2. 如果其他过滤器需要加入到链,那么 Web 容器会将它们放在 theLoggingFilter 之后和请求的资源之前。
  3. 然后 Web 容器实例化和初始化 LoggingFilter(如果先前它没有完成的话),并且调用它的 doFilter(FilterConfig) 方法以启动链。
  4. LoggingFilter 预处理请求和响应对象,然后调用过滤器链 doFilter(ServletRequest, ServletResponse) 方法。

    此方法将处理传递到链中的下一个资源(即,所请求的资源)。

  5. 在从过滤器链 doFilter(ServletRequest, ServletResponse) 方法返回后,LoggingFilter 在将响应发送回客户机之前,对请求和响应对象执行后处理。

Java™ Servlet Specification 2.4 使您可以在部署描述符中使用可能值(如 REQUEST、FORWARD、INCLUDE、ERROR)定义新的 <dispatcher> 元素,而不是使用 RequestDispatcher 调用过滤器。

Java Servlet Specification 3.0 使您可以在部署描述符中使用可能值(如 ASYNC、REQUEST、FORWARD、INCLUDE、ERROR)定义新的 <dispatcher> 元素,而不是使用 RequestDispatcher 调用过滤器。

例如:
	<filter-mapping>
		<filter-name>Logging Filter</filter-name>
		<url-pattern>/products/*</url-pattern>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>
</filter-mapping>   

这表明过滤器应该应用于直接来自客户机的请求和转发请求。添加 INCLUDE 和 ERROR 值,还表示过滤器另外应该应用于已包含请求和 <error-page> 请求。 如果没有指定任何 <dispatcher> 元素,那么缺省值为 REQUEST。

Servlet 过滤的 Filter、FilterChain、FilterConfig 类

以下接口定义为 javax.Servlet 包的一部分:

  • Filter 接口 - 方法:doFilter、getFilterConfig 和 setFilterConfig
  • FilterChain 接口 - 方法:doFilter
  • FilterConfig 接口 - 方法:getFilterName、getInitParameter、getInitParameterNames 和 getServletContext

以下类定义为 javax.Servlet.http 包的一部分:

  • HttpServletRequestWrapper - methods:请参阅 Servlet 2.4 规范
  • HttpServletResponseWrapper - methods:请参阅 Servlet 2.4 规范

指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cweb_sfilt
文件名:cweb_sfilt.html