>>分享Java Web开发技术,并且对孙卫琴的《Tomcat与Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 23445 个阅读者 刷新本主题
 * 贴子主题:  用@WebFilter配置过滤器 回复文章 点赞(0)  收藏  
作者:Jacky    发表时间:2018-10-08 23:06:16     消息  查看  搜索  好友  邮件  复制  引用

今天用eclipse写过滤器时要实现一个在init(FilterConfig fConfig)方法中设置初始访问量的功能,以前也写过,但今天怎么也运行不了,总产生NumberFormatException异常,web.xml配置如下  
<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上。



@WebFilter

@WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值 ):

表 3. @WebFilter 的常用属性

属性名            类型        描述
filterName        String      指定过滤器的 name 属性,等价于 <filter-name>
value             String[]    该属性等价于 urlPatterns 属性。但是两者不应该同时使用。
urlPatterns       String[]    指定一组过滤器的 URL 匹配模式。等价于 <url-pattern> 标签。
servletNames      String[]    指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,
                              或者是 web.xml 中 <servlet-name> 的取值。

dispatcherTypes   DispatcherType  指定过滤器的转发模式。具体取值包括:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。
initParams        WebInitParam[]  指定一组过滤器初始化参数,等价于 <init-param> 标签。
asyncSupported    boolean         声明过滤器是否支持异步操作模式,等价于 <async-supported> 标签。
description       String      该过滤器的描述信息,等价于 <description> 标签。
displayName       String      该过滤器的显示名,通常配合工具使用,等价于 <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>

由上文可知,使用@WebFilter相当于配置了web.xml,现在用eclipse自动生成Filter时,默认是提供这个注解的,如下所示

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 {...... }
  Java面向对象编程-->输入与输出(下)
  JavaWeb开发-->访问数据库(Ⅱ)
  JSP与Hibernate开发-->映射组成关系
  Java网络编程-->创建非阻塞的HTTP服务器
  精通Spring-->计算属性和数据监听
  Vue3开发-->Vue Router路由管理器
  http状态码大全100-599状态详解
  JSP 发送邮件
  JSP 动作元素
  Servlet的运作原理
  java生成图片验证码--封装生成图片验证码的工具类
  HTTP请求中的HEAD请求方式的作用
  Tomcat中对静态资源的处理
  解决HttpServletRequest的输入流只能读取一次的问题
  《Tomcat与Java Web》新版即将出炉,业界大咖们力荐
  通过URLConnection类访问网上URL资源
  web.xml文件中jsp-config元素的用法
  Servlet的高级运用技巧:备注、模块化、异步处理、优化文件上...
  Tomcat的各个版本比较
  理解JavaWeb应用中的绝对URI和相对URI
  用Maven部署war包到远程Tomcat服务器
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。