ServletListener 之 监听HTTP会话

在开始先要知道我们可以通过HttpSessionListener接口监听HTTP会话的创建,销毁的信息;通过HTTPSessionActivationListener监听HTTP会话的active,passivate情况;通过HttpSessionBindingListener监听HTTP会话中对象的绑定信息;通过HttpSessionAttributeListener监听HTTP会话中属性的设置情况 。
下面写个具体的例子:

监听HTTP会话程序
测试会话监听的程序index.jsp

当访问上面页面时就会出现一个登录框,输入后进入display.jsp显示刚才输入的内容

会话信息显示的程序 display.jsp

单击管理即进入管理页面session.jsp,单击注销就会进入 会话注销页面 logout.jsp使 HTTP会话无效

会话管理程序 session.jsp
注销会话的程序 logout.jsp
强制移除会话的程序 end.jsp
部署文件 web.xml


 

对请求的监听
在Servlet2.4规范中,新加了一个技术,就是可以监听客户端的请求。一旦能够在监听程序中获取客户端的请求,就可以对请求进行统一处理。比如做一个WEB管理程序,如果在梧桐访问,就可以不登录,如果是远程访问,那么就需要登录。这样我们就可以 监听客户端的请求,从请求中获得客户端地址,并通过这个地址做出对应的处理。
我们在上面例子的基础上再扩展一下!

package eflylab;

import javax.servlet.*;

public class MyRequestListener 
implements ServletRequestListener,ServletRequestAttributeListener
{
    
//ServletRequestListener
    public void requestDestroyed(ServletRequestEvent sre) 
    
{
        logout(
"request destroyed");
    }

    
    
public void requestInitialized(ServletRequestEvent sre) 
    
{
        
//在这个方法里,获得客户端请求对象,然后通过这个请求对象获得访问
        
//的客户端IP地址。如果该地址是“127”开的,那么就认为它是从本机访问
        
//就在请求中设置一个isLogin的属性,并且这个属性的值为Boolean(true)
        
//对象,如果不是从本机访问,那么就必须把这个属性设置成Boolean(false)对象
        
        logout(
"request init");//日志
        ServletRequest sr=sre.getServletRequest();
          
        
if(sr.getRemoteAddr().startsWith("127"))
            sr.setAttribute(
"isLogin",new Boolean(true));
        
else 
            sr.setAttribute(
"isLogin",new Boolean(false));
        
        
    }
//ServletRequestListener
    
    
//ServletRequestAttributeListener
    public void attributeAdded(ServletRequestAttributeEvent event) 
    
{
        logout(
"attributeAdded('" + event.getName() + "', '" +
        event.getValue() 
+ "')");
    }

    
public void attributeRemoved(ServletRequestAttributeEvent event) 
    
{
        logout(
"attributeRemoved('" + event.getName() + "', '" +
        event.getValue() 
+ "')");

    }

    
    
public void attributeReplaced(ServletRequestAttributeEvent event)
    
{
        logout(
"attributeReplaced('" + event.getName() + "', '" +
        event.getValue() 
+ "')");
        
    }
//ServletRequestAttributeListener
    private void logout(String msg)
    
{
        java.io.PrintWriter out
=null;
        
try
        
{
            out
=new java.io.PrintWriter(new java.io.FileOutputStream("c:\\request.txt",true));
            out.println(msg);
            out.close();
         }

         
catch(Exception e)
         
{
             out.close();
         }
          
    }
    
}

    
        

在MyRequestListener中,实现了对客户端请求和请求中参数设置的监听。要实现这二个监听功能,需要实现ServletRequestListener和ServletRequestAttributeListener接口 。
如果在本机访问 ,
则直接调用http://127.0.0.1:8088/test/display.jsp页面,如果在另外机子上访问,则出现登录界面 index.jsp
原文地址:https://www.cnblogs.com/eflylab/p/621953.html