作为前端开发人员,精通前端的同时,也需要熟悉后台。下面介绍Web应用中常用的监听器。
1. ServletContextListener监听
ServletContextListener:用于对Servlet整个上下文进行监听(创建、销毁)。在微服务中监听app的启动和停止,可以在应用启动时设置全局参数,创建数据库连接池等。
public class MyServletContextListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("destroyed");
}
@Override
public void contextInitialized(ServletContextEvent event) {
System.out.println("initialized");
event.getServletContext().setAttribute("user", "admin");
}
}
2. HttpSessionListener监听
用户监听客户端会话的创建和销毁。
可以统计在线用户数,设置会话参数等
import javax.servlet.http.HttpSessionListener;
public class SessionCounter implements HttpSessionListener {
private static int activeSessions =0;
/* Session创建事件 */
public void sessionCreated(HttpSessionEvent se) {
ServletContext ctx = event.getSession( ).getServletContext( );
Integer numSessions = (Integer) ctx.getAttribute("numSessions");
if (numSessions == null) {
numSessions = new Integer(1);
}
else {
int count = numSessions.intValue( );
numSessions = new Integer(count + 1);
}
ctx.setAttribute("numSessions", numSessions);
}
/* Session失效事件 */
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext ctx=se.getSession().getServletContext();
Integer numSessions = (Integer)ctx.getAttribute("numSessions");
if(numSessions == null)
numSessions = new Integer(0);
}
else {
int count = numSessions.intValue( );
numSessions = new Integer(count - 1);
}
ctx.setAttribute("numSessions", numSessions);
}
}
3. ServletRequestListener监听
用于监听客户端请求,可以跟踪用户访问轨迹,设置请求参数等。
public class MyServletRequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent arg0) {
System.out.println("requestDestroyed" + "," + new Date());
System.out.println("当前访问次数:" + arg0.getServletContext().getAttribute("count"));
}
@Override
public void requestInitialized(ServletRequestEvent arg0) {
System.out.println("requestInitialized" + "," + new Date());
Object count = arg0.getServletContext().getAttribute("count");
Integer cInteger = 0;
if (count != null) {
cInteger = Integer.valueOf(count.toString());
}
System.out.println("历史访问次数::" + count);
cInteger++;
arg0.getServletContext().setAttribute("count", cInteger);
}
}
以上三类Listener在web.xml中配置。
<listener>
<listener-
class
>demo.listener.MyServletContextListener</listener-
class
>
</listener>
<listener>
<listener-
class
>demo.listener.SessionCounter</listener-
class
>
</listener>
<listener>
<listener-
class
>demo.listener.MyServletRequestListener</listener-
class
>
</listener>
4. Web容器的Listener
由特定的web容器提供,用于监听容器的启动和停止。可以在容器启动时初始化数据库连接池(跨app)。也可以获取容器实力,动态加载APP。以下以Tomcat为例,需要实现LifecycleListerner接口。再讲打开编译成jar包,放在tomcat安装目录下的lib中,并在conf/server.xml文件中配置。
public class MyLifecycleListener implements LifecycleListener{
public void lifecycleEvent(LifecycleEvent event) {
System.out.println("组件类型:"+event.getLifecycle());
System.out.println("生命周期阶段 : "+event.getType());
}
}
}
配置Tomcat/conf/server.xml,
加上一句 <Listener className="com.test.listener.MyListener" />
版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《全栈 | 如何在微服务或Tomcat中配置使用Listener》的版权归原作者「前端自习室」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458
文章来源: 阅读原文
前端自习室微信公众号:webstudyroom
手机扫描上方二维码即可关注前端自习室微信公众号