J2EE监听器和过滤器基础
Servlet程序由Servlet,Filter和Listener组成,其中监听器用来监听Servlet容器上下文。
监听器通常分三类:基于Servlet上下文的ServletContex监听,基于会话的HttpSession监听和基于请求的ServletRequest监听。
- ServletContex监听器
/**
* Application监听器,Servlet中的Application即ServletContext
* @author Administrator
*/
public class ApplicationListener implements ServletContextListener,
ServletContextAttributeListener { /**
* application销毁时触发的事件
*/
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("Application销毁:"+arg0.getServletContext());
} /**
* application初始化时触发的方法
*/
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("Application创建:"+arg0.getServletContext());
} /**
* application中添加属性值时触发的方法
*/
@Override
public void attributeAdded(ServletContextAttributeEvent arg0) {
System.out.println("Application添加新属性:key="+arg0.getName()+" value="+arg0.getValue());
} /**
* application中删除属性值时触发的方法
*/
@Override
public void attributeRemoved(ServletContextAttributeEvent arg0) {
System.out.println("Application移除属性:key="+arg0.getName()+" value="+arg0.getValue());
} /**
* application中替换属性值时触发的方法
*/
@Override
public void attributeReplaced(ServletContextAttributeEvent arg0) {
System.out.println("Application替换属性:key="+arg0.getName()+" value="+arg0.getValue());
} }
最后在web.xml需要注册监听器,注册方式非常简单,注意标签<description>和<display-name>不是必须的:
<listener>
<description>application listener</description>
<display-name>application_listener</display-name>
<listener-class>com.bless.listener.application.ApplicationListener</listener-class>
</listener>
随后启动java web项目,监听器就会运行。
- Session监听器
/**
* Session监听器
* @author Administrator
*/
public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener { Vector<HttpSession> listSession = null; /**
* 创建Session调用的方法
* 将session对象放入listSession集合中
*/
public void sessionCreated(HttpSessionEvent arg0) {
synchronized (this) {
if(listSession == null){
listSession = new Vector<HttpSession>();
}
}
listSession.add(arg0.getSession());
System.out.println("\n\n创建一个Session:"+arg0.getSession());
System.out.println("[当前存在的Session:]");
for (HttpSession session : listSession) {
System.out.println("--->"+session);
}
} /**
* 销毁Session调用的方法
* 移除listSession集合对应session值
*/
public void sessionDestroyed(HttpSessionEvent arg0) {
listSession.remove(arg0.getSession());
System.out.println("\n\n销毁一个Session:"+arg0.getSession());
System.out.println("[当前存在的Session:]");
for (HttpSession session : listSession) {
System.out.println("--->"+session);
}
} /**
* session属性添加时调用的方法
*/
public void attributeAdded(HttpSessionBindingEvent arg0) {
System.out.println("\n\n添加一条Session-->key:"+arg0.getName()+" 属性value:"+arg0.getValue());
} /**
* session属性替代时调用的方法
*/
public void attributeReplaced(HttpSessionBindingEvent arg0) {
System.out.println("\n\n覆盖一条Session-->key:"+arg0.getName()+" 属性value:"+arg0.getValue());
} /**
* session属性移除时调用的方法
*/
public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.out.println("\n\n删除一条Session-->key:"+arg0.getName()+" 属性value:"+arg0.getValue());
}
}
在web.xml中定义相应监听器配置:
<listener>
<listener-class>com.bless.listener.session.SessionListener</listener-class>
</listener>
<!-- Session超时配置 -->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
- Request监听器
/**
* Request事件监听器
* @author Administrator
*/
public class RequestListener implements ServletRequestListener,
ServletRequestAttributeListener { @Override
public void requestDestroyed(ServletRequestEvent arg0) {
System.out.println("request销毁:"+arg0.getServletRequest());
} @Override
public void requestInitialized(ServletRequestEvent arg0) {
System.out.println("request创建:"+arg0.getServletRequest());
} @Override
public void attributeAdded(ServletRequestAttributeEvent arg0) {
System.out.println("request属性添加 key="+arg0.getName()+" value="+arg0.getValue());
} @Override
public void attributeRemoved(ServletRequestAttributeEvent arg0) {
System.out.println("request属性删除 key="+arg0.getName()+" value="+arg0.getValue());
} @Override
public void attributeReplaced(ServletRequestAttributeEvent arg0) {
System.out.println("request属性替换 key="+arg0.getName()+" value="+arg0.getValue());
} }
web.xml配置:
<listener>
<listener-class>com.bless.listener.request.RequestListener</listener-class>
</listener>
- Filter过滤器
/**
*
* @author : bless<505629625@qq.com>
* Create Time : 2011-5-10下午10:38:19
* Description : 字符集格式过滤器
*
*/
public class EncodingFilter implements Filter {
//默认编码格式UTF-8
private static final String DEFAULT_ENCODE = "UTF-8"; private String encodeName; // 编码格式 public void destroy() { } /**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
if (encodeName == null || "".equals(encodeName.trim())) {
request.setCharacterEncoding(DEFAULT_ENCODE);
response.setCharacterEncoding(DEFAULT_ENCODE);
} else {
request.setCharacterEncoding(encodeName);
}
} catch (UnsupportedEncodingException e) {
throw new UnsupportedEncodingException("编码格式过滤错误,请确认web.xml填入了正确的编码格式");
}
chain.doFilter(request, response);
} /**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
//获取web.xml配置的<param-name>encodeName</param-name>的值
this.setEncodeName(fConfig.getInitParameter("encodeName"));
} public String getEncodeName() {
return encodeName;
} public void setEncodeName(String encodeName) {
this.encodeName = encodeName;
} }
然后在web.xml中定义filter即可,标签init-param可以做一个参数配置,在filter中通过init方法参数FilterConfig.getInitParameter获得:
<filter>
<filter-name>encoding</filter-name>
<filter-class>com.mt.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encodeName</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
转自:http://blessht.iteye.com/blog/1164492
http://www.iteye.com/topic/483158
http://chinaxxren.iteye.com/blog/811604
http://blog.csdn.net/fyxxq/article/details/9731747
http://ooft.iteye.com/blog/551498
http://www.iteye.com/topic/82565
J2EE监听器和过滤器基础的更多相关文章
- Servlet初始配置 监听器和过滤器
ServletContext:application范围内的参数 此所设定的参 来源: http://note.sdo.com/my 数,在JSP网页中可以使用下列方法来取得: ${initParam ...
- Django基础(2)--模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介
没整理完 昨日回顾: 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 ...
- Django 模板 语法 变量 过滤器 模板继承 组件 自定义标签和过滤器 静态文件相关
本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关于模板渲染你只需要记两种特殊符号(语法 ...
- 面试题:struts 拦截器和过滤器
拦截器和过滤器的区别 过滤器是servlet规范中的一部分,任何java web工程都可以使用. 拦截器是struts2框架自己的,只有使用了struts2框架的工程才能用. 过滤器在url-patt ...
- Spring Boot2(七):拦截器和过滤器
一.前言 过滤器和拦截器两者都具有AOP的切面思想,关于aop切面,可以看上一篇文章.过滤器filter和拦截器interceptor都属于面向切面编程的具体实现. 二.过滤器 过滤器工作原理 从上图 ...
- Oracle Sales Cloud:报告和分析(BIEE)小细节2——利用变量和过滤器传参(例如,根据提示展示不同部门的数据)
在上一篇随笔中,我们建立了部门和子部门的双提示,并将部门和子部门做了关联.那么,本篇随笔我们重点介绍利用建好的双提示进行传参. 在操作之前,我们来看一个报告和分析的具体需求: [1] 两个有关联的提示 ...
- ElasticSearch 嵌套映射和过滤器及查询
ElasticSearch - 嵌套映射和过滤器 Because nested objects are indexed as separate hidden documents, we can’t q ...
- django中自定义标签和过滤器
想要实现自定义标签和过滤器需要进行准备工作: 准备(必需)工作: 1 在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为polls的app下创建了一个tem ...
- angular实例教程(用来熟悉指令和过滤器的编写)
angular的插件太少了, 所以很多指令和过滤器都要自己写, 所以对指令传进来的参数, 以及angular编译的流程更加熟悉才行写出好的插件, 有些简单的指令是参考angularUI里面, 作为 ...
随机推荐
- 【HeadFirst 设计模式总结】2 观察者模式
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.我们需要理解报社.订阅系统和订报人之间的关系,订报人通过订阅系统订报,一旦报社有新的报纸,订阅系统就会派人送 ...
- NET基础课--代码安全
1.sqlinjection
- resolv.conf 是什么
From Wikipedia, the free encyclopedia This article does not cite any references or sources. Please h ...
- 代码初始化 故事板初始化 xib初始化总结
对象的初始化有三种方式 // 代码创建 - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { ...
- 测试工具:insure++
CSDN资源:http://www.csdn.net/tag/insure%252B%252B 安装. 1,简介:http://baike.baidu.com/link?url=bCcoWd3xi07 ...
- linux修改rm指令执行(数据安全)
引用文章A:http://hi.baidu.com/jlusuoya/item/32ae398958088755840fabfb 引用介绍:将rm替换为mv. 引用文章B:http://blog.cs ...
- Shader的使用
一.LinearGradient 步骤:①.创建LinearGradient 步骤 ②.将其加入到Paint 步骤一: 构造LinearGradient的参数 public LinearGrad ...
- mini-httpd源码分析-mini-httpd.c
main函数分析: 一,参数设置: 读取命令行参数 配置文件参数 读取参数,设置对应的全局变量.主要参数有:配置文件:资源目录:进程ID文件:日志文件:字符集:主机名及端口号... 二,参数处理:重点 ...
- Div+Css(一)必备知识
我只积累我不知道的 参考链接 http://www.kwstu.com/ArticleView/divcss_201442291125960 http://www.kwstu.com/ArticleV ...
- RESTful API实现
RESTful API实现 ASP.NET Core Web API 开发-RESTful API实现 REST 介绍: 符合REST设计风格的Web API称为RESTful API. 具象状态传输 ...