Web 过滤器参数设置问题
问题描述:
在代码定义了3个过滤器,分别为filter1,filter2,filter3,过滤的Servlet范围分别是"/*","/Servlet1","/Servlet1",只在filter3种配置了初始化参数 预设结果为:
filter1...进...
filter2...进...
filter3...进...
com.roxy_filter.Filter3
hello
filter3...出...
filter2...出...
filter1...出...
运行结果却是:
filter1...进...
filter2...进...
filter2...出...
filter1...出...
问题代码:
@WebFilter(filterName="filter3", servletNames="/Servlet1",
initParams={
@WebInitParam(name="ok", value="hello")
}
)
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("filter3...进...");
System.out.println(Thread.currentThread().getStackTrace()[1].getClassName());
String v = fConfig.getInitParameter("ok");
System.out.println(v);
chain.doFilter(request, response);
System.out.println("filter3...出...");
}
问题分析:
首先将filter3的@WebFilter声明改为和filter2一致,输出正常,说明doFilter()方法没有问题 仔细查看文档,发现有两个参数:
servletNames String[]:指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 <servlet-name> 的取值
urlPatterns :指定要过滤的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性)
所以将servletNames="/Servlet1"改为urlPatterns ="/Servlet1",表明只对Servlet1进行过滤,运行,结果正确
问题解决:
@WebFilter(filterName="filter3", urlPattens="/Servlet1",
initParams={
@WebInitParam(name="ok", value="hello")
}
)
问题总结:
web3.0 之后,对于servlet,filter,listener有两种配置方式,一种是在web.xml种进行传统的配置,另一种是直接在类种进行注解式声明 @WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值 )
| 属性名 | 类型 | 描述 |
| 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> 标签 |
Web 过滤器参数设置问题的更多相关文章
- maven web项目配置log4j,及log4j参数设置
本文为博主原创,转载须注明转载地址: 1.在maven项目中引入相关的依赖: 需要依赖的jar为: <!-- 配置日志 --> <dependency> <groupId ...
- Asp.Net中的获取Web.config中设置的参数!(前后台的代码示例)
一.Web.config中设置代码 <appSettings> <add key="deleted" value="1" ...
- 使用MEF实现通用参数设置
通用后台管理系统必备功能模块包含日志管理,权限管理,数据字典,参数配置等功能.参数设置主要用于设置系统运行所需的一些基础性配置项,比如redis缓存,mq消息队列,系统版本等信息.好的参数设置需要达到 ...
- 细说 Web API参数绑定和模型绑定
今天跟大家分享下在Asp.NET Web API中Controller是如何解析从客户端传递过来的数据,然后赋值给Controller的参数的,也就是参数绑定和模型绑定. Web API参数绑定就是简 ...
- C3p0的参数设置
C3p0的参数设置:ComboPooledDataSource和BasicDataSource一样提供了一个用于关闭数据源的close()方法,这样我们就可以保证Spring容器关闭时数据源能够成功释 ...
- jvm参数设置大全
转自:http://blog.csdn.net/kthq/article/details/8618052 参数说明 -Xmx3550m:设置JVM最大堆内存为3550M. -Xms3550m:设置JV ...
- Parameter Binding in ASP.NET Web API(参数绑定)
Parameter Binding in ASP.NET Web API(参数绑定) 导航 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnbl ...
- tomcat端口修改以及jvm启动参数设置
1.端口更改:找到config目录下server.xml文件 如下 <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to t ...
- weblogic基本目录介绍,位数查看,启动与发布项目,修改JVM参数,设置项目为默认项目
这里的基本目录%base%表示安装目录,如我的目录为:E:/weblogic就是%base% 1.weblogic目录介绍 weblogic主要的目录介绍: 1.日志目录: 每个domain(域)都有 ...
随机推荐
- FDMemTable.Delta 转SQL语句脚本
{*******************************************************} { } { XE7.XE8.XE10 安卓 IOS 框架 } { } { 版权所有 ...
- 用js取1-100的随机数
function sum (m,n){ var num = Math.floor(Math.random()*(m - n) + n); alert(num) } sum(1,100): 万能 公式, ...
- QT 5.4.1 for Android Ubuntu QtWebView Demo
QT 5.4.1 for Android Ubuntu QtWebView Demo 2015-5-15 目录 一.说明: 二.参考文章: 三.QtWebView Demo在哪里? 四.Qt Crea ...
- poj-1112 (二分图染色+dp分组)
#include <iostream> #include <algorithm> #include <cstring> using namespace std; ; ...
- BZOJ3230: 相似子串【后缀数组】
Description Input 输入第1行,包含3个整数N,Q.Q代表询问组数. 第2行是字符串S. 接下来Q行,每行两个整数i和j.(1≤i≤j). Output 输出共Q行,每行一个数表示每组 ...
- test20181016 B君的第一题
题意 分析 考场爆零做法 考虑位数少的一定更小,高位小的一定更少. 然后计算一定位数下不同数字的个数,然后从高到低依次确定数位. 特例:如果确定的高位的后缀出现了x,那么要把x调整到后缀去,这样一定更 ...
- SharePoint2010 安装时报“未能启动数据库服务 MSSQL$Sharepoint"解决办法
对于已经安装sql server 的情况 今天装SharePointFoundation遇到“未能启动数据库服务 MSSQL$Sharepoint”搜了下有如下解决办法 “HKLM_Local_Mac ...
- SQL Server中如何实现遍历表的记录
SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录. 但游标在实际的开发中都不推荐使用. 我们知道还可以借助临时表或表变 ...
- Android 第三方分享中遇到的问题以及解决方式
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/liuxian13183/article/details/36189343 ...
- selenium(一)--selenium 家族
2015-12-16 23:17:04 QTP mercury 是商业的,单词意思是水银,而selenium 是开源的,单词意思是硒,有些相对的意思. 1.selenium ide selenium ...