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 ...
随机推荐
- es6学习笔记-Symbol
概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突.比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突.如果有一种机制 ...
- BOM 浏览器对象模型_同源限制
“同源政策”(same-origin policy) 浏览器安全的基石 协议相同 域名相同 端口相同 1995年,同源政策由 Netscape 公司引入浏览器.目前,所有浏览器都实行这个政策 A 网页 ...
- java jdbc操作数据库通用代码
1.准备工作 1> 新建一个配置文件,名为jdbc.properties将其放入src中 2>在项目中导入jdbc驱动,注意连接不同的数据库,所用到的驱动是不一样的,这些在网上都能找到 具 ...
- laravel5.5+vue+Element-ui+vux环境搭建(webpack+laravelMix)(转)
本教程例子可到GitHub 上下载 Laravel5.5-Vue-Element-ui-Vux 1.laravel5.5安装,详情请参考: https://laravelacademy.org/pos ...
- vue发送请求---fetch-jsonp
fetch-jsonp和axios类似,都是第三方插件返送请求,而vue-resource是vue官方提供的请求插件 前两个哪个组件使用就在那里引入,vue-resource直接在vue的main.j ...
- php 一行代码解决二维数组去重
array_unique($array, SORT_REGULAR);
- AVL树的Java实现
AVL树:平衡的二叉搜索树,其子树也是AVL树. 以下是我实现AVL树的源码(使用了泛型): import java.util.Comparator; public class AVLTree< ...
- VUE错误码Attribute ':sizeOpts' must be hyphenated
Attribute ':sizeOpts' must be hyphenated 因为属性有大写,需要添加 - 来取代 例如 tampData 换成 tamp-data 就可以了
- VUE-011-通过 v-if 和 v-for 实现特定值的列表循环匹配,并显示满足匹配条件的值
前端页面开发过程中,经常遇到服务端返回的数据中,存在一些需要转义的表单项.比如,员工信息中的学历,假设研究生学历的代码是101(或10001),则数据库中对应字段存放的是 101(或10001),而非 ...
- VUE-001-在表格单元格(el-table-column)中添加超链接访问
在进行前端网页开发时,通常列表数据我们使用table展示.那么如何在 el-table-column 单元格中使用超链接呢? 如下即是解决方式的一种: 仅需要将如下代码: <el-table-c ...