为了简单,就写个统计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 容器的初始化和销毁的更多相关文章

  1. 监听tomcat服务器启动/关闭并从配置文件中读取参数进行初始化

    监听tomcat服务器启动/关闭很简单(2步): 1. 建立一个类实现ServletContextListener接口,重写其中的方法(contextDestroyed和contextInitiali ...

  2. 监听Web容器启动与关闭

    在Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期. 要监听web ...

  3. javaWeb学习之Listener监听

    ] 一.监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规范包括三个技术点:servlet  listener  filt ...

  4. java多个listener监听

    java 多个listener 监听方法 在class 名称上一行添加@Listeners 括号中用逗号隔开 @Listeners({com.example.MyListener.class,com. ...

  5. Listener 监听Session内的对象

    Listener用于监控Session内的对象,分别是HttpSessionBindingListener与HttpSessionActivationListener.它们的触发时机分别为: Http ...

  6. ServletContextListener使用详解(监听Tomcat启动、关闭)

    在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期. 当Serv ...

  7. Listener 监听对象的创建和销毁

    HttpSessionListener.ServletContextListener.ServletRequestListener分别用于控制Session.context.request的创建和销毁 ...

  8. Android Listener 监听的几种写法

    Android中,View的Listener方法,在是否使用匿名类匿名对象时,有各种不同的写法. OnClickListener和其他Listener方法一样,都是View类的接口,重载实现后就能使用 ...

  9. 怎样绕过oracle listener 监听的password设置

     怎样绕过oracle 监听的password设置: 1.找到监听进程pid ,并将它kill 掉 ps -ef|grep tns [oracle@lixora admin]$ ps -ef|gr ...

随机推荐

  1. Java菜鸟浅谈OCR

    什么是OCR? 粗暴点说就是图片文本识别!正规点的说法就是:(Optical Character Recognition,光学电子识别) 最近公司开展新项目,考虑到实名认证这方面,然后还要上传身份证正 ...

  2. Nested Dolls 贪心 + dp

    G: Nested Dolls Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 99     Solved: 19 Descript ...

  3. 搜素题 --java

    Poj2531 首先把所有节点都放在一组,然后采用深度优先搜索的方法,对每一个节点都做判断是否应该移到另一组去,判断的依据是移过去和不移过去哪个得到的和值比较大(这里移去B组后的计算方法就是加上该点和 ...

  4. vue2 里边使用 swiper2

    找过了很多轮播图插件,我都不会用,还是回到swiper2吧... npm install swiper@2.7.6 --save-dev 封装成一个组件 <template> <di ...

  5. 51nod 1387 移数字

    任意门 回来拉模版的时候意外发现这个题还没写题解,所以就随便补点吧. 题意其实就是要你求n的阶乘在模意义下的值. 首先找出来一个最大的$m$满足$m^2<=n$,对于大于$m^2$部分的数我们直 ...

  6. Java课程寒假之《人月神话》有感之三

    一.未雨绸缪 作者开始谈论实验室代码如何向开发出来的产品转变,化学工程师通过“实验性工厂”的中间步骤做测试来得到经验.而软件系统的构建人员却是按照时间进度将第一次开发的产品发布给顾客.对于我这只没有实 ...

  7. Spring-day02

    Annotation复习:1,Annotation:作为类型的元数据; 1,给类型加标记; 2,annotation可以添加各种类型的属性;2,Annotation的上的标记: 1),target:标 ...

  8. 为什么不能用 JS 获取剪贴板上的内容?

    为什么不能用 JS 获取剪贴板上的内容? 为什么不能用 JS 获取剪贴板上的内容? 发一串口令给朋友朋友复制这串口令,然后访问你的网站你在网站上用 JS 读取朋友剪贴板上的口令根据不同的口令,显示不同 ...

  9. Android的ViewPager的学习

    这篇博客是对慕课网上看到的视频里学习到的知识的一些记录,让自己能够加深理解.视频地址:http://www.imooc.com/learn/1116 在这个视频中,目标是实现类似微信的主界面之间的切换 ...

  10. linux基础命令--groupmod 修改组定义

    描述 groupmod命令用于修改系统上的组定义. groupmod命令通过更改组数据库(the group database)里的相关条目来修改指定的组. 语法 groupmod [选项] GROU ...