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里面, 作为 ...
随机推荐
- gcc和arm-linux-gcc区别
安装arm-linux-gcc的时候,查了不少资料,总算环境搭好了.于是,想写个程序员的经典程序---hello world. 语法都没错,生成test.c. 命令行运行:arm-linux-gcc ...
- 【HeadFirst 设计模式总结】2 观察者模式
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.我们需要理解报社.订阅系统和订报人之间的关系,订报人通过订阅系统订报,一旦报社有新的报纸,订阅系统就会派人送 ...
- NPOI兼容 excel2003,2007版本
根据项目需要,需要对excel进行导入导出,所以选择NPOI,优点在这里就不详细介绍了,下面进入正题. public int Import(string path) { IList<Studen ...
- nodejs 计算内存使用率
//计算内存使用率 function calcMem(){ let mem_total = os.totalmem(), mem_free = os.freemem(), mem_used = mem ...
- <runtime> 的 <assemblyIdentity> 元素和<bindingRedirect> 元素
1.<assemblyIdentity> 元素 包含关于该程序集的标识信息. <assemblyIdentity name="assembly name" pub ...
- 下拉菜单中的Option对象
1.创建Option对象 1.1 var optionEle1 = document.createElement('option'); 1.2 var optionEle2 = new Option( ...
- HDU 5728 - PowMod
HDU 5728 - PowMod 题意: 定义: k = ∑(i=1,m) φ(i∗n) mod 1000000007 给出: n,m,p ,且 n 无平方因子 求: ans= k^(k^(k ...
- activity的生命周期详解
刚在看mars老师的视频,看到activity的生命周期,就看了一下,总结了一下.下面是各函数的调用时机 为了更清楚的看清楚工作的具体过程,举例如下: ,建立两个activity,一个main,一个a ...
- SQL Server中in与exist效率比较
in和exists in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询. 一直以来认为exists比in效率高的说法是不准确的. 如果查询的两 ...
- 寒冰王座(hd1248)
寒冰王座 Problem Description 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,只有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店 ...