java监听器的学习与应用

web的监听器

1)  web监听器的引入:

对应的javase

事件源:事件在哪里发生                                      Jbutton

事件:发生了什么                                                点击事件(MouseEvent)

监听器:事件发生后要做什么                               触发了xx代码(MouseLisener)

2)  web监听器的定义:

web开发中,经常使用到一些对象,如servletContext,servletRequest,HttpSession,希望监听这些对象的创建和销毁或属性的增删改行为,可使用监听器监听这些行为。

3)web监听器的分类:

      

事件源

事件

监听器

ServletContext

(对象的创建和销毁)

ServletContextEvent

ServletContextLisener

ServletContext

(对象属性的增删改)

ServletContextAttributeEvent

ServletContextAttributeLisener

ServletRequest

(对象的创建和销毁)

ServletRequestEvent

ServletRequestLisener

ServletRequest

(对象属性的增删改)

ServletRequestAttributeEvent

ServletRequestAttributeLisener

HttpSession

HttpSessionEvent

HttpSessionLisener

HttpSession

HttpsessionBingdingEvent

HttpSessionAttributeLisener

 

 

一、ServletContextLisener

作用:用于监听ServletContext对象的创建和销毁

创建:web应用加载时(即web服务器启动的时候)

销毁:web应用重新部署或停止时

应用: 1、初始化数据库(建表)    2、销毁数据库(删表)

开发步骤:

(1)      编写类,实现对应的监听器接口

(2)      在web.xml中配置(注册监听器)

 <listener>

    <listener-class>gz.lulu.a_context.MyServletContextlistener-class>

  listener>

 

 

二、ServletContextAttributeLisener

作用:用于监听ServletContext属性的增删改

增:setAttribute”name”,Object;

删:removeAttribute”name”;

改:setAttribute”name”,Object;

/*jsp页面

 <%

    application.setAttribute("name", "jack");//增加

    application.setAttribute("name", "rose");//修改

    application.removeAttribute("name");//删除

 %>

 */

    //属性添加

    public void attributeAdded(ServletContextAttributeEvent scab) {

       String name = scab.getName();

       Object value = scab.getValue();

       System.out.println("属性增加:"+name+"="+value);

    }

    //属性删除

    public void attributeRemoved(ServletContextAttributeEvent scab) {

       String name = scab.getName();

       Object value = scab.getValue();

       System.out.println("属性删除:"+name+"="+value);

    }

 

    public void attributeReplaced(ServletContextAttributeEvent scab){

       String name = scab.getName();

       //属性修改后,需要重新获取值

       Object value = scab.getServletContext().getAttribute("name");

       System.out.println("属性修改:"+name+"="+value);

    }

 

三、ServletRequestLisener

作用:用于监听ServletRuquest对象的创建和销毁

创建:每次请求发出时

销毁:请求完毕时

应用: 1、获取请求相关的数据,共享到jsp页面

客户端的ip地址是:${sessionScope.ip }

public void requestInitialized(ServletRequestEvent sre) {

       System.out.println("ServletRequest对象创建了");

       HttpServletRequest request = (HttpServletRequest)sre.getServletRequest();

       String ip = request.getRemoteHost();

       HttpSession session = request.getSession();

       session.setAttribute("ip", ip);

    }

 

四、ServletRequestAttributeLisener

作用:用于监听ServletRequest属性的增删改

增:setAttribute”name”,Object;

删:removeAttribute”name”;

改:setAttribute”name”,Object;

<%

       request.setAttribute("name", "jack");

       request.setAttribute("name", "Lily");

       request.removeAttribute("name");

%>

 

public void attributeReplaced(ServletRequestAttributeEvent srae) {

       String name = srae.getName();

       Object value = srae.getServletRequest().getAttribute("name");

       System.out.println("属性修改:"+name+"="+value);

    }

   

    //属性增加

    public void attributeAdded(ServletRequestAttributeEvent srae) {

       String name = srae.getName();

       Object value = srae.getValue();

       System.out.println("属性增加:"+name+"="+value);

    }

 

    public void attributeRemoved(ServletRequestAttributeEvent srae) {

       String name = srae.getName();

       Object value = srae.getValue();

       System.out.println("属性删除:"+name+"="+value);

    }

七、HttpSessionLisener

作用:用于监听HttpSession对象的创建和销毁

创建:调用request.getSession时

销毁:

(1)       不访问httpseession开始,默认30分钟服务器回收 。

(2)       局部改变回收时间:setMaxInactiveInterval(intinterval)

(3)       全局改变回收时间:

         过期时间

              (4)直接销毁:invalidate()

应用: 1、粗略统计在线访客人数

Web.xml

<session-config>

       <session-timeout>1session-timeout>

   session-config>

Jsp测试页面

<body>

    当前网站的在线访客人数为:${applicationScope.onlineCount }

  body>

   

//演示HttpSession监听器

public class MySessionListener implements HttpSessionListener{

    private int onlineCount=1;

    //HttpSession对象创建时调用

    public void sessionCreated(HttpSessionEvent se) {

       System.out.println("session对象创建了"+se.getSession());

    //onlineCount放到域对象中。

注:这里要使用ServletContext才可以,不能使用HttpSession

       ServletContext context = se.getSession().getServletContext();

       context.setAttribute("onlineCount", onlineCount);

       onlineCount++;

    }

   

 

七、HttpSessionAttributeListener

作用:用于监听HttpSession属性的增删改

增:setAttribute”name”,Object;

删:removeAttribute”name”;

改:setAttribute”name”,Object;

public void attributeAdded(HttpSessionBindingEvent se) {

       String name = se.getName();

       Object value = se.getValue();

       System.out.println("增加属性"+name+"="+value);

    }

    public void attributeRemoved(HttpSessionBindingEvent se) {

       String name = se.getName();

       Object value = se.getValue();

       System.out.println("删除属性"+name+"="+value);

    }

    public void attributeReplaced(HttpSessionBindingEvent se) {

       String name = se.getName();

       //重新获取修改后的属性值

       Object value = se.getSession().getAttribute("name");

       System.out.println("修改属性"+name+"="+value);

    }

 

 

 

应用: 1、用户可以登录系统、退出系统

      2、用户登陆后,可查看在线登录用户列表

     3、管理员可以踢指定登录用户



你可能感兴趣的:(javaweb基础)