jsp----监听器

[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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值