listener 监听 tomcat 容器的初始化和销毁
为了简单,就写个统计Action 请求数量的例子:
1、首先写个 listener
public class TestServletContextListener implements ServletContextListener
{ @Override
public void contextDestroyed(ServletContextEvent e)
{
System.out.println("--event-- context destoryed..");
e.getServletContext().log("ssseeevvv");
System.out.println(e.getServletContext().getAttribute("count")); // System.out.println(ActionContext.getContext().getApplication().get("count")); //获取不到 ActionContext
} @Override
public void contextInitialized(ServletContextEvent evt)
{
System.out.println("--event-- context initialized..");
ServletContext ctx = evt.getServletContext(); if(null == ctx.getAttribute("count"))
{
22 ctx.setAttribute("count",0); //为了简单起见,我就数数了
//ctx.setAttribute("count", new HashMap<String,Set<String>>());
}
} }
2、在拦截器中获取信息,保存在 ServletContext 的 count 对象里。
public class TestInterceptor extends MethodFilterInterceptor
{
private static final long serialVersionUID = 1L; @Override
protected String doIntercept(ActionInvocation invocation) throws Exception
{
System.out.println("-m- Enter into TestInterceptor...");
countActionRequestNumber(); invocation.invoke(); //一定要有这一句,不然请求走到这个拦截器之后就断了
return null;
} private void countActionRequestNumber()
{
//方式二: Spring 的listener是从ServletContext中获取的 getInitParameter
ServletContext servletContext = ServletActionContext.getServletContext();
String parameter = servletContext.getInitParameter("test"); if(Boolean.valueOf(parameter))
{
int count = (int)servletContext.getAttribute("count");
servletContext.setAttribute("count", ++count);
}
}
}
3、在 web.xml 中注册监听器
<context-param>
<param-name>test</param-name>
<param-value>true</param-value>
</context-param> <listener>
<listener-class>test.listener.TestServletContextListener</listener-class>
</listener>
4、在struts 文件中配置拦截器
<package name="one" extends="struts-default"> <interceptors>
<interceptor name="test" class="test.interceptor.TestInterceptor"></interceptor>
<interceptor-stack name="selfDefaultIntcptorStack">
<interceptor-ref name="test"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors> <default-interceptor-ref name="selfDefaultIntcptorStack"></default-interceptor-ref> <action name="test1" class="test.action.TestAction" method="test1">
</action>
<action name="test2" class="test.action.TestAction" method="test2">
</action> </package>
note: 如果是 eclipse 启动的 tomcat ,最好是使用右键 stopped 停止服务器,而不是直接点击红色按钮强制关闭。
listener 监听 tomcat 容器的初始化和销毁的更多相关文章
- 监听tomcat服务器启动/关闭并从配置文件中读取参数进行初始化
监听tomcat服务器启动/关闭很简单(2步): 1. 建立一个类实现ServletContextListener接口,重写其中的方法(contextDestroyed和contextInitiali ...
- 监听Web容器启动与关闭
在Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期. 要监听web ...
- javaWeb学习之Listener监听
] 一.监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规范包括三个技术点:servlet listener filt ...
- java多个listener监听
java 多个listener 监听方法 在class 名称上一行添加@Listeners 括号中用逗号隔开 @Listeners({com.example.MyListener.class,com. ...
- Listener 监听Session内的对象
Listener用于监控Session内的对象,分别是HttpSessionBindingListener与HttpSessionActivationListener.它们的触发时机分别为: Http ...
- ServletContextListener使用详解(监听Tomcat启动、关闭)
在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期. 当Serv ...
- Listener 监听对象的创建和销毁
HttpSessionListener.ServletContextListener.ServletRequestListener分别用于控制Session.context.request的创建和销毁 ...
- Android Listener 监听的几种写法
Android中,View的Listener方法,在是否使用匿名类匿名对象时,有各种不同的写法. OnClickListener和其他Listener方法一样,都是View类的接口,重载实现后就能使用 ...
- 怎样绕过oracle listener 监听的password设置
怎样绕过oracle 监听的password设置: 1.找到监听进程pid ,并将它kill 掉 ps -ef|grep tns [oracle@lixora admin]$ ps -ef|gr ...
随机推荐
- __x__(40)0909第五天__表格 table 的 css 样式 美化
如果就向下面的代码那样,不写 tbody , 则浏览器自添加 tbody , 并将所有的 tr 移入 tbody 意味着 tr 并非 table 的子元素,而是 tbody 的子元素. 所以 以后编写 ...
- vue_源码 原理 剖析
相关基础知识点 // 可以让 任意函数/方法 成功临时指定成对象的方法进行调用 - call/apply // 1. 根据伪数组生成 真数组 const lis = document.getEleme ...
- vue-router 之 keep-alive
参考 https://www.jianshu.com/p/0b0222954483
- Java课程课后作业190309之连续最大子数组
老师在课堂是提出了这个问题,并且提出了时间复杂度是O(n)的要求,一开始我自己思想简单,在逻辑上出现了十分粗心的错误,后来同学们也在课堂上比较激烈地讨论了一番,也只是将时间复杂度降到了O(n*n),在 ...
- Linux命令行抓包及包解析工具tshark(wireshark)使用实例解析
在Linux下,当我们需要抓取网络数据包分析时,通常是使用tcpdump抓取网络raw数据包存到一个文件,然后下载到本地使用wireshark界面网络分析工具进行网络包分析. 最近才发现,原来wire ...
- word/pdf互转的链接
参考链接 http://www.greenxf.com/soft/98467.html
- python pymsql的用法 180903
一.1.pymysql 的下载pip3 install pymysql2.pymysql的使用import pymysqlname=input("请输入用户名:")password ...
- Java演算法-「雞兔同籠問題」
/** * 雞兔同籠問題:窮舉算法思想 */ import java.util.*; public class ChichenAndHabbit { static int chichenNum,hab ...
- Python全栈-magedu-2018-笔记4
第三章 - Python 内置数据结构 元组tuple 一个有序的元素组成的集合 使用小括号 ( ) 表示 元组是不可变对象 元组的定义 初始化 定义 tuple() -> empty tupl ...
- 关于JDBC的批量操作executeBatch()所引发sql语句异常
java.sql.BatchUpdateException: You have an error in your SQL syntax; check the manual that correspon ...