JSP--监听HTTP会话

ServletListener 之 监听HTTP会话

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

监听HTTP会话程序

JSP--监听HTTP会话JSP--监听HTTP会话监听HTTP会话程序
JSP--监听HTTP会话package eflylab;
JSP--监听HTTP会话import java.util.Hashtable;
JSP--监听HTTP会话import java.util.Iterator;
JSP--监听HTTP会话import javax.servlet.http.HttpSession;
JSP--监听HTTP会话import javax.servlet.http.HttpSessionEvent;
JSP--监听HTTP会话import javax.servlet.http.HttpSessionListener;
JSP--监听HTTP会话
JSP--监听HTTP会话//HttpSessionListener接口监听会话的创建,销毁的信息
JSP--监听HTTP会话JSP--监听HTTP会话public class SessionListener implements HttpSessionListener JSP--监听HTTP会话{
JSP--监听HTTP会话JSP--监听HTTP会话    /** *//**
JSP--监听HTTP会话     * 该类实现了HttpSessionListener接口。
JSP--监听HTTP会话     * 该类还有一个属性Hashtable,用来保存所有的登录信息。
JSP--监听HTTP会话     * 当创建一个Session时,就调用 sessionCreate()方法将登录会话保存到Hashtable中;
JSP--监听HTTP会话     * 当销毁一个Session时, 就调用sessionDetoryed()方法将 登录信息从Hashtable中移除
JSP--监听HTTP会话     * 这就就实现了管理在线用户登录的会话信息目的 
JSP--监听HTTP会话     */
JSP--监听HTTP会话    // 集合对象,保存session 对象的引用
JSP--监听HTTP会话    static Hashtable ht = new Hashtable();
JSP--监听HTTP会话
JSP--监听HTTP会话    // 实现HttpSessionListener接口,完成session创建事件控制
JSP--监听HTTP会话JSP--监听HTTP会话    public void sessionCreated(HttpSessionEvent arg0) JSP--监听HTTP会话{
JSP--监听HTTP会话        HttpSession session = arg0.getSession();
JSP--监听HTTP会话        ht.put(session.getId(), session);
JSP--监听HTTP会话        System.out.println("create session :" + session.getId());
JSP--监听HTTP会话    }
JSP--监听HTTP会话
JSP--监听HTTP会话    // 实现HttpSessionListener接口,完成session销毁事件控制
JSP--监听HTTP会话JSP--监听HTTP会话    public void sessionDestroyed(HttpSessionEvent arg0) JSP--监听HTTP会话{
JSP--监听HTTP会话
JSP--监听HTTP会话        HttpSession session = arg0.getSession();
JSP--监听HTTP会话        System.out.println("destory session :" + session.getId());
JSP--监听HTTP会话        ht.remove(session.getId());
JSP--监听HTTP会话    }
JSP--监听HTTP会话
JSP--监听HTTP会话    // 返回全部session对象集合
JSP--监听HTTP会话JSP--监听HTTP会话    static public Iterator getSet() JSP--监听HTTP会话{
JSP--监听HTTP会话        return ht.values().iterator();
JSP--监听HTTP会话    }
JSP--监听HTTP会话
JSP--监听HTTP会话    // 依据session id返回指定的session对象
JSP--监听HTTP会话JSP--监听HTTP会话    static public HttpSession getSession(String sessionId) JSP--监听HTTP会话{
JSP--监听HTTP会话        return (HttpSession) ht.get(sessionId);
JSP--监听HTTP会话    }
JSP--监听HTTP会话    
JSP--监听HTTP会话}
JSP--监听HTTP会话

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

