Servlet3.0新特性@WebFilter与过滤器的初始化
来源:互联网 发布:java文字相似度 编辑:程序博客网 时间:2024/06/06 01:17
今天用eclipse写过滤器时要实现一个在init(FilterConfig fConfig)方法中设置初始访问量的功能,以前也写过,但今天怎么也运行不了,总产生NumberFormatException异常,web.xml配置如下
用FilterConfig的getInitParameter()方法总是获取不了参数count,查了一晚上,才知道问题出在@WebFilter上,下面是baidu来的:属性名 类型 描述 filterNameString指定过滤器的 name 属性,等价于 <filter-name>valueString[]该属性等价于 urlPatterns 属性。但是两者不应该同时使用。urlPatternsString[]指定一组过滤器的 URL 匹配模式。等价于 <url-pattern> 标签。servletNamesString[]指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 <servlet-name> 的取值。dispatcherTypesDispatcherType指定过滤器的转发模式。具体取值包括:
ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。initParamsWebInitParam[]指定一组过滤器初始化参数,等价于 <init-param> 标签。asyncSupportedboolean声明过滤器是否支持异步操作模式,等价于 <async-supported> 标签。descriptionString该过滤器的描述信息,等价于 <description> 标签。displayNameString该过滤器的显示名,通常配合工具使用,等价于 <display-name> 标签。由上文可知,使用@WebFilter相当于配置了web.xml,现在用eclipse自动生成Filter时,默认是提供这个注解的,如下所示
<filter> <filter-name>CountFilter</filter-name> <filter-class>webcase.CountFilter</filter-class> <init-param> <param-name>count</param-name> <param-value>5</param-value> </init-param> </filter> <filter-mapping> <filter-name>CountFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
用FilterConfig的getInitParameter()方法总是获取不了参数count,查了一晚上,才知道问题出在@WebFilter上,下面是baidu来的:
@WebFilter
@WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值 ):
表 3. @WebFilter 的常用属性
ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。initParamsWebInitParam[]指定一组过滤器初始化参数,等价于 <init-param> 标签。asyncSupportedboolean声明过滤器是否支持异步操作模式,等价于 <async-supported> 标签。descriptionString该过滤器的描述信息,等价于 <description> 标签。displayNameString该过滤器的显示名,通常配合工具使用,等价于 <display-name> 标签。
下面是一个简单的示例:
@WebFilter(servletNames = {"SimpleServlet"},filterName="SimpleFilter") public class LessThanSixFilter implements Filter{...}
如此配置之后,就可以不必在 web.xml 中配置相应的 <filter> 和 <filter-mapping> 元素了,容器会在部署时根据指定的属性将该类发布为过滤器。它等价的 web.xml 中的配置形式为:
<filter> <filter-name>SimpleFilter</filter-name> <filter-class>xxx</filter-class> </filter> <filter-mapping> <filter-name>SimpleFilter</filter-name> <servlet-name>SimpleServlet</servlet-name> </filter-mapping>
package webcase;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;/** * Servlet Filter implementation class CountFilter */@WebFilter("/CountFilter")public class CountFilter implements Filter {private int count;private String param;private FilterConfig fConfig; /** * Default constructor. */ /*public CountFilter() { // TODO Auto-generated constructor stub }*//** * @see Filter#destroy() */我们知道,tomcat根据<filter-mapping>的顺序初始化Filter,由于上面的代码包含@WebFilter("/CountFilter"),相当于在web.xml中对同一个过滤器CountFilter设置了两次<filter>和<filter-mapping>,故这个过滤器会初始化两次,故当@WebFilter设置的过滤器被初始化时,String param=getInitParameter("count")得到的字符串为空,调用Integer.parseInt(param)时引发NumberFormatException异常。去掉@WebFilter("/CountFilter")后则一切正常。
0 0
- Servlet3.0新特性@WebFilter与过滤器的初始化
- servlet3.0之过滤器(@WebFilter)
- Servlet3.0新特性,注解配置,@WebServlet,@WebFilter
- servlet3.0部分新特性:@WebServlet、@WebInitParam、@WebFilter、@WebListener、@MultipartConf
- Servlet3.0(二)--使用注解标注过滤器(Filter)@WebFilter
- Servlet3.0的新特性
- servlet3.0的新特性
- servlet3.0新的特性
- servlet3.0 新特性
- servlet3.0新特性
- Servlet3.0新特性
- servlet3.0新特性
- Servlet3.0新特性
- Servlet3.0新特性
- Servlet3.0新特性
- Servlet3.0新特性
- Servlet3.0新特性
- servlet3.0新特性
- 【架构之路之ORM】--FluentNHibernate之基本映射详解
- 在OS X上部署Java web开发环境
- 天气爬虫
- 2014年年终总结以及新的规划
- iOS UIImageView显示网络图片的基础用法
- Servlet3.0新特性@WebFilter与过滤器的初始化
- 如何修改浏览器的默认弹窗
- zookeeper安装部署
- IOS-UITableViewCell的渐变色
- UVa 1585 - Score
- 快感来的太容易,剩下的就是空虚。
- Exercise:Learning color features with Sparse Autoencoders 代码示例
- Smart Tee和infinite Pin Tee Filter区别
- 三维物体OBB碰撞检测算法