zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Kafka中数据的流向
    kafka调试中遇到could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
    knife4j
    SpringBoot使用ELK日志收集ELASTIC (ELK) STACK
    Jedis连接池(实际项目可用)
    Redis windows安装帮助
    Spring Boot 多数据配置更新
    SpringBoot使用Mybatis-Generator
    tkinter显示图片
    window nodejs 版本管理器 nvm-windows 教程
  • 原文地址:https://www.cnblogs.com/eflylab/p/621953.html
Copyright © 2011-2022 走看看