关于Listener

236 阅读1分钟

监听器的配置

//MyServletContextListener类实现了ServletContextListener接口,因此可以对ServletContext对象的创建和销毁这两个动作进行监听。
public class MyServletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContext对象创建");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContext对象销毁");
    }
}
//web.xml文件中注册监听器
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 注册针对ServletContext对象进行监听的监听器 -->
  <listener>
      <description>ServletContextListener监听器</description>
      <!--实现了ServletContextListener接口的监听器类 -->
      <listener-class>me.gacl.web.listener.MyServletContextListener</listener-class>
  </listener>
</web-app>

RequestLinstener

public class ServletRquestListeners implements ServletRequestListener,ServletRequestAttributeListener  
{  
    //这个是在请求后调用  
    public void requestDestroyed(ServletRequestEvent s)  
    {  
        System.out.println("销毁了ServletReqeust");  
    }  
  
    //它是在请求前调用  
    public void requestInitialized(ServletRequestEvent s)  
    {  
        ServletRequest servletRequest = s.getServletRequest();  
        HttpServletRequest request = (HttpServletRequest) servletRequest;  
        String pathInfo = request.getServletPath();  
        System.out.println("请求地址:"+pathInfo);  
    }  
  
    public void attributeAdded(ServletRequestAttributeEvent srae)  
    {  
        HttpServletRequest request = (HttpServletRequest) srae.getServletRequest();  
        System.out.println("增加request--->"+request.getAttribute("requestName"));  
    }  
  
    public void attributeRemoved(ServletRequestAttributeEvent srae)  
    {  
        HttpServletRequest request = (HttpServletRequest) srae.getServletRequest();  
        System.out.println("删除request--->"+request.getAttribute("requestName"));  
    }  
  
    public void attributeReplaced(ServletRequestAttributeEvent srae)  
    {  
        HttpServletRequest request = (HttpServletRequest) srae.getServletRequest();  
        System.out.println("提换request--->"+request.getAttribute("requestName"));  
    }  
} 

SessionLinstener

//onlineListener.java
package test.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());  
        System.out.println(sbe.getValue());  
        sc.setAttribute("list", list);  
    }  
  
    // 修改、删除session中添加对象时触发此操作  
    public void attributeRemoved(HttpSessionBindingEvent arg0) {  
        System.out.println("5555555");  
    }  
  
    public void attributeReplaced(HttpSessionBindingEvent arg0) {  
        System.out.println("77777777");  
    }  
}  
//web.xml配置监听器
<?xml version="1.0" encoding="UTF-8"?>    
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee     
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">    
    <listener>    
        <listener-class>    
            test.listener.onlineListener
        </listener-class>    
    </listener>    
    <!--默认的会话超时时间间隔,以分钟为单位  -->    
    <session-config>    
        <session-timeout>1</session-timeout>    
    </session-config>
</web-app>
//index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";  
%>  
<html>  
    <body>  
        <%  
            session = request.getSession(false);  
            if (session != null)  
                session.invalidate();  
        %>  
        <form action="isOnline.jsp" method="post">  
            用户名:  
            <input type="text" name="uName" />  
            <input type="submit" value="上线">  
    </body>  
</html> 
//isOnline.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%>  
<html>  
  <body>  
    <%  
session=request.getSession();  
session.setAttribute("userName",request.getParameter("uName"));  
response.sendRedirect("showOnline.jsp");  
%>  
  </body>  
</html>

ServlerContextLinstener

package webtest.listener;
import java.text.MessageFormat;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
public class MyServletContextAttributeListener implements
        ServletContextAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent scab) {
        String str =MessageFormat.format(
                "ServletContext域对象中添加了属性:{0},属性值是:{1}"
                ,scab.getName()
                ,scab.getValue());
        System.out.println(str);
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scab) {
        String str =MessageFormat.format(
                "ServletContext域对象中删除属性:{0},属性值是:{1}"
                ,scab.getName()
                ,scab.getValue());
        System.out.println(str);
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scab) {
        String str =MessageFormat.format(
                "ServletContext域对象中替换了属性:{0}的值"
                ,scab.getName());
        System.out.println(str);
    }
}
//web.xml配置监听器
<listener>
   <listener-class>webtest.listener.MyServletContextAttributeListener</listener-class>
</listener>
//Test.jsp测试页面
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
  <body>
        <%
           //往application域对象中添加属性
           application.setAttribute("name", "51gjie");
          //替换application域对象中name属性的值
           application.setAttribute("name", "51gjie.com");
           //移除application域对象中name属性
           application.removeAttribute("name");
           %>
  </body>
</html>