JSP--监听HTTP会话JSP--监听HTTP会话测试会话监听的程序index.jsp
JSP--监听HTTP会话JSP--监听HTTP会话<%JSP--监听HTTP会话@ page contentType="text/html; charset=gb2312" %> 
JSP--监听HTTP会话JSP--监听HTTP会话<%JSP--监听HTTP会话 
JSP--监听HTTP会话        String strName = null;
JSP--监听HTTP会话        String strThing = null;
JSP--监听HTTP会话        try {
JSP--监听HTTP会话            strName = request.getParameter("name");
JSP--监听HTTP会话            strThing = request.getParameter("thing");
JSP--监听HTTP会话            if ((strName == null) || (strName.length() == 0)) {
JSP--监听HTTP会话                throw new Exception("null strName");
JSP--监听HTTP会话            }
JSP--监听HTTP会话            if ((strThing == null) || (strThing.length() == 0))
JSP--监听HTTP会话                throw new Exception("null strThing");
JSP--监听HTTP会话            session.setAttribute("name", strName);
JSP--监听HTTP会话            session.setAttribute("thing", strThing);
JSP--监听HTTP会话            response.sendRedirect("display.jsp");
JSP--监听HTTP会话        } catch (Exception e) {
JSP--监听HTTP会话        } 
JSP--监听HTTP会话%> 
JSP--监听HTTP会话<html> 
JSP--监听HTTP会话<head> 
JSP--监听HTTP会话<title>会话管理</title> 
JSP--监听HTTP会话</head> 
JSP--监听HTTP会话<body> 
JSP--监听HTTP会话<center>会话管理示例</center> 
JSP--监听HTTP会话<form action="" method="post" >
JSP--监听HTTP会话    <table align=''center''> 
JSP--监听HTTP会话        <tr> 
JSP--监听HTTP会话            <td>名称:</td> 
JSP--监听HTTP会话              <td> <input name="name" type="input"/> </td> 
JSP--监听HTTP会话        </tr> 
JSP--监听HTTP会话        <tr> 
JSP--监听HTTP会话            <td>事件:</td> 
JSP--监听HTTP会话            <td> <input name="thing" type="input"/> </td> 
JSP--监听HTTP会话        </tr> 
JSP--监听HTTP会话        <tr> 
JSP--监听HTTP会话            <td align=''right''> </td> 
JSP--监听HTTP会话            <td align=''right''> 
JSP--监听HTTP会话                <button type="submit">提交</button> 
JSP--监听HTTP会话                <button type="reset">重置</button> 
JSP--监听HTTP会话            </td> 
JSP--监听HTTP会话        </tr> 
JSP--监听HTTP会话    </table> 
JSP--监听HTTP会话</form> 
JSP--监听HTTP会话</body> 
JSP--监听HTTP会话</html> 
JSP--监听HTTP会话

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

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

