web.xml中listener的作用及使用

一.WebContextLoaderListener  监听类
  它能捕捉到服务器的启动和停止,在启动和停止触发里面的方法做相应的操作!
  它必须在web.xml 中配置才能使用,是配置监听类的

二.下面是搜集的一些listener方面的知识 
简例一 
监听用户上线与退出,显示在线用户 

1、登陆页面 Login.jsp 

<%@page pageEncoding="gb2312" contentType="text/html; charset=gb2312" %> 
<% 
session=request.getSession(false); 
if(session!=null)session.invalidate(); 
%> 
<html> 
<head><title></title></head> 
<body> 
<form action="isOnline.jsp" method="post"> 
用户名:<input type="text" name="uName"/> 
<input type="submit" value="上线"> 
</form> 
</body> 
</html> 

2、控制页面(只是为了说明监听器问题,所以简单了点...) isOnline.jsp 

<%@page pageEncoding="gb2312" contentType="text/html; charset=gb2312" %> 
<html> 
<head><title></title></head> 
<body> 
<% 
session=request.getSession(); 
session.setAttribute("userName",request.getParameter("uName")); 
response.sendRedirect("showOnline.jsp"); 
%> 
</body> 
</html> 


3、显示页面 showOnline.jsp 

<%@page pageEncoding="gb2312" contentType="text/html; charset=gb2312" import="java.util.ArrayList" %> 
<html> 
<head><title></title></head> 
<body> 
<% 
ArrayList showList=(ArrayList)(getServletContext().getAttribute("list")); 
out.print("在线人数 "+showList.size()+"<br>"); 
for(int i=0;i<showList.size();i++){ 
out.print(showList.get(i)+"在线"+"<br>"); 

%> 
<br> 
<a href="Login.jsp">退出</a> 
</body> 
</html> 

4、配置页面 web.xml 

<?xml version="1.0" encoding="gb2312"?> 
<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 
<listener> 
    <listener-class>org.xiosu.listener.onlineListener</listener-class> 
</listener> 
</web-app> 

5、监听器 onlineListener.java 

package org.xiosu.listener; 

import java.util.ArrayList; 
import javax.servlet.ServletContext; 
import javax.servlet.http.HttpSessionAttributeListener; 
import javax.servlet.http.HttpSessionBindingEvent; 
import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 

public class onlineListener implements HttpSessionListener, 
  HttpSessionAttributeListener { 
// 参数 
ServletContext sc; 
ArrayList list = new ArrayList(); 
// 新建一个session时触发此操作 
public void sessionCreated(HttpSessionEvent se) { 
  sc=se.getSession().getServletContext(); 
  System.out.println("新建一个session"); 

// 销毁一个session时触发此操作 
public void sessionDestroyed(HttpSessionEvent se) { 
  System.out.println("销毁一个session"); 
  if (!list.isEmpty()) { 
   list.remove((String) se.getSession().getAttribute("userName")); 
   sc.setAttribute("list", list); 
  } 

// 在session中添加对象时触发此操作,在list中添加一个对象 
public void attributeAdded(HttpSessionBindingEvent sbe) { 
  list.add((String) sbe.getValue()); 
  sc.setAttribute("list", list); 

// 修改、删除session中添加对象时触发此操作 
public void attributeRemoved(HttpSessionBindingEvent arg0) { 

public void attributeReplaced(HttpSessionBindingEvent arg0) { 




说明:本例只为简单介绍监听器,并未进行安全方面设置。 

监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent   se)方法,这样 
就可以给在线人数加1。常用的监听接口有以下几个: 
ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改属性。 
ServletContextListener监听ServletContext。当创建ServletContext时,激发contextInitialized(ServletContextEvent   sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent   sce)方法。 
HttpSessionListener监听HttpSession的操作。当创建一个Session时,激发session   Created(HttpSessionEvent   se)方法;当销毁一个Session时,激发sessionDestroyed   (HttpSessionEvent   se)方法。 
HttpSessionAttributeListener监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent   se)   方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent   se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent   se)   方法。 
example:随服务器启动 
web-app> 

      com.tb.listener.CountStartListener 


package com.tb.listener; 
import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 
import javax.servlet.http.HttpServlet; 
import com.tb.timertask.DoCountTask; 
public class CountStartListener extends HttpServlet implements ServletContextListener 

private static final long serialVersionUID = 1824920962239905170L; 
public CountStartListener() 

   // TODO Auto-generated constructor stub 

public void contextDestroyed(ServletContextEvent arg0) 

   // TODO Auto-generated method stub 

   public void contextInitialized(ServletContextEvent arg0) 
{    
   DoCountTask.dotask(); 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值