[code]
监听器
命名:
都是Listener所以以Listener结尾
如果只对生命周期监听: XXListener:如ServletContextListener,HttpSessionListener
如果要对属性监听: XXAttributeListener:
是针对于整个Web环境的监听
主要有以下三类:
1。ServletContext:对整个应用监听
2。Session:对Session监听
3。Request监听
1。对ServletContext监听
在Web端实现监听 = 实现一系列的监听接口
1.ServletContextListener:对整个Servlet上下文监听(启动,销毁)
public void contextInitialized(ServletContextEvent sce);上下文初始化
public void contextDestroyed(ServletContextEvent sce);//上下文销毁
ServletContextEvent事件类:
public ServletContext getServletContext(); //得到application对象
2 . -----只有getServletContext().setAttribute("aa","bb");这样的东西才起作用
ServletContextAttributeListener: 对Servlet上下文属性的监听
public void attributeAdded(ServletContextAttributeEvent scab); 增加属性
public void attributeRemoved(ServletContextAttributeEvent scab);
public void attributeReplaced(ServletContextAttributeEvent acab);
ServletContextAttributeEvent 属性事件类:
public String getName(); //得到属性名称
public Object getValue(); //得到属性的值
因为Listener与连接无关,所以他只要配置一个
<listener>
<listener-class>cn.mldn.listener.ServeletContextDemo</listener-class>
</listener>
public class ServletContextDemo
implements ServletContextListener,ServletContextAttributeListener
{
private ServletContext application = null ;
// 实现方法
public void contextInitialized(ServletContextEvent sce)
{
this.application = sce.getServletContext() ;
System.out.println("** 上下文初始化 ...") ;
System.out.println("** 当前虚拟目录的绝对路径:"+this.application.getRealPath("/")) ;
}
public void contextDestroyed(ServletContextEvent sce)
{
System.out.println("** 上下文销毁 ...") ;
}
public void attributeAdded(ServletContextAttributeEvent scab)
{
System.out.println("** 增加属性:"+scab.getName()+" --> "+scab.getValue()) ;
}
public void attributeRemoved(ServletContextAttributeEvent scab)
{
System.out.println("** 删除属性:"+scab.getName()+" --> "+scab.getValue()) ;
}
public void attributeReplaced(ServletContextAttributeEvent scab)
{
System.out.println("** 替换属性:"+scab.getName()+" --> "+scab.getValue()) ;
}
};
上下文监听主要是正对容器的:初始化,销毁,属性操作
二:Session监听
对Session的创建,销毁,属性操作
1. HttpSessionListener:对session整体状况的监听
public void sessionCreated(HttpSessionEvent e);
public void sessionDestroyed(HttpSessionEvent e);
HttpSessionEvent事件:
public HttpSession getSession();取得当前操作的session
2.HttpSessionAttributeListener:对session属性的监听
public void attributeAdded(HttpSessionBindingEvent se); //属性增加
public void attributeRemoved(HttpSessionBindingEvent se);
public void attributeReplaced(HttpSessionBIndingEvent se)
HttpSessionBindingEvent事件:
public String getName();
public String getValue();
public HttpSession getSession();
Session如何销毁
1。session超时
需要在web.xml中进行配置
<session-config>
<session-timeout>1</session-timeout> //代表一分钟失效
</session-config>
2。手工使session失效
invalidate();
案例:
统计当前在线人员(在线人员列表)
实现那几个接口?
1.在线人员列表时对所有人都起作用,所有的数据必须保持在application之中,意味着在OnlineDemo中
必须有一个ServletContext对象
2。是针对于session的变化进行操作的
如果登录成功,则将用户名保存在session之中
3。如果用户注销,则需要对相应的用户名称删除
public class OnLineDemo
implements ServletContextListener,HttpSessionListener,HttpSessionAttributeListener
{
// 声明一个ServletContext对象
private ServletContext application = null ;
public void contextInitialized(ServletContextEvent sce)
{
// 容器初始化时,向application中存放一个空的容器
this.application = sce.getServletContext() ;
this.application.setAttribute("alluser",new ArrayList()) ;
}
public void contextDestroyed(ServletContextEvent sce)
{}
public void sessionCreated(HttpSessionEvent se)
{}
public void sessionDestroyed(HttpSessionEvent se)
{
// 将用户名称从列表中删除
List l = (List)this.application.getAttribute("alluser") ;
String value = (String)se.getSession().getAttribute("uname") ;
l.remove(value) ;
this.application.setAttribute("alluser",l) ;
}
public void attributeAdded(HttpSessionBindingEvent se)-----------登录一个就放一个到application.setAttribute("user",user);
{
// 如果登陆成功,则将用户名保存在列表之中
List l = (List)this.application.getAttribute("alluser") ; //取出List
l.add(se.getValue()) ; //取出user
this.application.setAttribute("alluser",l) ; //在List中存入user --------因为这三步对于每个用户都是一样的,所以抽取出来
}
public void attributeRemoved(HttpSessionBindingEvent se)
{}
public void attributeReplaced(HttpSessionBindingEvent se)
{}
};
[/code]
监听器
命名:
都是Listener所以以Listener结尾
如果只对生命周期监听: XXListener:如ServletContextListener,HttpSessionListener
如果要对属性监听: XXAttributeListener:
是针对于整个Web环境的监听
主要有以下三类:
1。ServletContext:对整个应用监听
2。Session:对Session监听
3。Request监听
1。对ServletContext监听
在Web端实现监听 = 实现一系列的监听接口
1.ServletContextListener:对整个Servlet上下文监听(启动,销毁)
public void contextInitialized(ServletContextEvent sce);上下文初始化
public void contextDestroyed(ServletContextEvent sce);//上下文销毁
ServletContextEvent事件类:
public ServletContext getServletContext(); //得到application对象
2 . -----只有getServletContext().setAttribute("aa","bb");这样的东西才起作用
ServletContextAttributeListener: 对Servlet上下文属性的监听
public void attributeAdded(ServletContextAttributeEvent scab); 增加属性
public void attributeRemoved(ServletContextAttributeEvent scab);
public void attributeReplaced(ServletContextAttributeEvent acab);
ServletContextAttributeEvent 属性事件类:
public String getName(); //得到属性名称
public Object getValue(); //得到属性的值
因为Listener与连接无关,所以他只要配置一个
<listener>
<listener-class>cn.mldn.listener.ServeletContextDemo</listener-class>
</listener>
public class ServletContextDemo
implements ServletContextListener,ServletContextAttributeListener
{
private ServletContext application = null ;
// 实现方法
public void contextInitialized(ServletContextEvent sce)
{
this.application = sce.getServletContext() ;
System.out.println("** 上下文初始化 ...") ;
System.out.println("** 当前虚拟目录的绝对路径:"+this.application.getRealPath("/")) ;
}
public void contextDestroyed(ServletContextEvent sce)
{
System.out.println("** 上下文销毁 ...") ;
}
public void attributeAdded(ServletContextAttributeEvent scab)
{
System.out.println("** 增加属性:"+scab.getName()+" --> "+scab.getValue()) ;
}
public void attributeRemoved(ServletContextAttributeEvent scab)
{
System.out.println("** 删除属性:"+scab.getName()+" --> "+scab.getValue()) ;
}
public void attributeReplaced(ServletContextAttributeEvent scab)
{
System.out.println("** 替换属性:"+scab.getName()+" --> "+scab.getValue()) ;
}
};
上下文监听主要是正对容器的:初始化,销毁,属性操作
二:Session监听
对Session的创建,销毁,属性操作
1. HttpSessionListener:对session整体状况的监听
public void sessionCreated(HttpSessionEvent e);
public void sessionDestroyed(HttpSessionEvent e);
HttpSessionEvent事件:
public HttpSession getSession();取得当前操作的session
2.HttpSessionAttributeListener:对session属性的监听
public void attributeAdded(HttpSessionBindingEvent se); //属性增加
public void attributeRemoved(HttpSessionBindingEvent se);
public void attributeReplaced(HttpSessionBIndingEvent se)
HttpSessionBindingEvent事件:
public String getName();
public String getValue();
public HttpSession getSession();
Session如何销毁
1。session超时
需要在web.xml中进行配置
<session-config>
<session-timeout>1</session-timeout> //代表一分钟失效
</session-config>
2。手工使session失效
invalidate();
案例:
统计当前在线人员(在线人员列表)
实现那几个接口?
1.在线人员列表时对所有人都起作用,所有的数据必须保持在application之中,意味着在OnlineDemo中
必须有一个ServletContext对象
2。是针对于session的变化进行操作的
如果登录成功,则将用户名保存在session之中
3。如果用户注销,则需要对相应的用户名称删除
public class OnLineDemo
implements ServletContextListener,HttpSessionListener,HttpSessionAttributeListener
{
// 声明一个ServletContext对象
private ServletContext application = null ;
public void contextInitialized(ServletContextEvent sce)
{
// 容器初始化时,向application中存放一个空的容器
this.application = sce.getServletContext() ;
this.application.setAttribute("alluser",new ArrayList()) ;
}
public void contextDestroyed(ServletContextEvent sce)
{}
public void sessionCreated(HttpSessionEvent se)
{}
public void sessionDestroyed(HttpSessionEvent se)
{
// 将用户名称从列表中删除
List l = (List)this.application.getAttribute("alluser") ;
String value = (String)se.getSession().getAttribute("uname") ;
l.remove(value) ;
this.application.setAttribute("alluser",l) ;
}
public void attributeAdded(HttpSessionBindingEvent se)-----------登录一个就放一个到application.setAttribute("user",user);
{
// 如果登陆成功,则将用户名保存在列表之中
List l = (List)this.application.getAttribute("alluser") ; //取出List
l.add(se.getValue()) ; //取出user
this.application.setAttribute("alluser",l) ; //在List中存入user --------因为这三步对于每个用户都是一样的,所以抽取出来
}
public void attributeRemoved(HttpSessionBindingEvent se)
{}
public void attributeReplaced(HttpSessionBindingEvent se)
{}
};
[/code]