JSP--监听HTTP会话JSP--监听HTTP会话会话信息显示的程序 display.jsp
JSP--监听HTTP会话JSP--监听HTTP会话<%JSP--监听HTTP会话@ page language="java" pageEncoding="GB2312" %> 
JSP--监听HTTP会话<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> 
JSP--监听HTTP会话<html> 
JSP--监听HTTP会话<head> 
JSP--监听HTTP会话<title>会话控制显示</title> 
JSP--监听HTTP会话</head> 
JSP--监听HTTP会话<body bgcolor="#FFFFFF"> 
JSP--监听HTTP会话JSP--监听HTTP会话<%JSP--监听HTTP会话 
JSP--监听HTTP会话if (session.isNew()==true){ 
JSP--监听HTTP会话    response.sendRedirect("index.jsp"); 
JSP--监听HTTP会话
JSP--监听HTTP会话out.println("name: "+ session.getAttribute("name") + "<br>"); 
JSP--监听HTTP会话out.println("thing: "+ session.getAttribute("thing") + "<br>"); 
JSP--监听HTTP会话out.println("session id: " + session.getId() + "<br>"); 
JSP--监听HTTP会话out.println("create time: " + session.getCreationTime() ); 
JSP--监听HTTP会话%> 
JSP--监听HTTP会话<form >
JSP--监听HTTP会话  <table>
JSP--监听HTTP会话      <tr>
JSP--监听HTTP会话        <td><a href="session.jsp">管理</a></td>&nbsp;&nbsp;&nbsp;&nbsp;
JSP--监听HTTP会话        <td><a href="logout.jsp">注销</a></td>&nbsp;&nbsp;&nbsp;&nbsp;
JSP--监听HTTP会话    </tr>
JSP--监听HTTP会话  </table>
JSP--监听HTTP会话</form>
JSP--监听HTTP会话</body> 
JSP--监听HTTP会话</html> 
JSP--监听HTTP会话

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

会话管理程序 session.jsp

JSP--监听HTTP会话JSP--监听HTTP会话会话管理程序 session.jsp
JSP--监听HTTP会话JSP--监听HTTP会话<%JSP--监听HTTP会话@ page language="java" pageEncoding="GB2312" %> 
JSP--监听HTTP会话JSP--监听HTTP会话<%JSP--监听HTTP会话@ page import= "eflylab.*,java.util.*"%> 
JSP--监听HTTP会话<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> 
JSP--监听HTTP会话<html> 
JSP--监听HTTP会话<head> 
JSP--监听HTTP会话<title>Lomboz JSP</title> 
JSP--监听HTTP会话</head> 
JSP--监听HTTP会话<body bgcolor="#FFFFFF"> 
JSP--监听HTTP会话会话管理
JSP--监听HTTP会话<br> 
JSP--监听HTTP会话<table border=''1''> 
JSP--监听HTTP会话<tr bgcolor=''yellow''> 
JSP--监听HTTP会话<td>会话 id</td> 
JSP--监听HTTP会话<td>用户名 </td> 
JSP--监听HTTP会话<td>事件</td> 
JSP--监听HTTP会话<td>创建时间 </td> 
JSP--监听HTTP会话<td>操作</td> 
JSP--监听HTTP会话</tr> 
JSP--监听HTTP会话JSP--监听HTTP会话<%JSP--监听HTTP会话 
JSP--监听HTTP会话Iterator iterator = SessionListener.getSet(); //获得返回全部session对象集合
JSP--监听HTTP会话while(iterator.hasNext()){ 
JSP--监听HTTP会话    try{ 
JSP--监听HTTP会话        HttpSession session1 = (HttpSession)iterator.next(); 
JSP--监听HTTP会话        out.println("<tr>"); 
JSP--监听HTTP会话        out.println("<td>" + session1.getId() + "</td>" ); 
JSP--监听HTTP会话        out.println("<td>" + session1.getAttribute("name") + "</td>" ); 
JSP--监听HTTP会话        out.println("<td>" + session1.getAttribute("thing") + "</td>" ); 
JSP--监听HTTP会话        out.println("<td>" + session1.getCreationTime() + "</td>" ); 
JSP--监听HTTP会话        %>
JSP--监听HTTP会话        <td> <a href='end.jsp?sessionid=<%=session1.getId() %>'>销毁</a> </td> 
JSP--监听HTTP会话JSP--监听HTTP会话        <%JSP--监听HTTP会话
JSP--监听HTTP会话        out.println("</tr>"); 
JSP--监听HTTP会话        System.out.println("sessionId " + session1.getId()); 
JSP--监听HTTP会话    }catch(Exception ex){ 
JSP--监听HTTP会话        ex.printStackTrace(); 
JSP--监听HTTP会话        return; 
JSP--监听HTTP会话    } 
JSP--监听HTTP会话
JSP--监听HTTP会话%> 
JSP--监听HTTP会话</table> 
JSP--监听HTTP会话</body> 
JSP--监听HTTP会话</html> 
JSP--监听HTTP会话

注销会话的程序 logout.jsp

JSP--监听HTTP会话JSP--监听HTTP会话注销会话的程序 logout.jsp
JSP--监听HTTP会话JSP--监听HTTP会话<%JSP--监听HTTP会话@ page language="java" pageEncoding="GB2312" %> 
JSP--监听HTTP会话<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> 
JSP--监听HTTP会话<html> 
JSP--监听HTTP会话<head> 
JSP--监听HTTP会话<title>会话控制</title> 
JSP--监听HTTP会话</head> 
JSP--监听HTTP会话<body bgcolor="#FFFFFF"> 
JSP--监听HTTP会话JSP--监听HTTP会话<%JSP--监听HTTP会话 
JSP--监听HTTP会话if(session.isNew()!=true){ 
JSP--监听HTTP会话    session.invalidate(); 
JSP--监听HTTP会话
JSP--监听HTTP会话response.sendRedirect("index.jsp"); 
JSP--监听HTTP会话%> 
JSP--监听HTTP会话</body> 
JSP--监听HTTP会话</html> 
JSP--监听HTTP会话

制移除会话的程序 end.jsp

JSP--监听HTTP会话JSP--监听HTTP会话强制移除会话的程序 end.jsp
JSP--监听HTTP会话JSP--监听HTTP会话<%JSP--监听HTTP会话@ page language="java" pageEncoding="GB2312" %> 
JSP--监听HTTP会话JSP--监听HTTP会话<%JSP--监听HTTP会话@ page import="eflylab.*"%> 
JSP--监听HTTP会话<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> 
JSP--监听HTTP会话<html> 
JSP--监听HTTP会话<head> 
JSP--监听HTTP会话<title>Lomboz JSP</title> 
JSP--监听HTTP会话</head> 
JSP--监听HTTP会话<body bgcolor="#FFFFFF"> 
JSP--监听HTTP会话JSP--监听HTTP会话<%JSP--监听HTTP会话 
JSP--监听HTTP会话// 关闭会话,释放资源
JSP--监听HTTP会话try { 
JSP--监听HTTP会话    String strSid = request.getParameter("sessionid"); 
JSP--监听HTTP会话    HttpSession session1 = SessionListener.getSession(strSid); //根据ID获取 Session
JSP--监听HTTP会话    if (session1!=null){ 
JSP--监听HTTP会话        session1.invalidate(); 
JSP--监听HTTP会话    } 
JSP--监听HTTP会话} catch (Exception e) { 
JSP--监听HTTP会话    e.printStackTrace(); 
JSP--监听HTTP会话
JSP--监听HTTP会话response.sendRedirect("session.jsp"); 
JSP--监听HTTP会话%> 
JSP--监听HTTP会话</body> 
JSP--监听HTTP会话</html> 
JSP--监听HTTP会话

部署文件 web.xml

<?xml version="1.0" encoding="UTF-8"?>
JSP--监听HTTP会话<web-app version="2.4" 
JSP--监听HTTP会话    xmlns="http://java.sun.com/xml/ns/j2ee" 
JSP--监听HTTP会话    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
JSP--监听HTTP会话    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
JSP--监听HTTP会话    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
JSP--监听HTTP会话
JSP--监听HTTP会话<listener>
JSP--监听HTTP会话    <listener-class>eflylab.SessionListener</listener-class>
JSP--监听HTTP会话</listener>
JSP--监听HTTP会话</web-app>


JSP--监听HTTP会话
 

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

JSP--监听HTTP会话package eflylab;
JSP--监听HTTP会话
JSP--监听HTTP会话import javax.servlet.*;
JSP--监听HTTP会话
JSP--监听HTTP会话public class MyRequestListener 
JSP--监听HTTP会话implements ServletRequestListener,ServletRequestAttributeListener
JSP--监听HTTP会话JSP--监听HTTP会话JSP--监听HTTP会话{
JSP--监听HTTP会话    //ServletRequestListener
JSP--监听HTTP会话    public void requestDestroyed(ServletRequestEvent sre) 
JSP--监听HTTP会话JSP--监听HTTP会话    JSP--监听HTTP会话{
JSP--监听HTTP会话        logout("request destroyed");
JSP--监听HTTP会话    }
JSP--监听HTTP会话    
JSP--监听HTTP会话    public void requestInitialized(ServletRequestEvent sre) 
JSP--监听HTTP会话JSP--监听HTTP会话    JSP--监听HTTP会话{
JSP--监听HTTP会话        //在这个方法里,获得客户端请求对象,然后通过这个请求对象获得访问
JSP--监听HTTP会话        //的客户端IP地址。如果该地址是“127”开的,那么就认为它是从本机访问
JSP--监听HTTP会话        //就在请求中设置一个isLogin的属性,并且这个属性的值为Boolean(true)
JSP--监听HTTP会话        //对象,如果不是从本机访问,那么就必须把这个属性设置成Boolean(false)对象
JSP--监听HTTP会话        
JSP--监听HTTP会话        logout("request init");//日志
JSP--监听HTTP会话        ServletRequest sr=sre.getServletRequest();
JSP--监听HTTP会话          
JSP--监听HTTP会话        if(sr.getRemoteAddr().startsWith("127"))
JSP--监听HTTP会话            sr.setAttribute("isLogin",new Boolean(true));
JSP--监听HTTP会话        else 
JSP--监听HTTP会话            sr.setAttribute("isLogin",new Boolean(false));
JSP--监听HTTP会话        
JSP--监听HTTP会话        
JSP--监听HTTP会话    }//ServletRequestListener
JSP--监听HTTP会话    
JSP--监听HTTP会话    //ServletRequestAttributeListener
JSP--监听HTTP会话    public void attributeAdded(ServletRequestAttributeEvent event) 
JSP--监听HTTP会话JSP--监听HTTP会话    JSP--监听HTTP会话{
JSP--监听HTTP会话        logout("attributeAdded('" + event.getName() + "', '" +
JSP--监听HTTP会话        event.getValue() + "')");
JSP--监听HTTP会话    }
JSP--监听HTTP会话    public void attributeRemoved(ServletRequestAttributeEvent event) 
JSP--监听HTTP会话JSP--监听HTTP会话    JSP--监听HTTP会话{
JSP--监听HTTP会话        logout("attributeRemoved('" + event.getName() + "', '" +
JSP--监听HTTP会话        event.getValue() + "')");
JSP--监听HTTP会话
JSP--监听HTTP会话    }
JSP--监听HTTP会话    
JSP--监听HTTP会话    public void attributeReplaced(ServletRequestAttributeEvent event)
JSP--监听HTTP会话JSP--监听HTTP会话    JSP--监听HTTP会话{
JSP--监听HTTP会话        logout("attributeReplaced('" + event.getName() + "', '" +
JSP--监听HTTP会话        event.getValue() + "')");
JSP--监听HTTP会话        
JSP--监听HTTP会话    }//ServletRequestAttributeListener
JSP--监听HTTP会话    private void logout(String msg)
JSP--监听HTTP会话JSP--监听HTTP会话    JSP--监听HTTP会话{
JSP--监听HTTP会话        java.io.PrintWriter out=null;
JSP--监听HTTP会话        try
JSP--监听HTTP会话JSP--监听HTTP会话        JSP--监听HTTP会话{
JSP--监听HTTP会话            out=new java.io.PrintWriter(new java.io.FileOutputStream("c:\\request.txt",true));
JSP--监听HTTP会话            out.println(msg);
JSP--监听HTTP会话            out.close();
JSP--监听HTTP会话         }
JSP--监听HTTP会话         catch(Exception e)
JSP--监听HTTP会话JSP--监听HTTP会话         JSP--监听HTTP会话{
JSP--监听HTTP会话             out.close();
JSP--监听HTTP会话         }          
JSP--监听HTTP会话    }    
JSP--监听HTTP会话}
JSP--监听HTTP会话    
JSP--监听HTTP会话        

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


---------------------------------------------------------------------------------------------
上一篇:Python第二章 设计Python程序


下一篇:2021.9.6