码迷,mamicode.com
首页 > Web开发 > 详细

JSP--监听HTTP会话

时间:2014-08-18 12:14:54      阅读:360      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   java   os   io   

ServletListener 之 监听HTTP会话

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

监听HTTP会话程序

bubuko.com,布布扣
bubuko.com,布布扣package eflylab;
bubuko.com,布布扣
import java.util.Hashtable;
bubuko.com,布布扣
import java.util.Iterator;
bubuko.com,布布扣
import javax.servlet.http.HttpSession;
bubuko.com,布布扣
import javax.servlet.http.HttpSessionEvent;
bubuko.com,布布扣
import javax.servlet.http.HttpSessionListener;
bubuko.com,布布扣
bubuko.com,布布扣
//HttpSessionListener接口监听会话的创建,销毁的信息
bubuko.com,布布扣
public class SessionListener implements HttpSessionListener {
bubuko.com,布布扣    
/**
bubuko.com,布布扣     * 该类实现了HttpSessionListener接口。
bubuko.com,布布扣     * 该类还有一个属性Hashtable,用来保存所有的登录信息。
bubuko.com,布布扣     * 当创建一个Session时,就调用 sessionCreate()方法将登录会话保存到Hashtable中;
bubuko.com,布布扣     * 当销毁一个Session时, 就调用sessionDetoryed()方法将 登录信息从Hashtable中移除
bubuko.com,布布扣     * 这就就实现了管理在线用户登录的会话信息目的 
bubuko.com,布布扣     
*/

bubuko.com,布布扣    
// 集合对象,保存session 对象的引用
bubuko.com,布布扣
    static Hashtable ht = new Hashtable();
bubuko.com,布布扣
bubuko.com,布布扣    
// 实现HttpSessionListener接口,完成session创建事件控制
bubuko.com,布布扣
    public void sessionCreated(HttpSessionEvent arg0) {
bubuko.com,布布扣        HttpSession session 
= arg0.getSession();
bubuko.com,布布扣        ht.put(session.getId(), session);
bubuko.com,布布扣        System.out.println(
"create session :" + session.getId());
bubuko.com,布布扣    }

bubuko.com,布布扣
bubuko.com,布布扣    
// 实现HttpSessionListener接口,完成session销毁事件控制
bubuko.com,布布扣
    public void sessionDestroyed(HttpSessionEvent arg0) {
bubuko.com,布布扣
bubuko.com,布布扣        HttpSession session 
= arg0.getSession();
bubuko.com,布布扣        System.out.println(
"destory session :" + session.getId());
bubuko.com,布布扣        ht.remove(session.getId());
bubuko.com,布布扣    }

bubuko.com,布布扣
bubuko.com,布布扣    
// 返回全部session对象集合
bubuko.com,布布扣
    static public Iterator getSet() {
bubuko.com,布布扣        
return ht.values().iterator();
bubuko.com,布布扣    }

bubuko.com,布布扣
bubuko.com,布布扣    
// 依据session id返回指定的session对象
bubuko.com,布布扣
    static public HttpSession getSession(String sessionId) {
bubuko.com,布布扣        
return (HttpSession) ht.get(sessionId);
bubuko.com,布布扣    }

bubuko.com,布布扣    
bubuko.com,布布扣}

bubuko.com,布布扣

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

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

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

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

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

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

会话管理程序 session.jsp

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

 注销会话的程序 logout.jsp

bubuko.com,布布扣
bubuko.com,布布扣<%@ page language="java" pageEncoding="GB2312" %> 
bubuko.com,布布扣
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> 
bubuko.com,布布扣
<html> 
bubuko.com,布布扣
<head> 
bubuko.com,布布扣
<title>会话控制</title> 
bubuko.com,布布扣
</head> 
bubuko.com,布布扣
<body bgcolor="#FFFFFF"> 
bubuko.com,布布扣
<% 
bubuko.com,布布扣
if(session.isNew()!=true){ 
bubuko.com,布布扣    session.invalidate(); 
bubuko.com,布布扣
bubuko.com,布布扣response.sendRedirect(
"index.jsp"); 
bubuko.com,布布扣
%> 
bubuko.com,布布扣
</body> 
bubuko.com,布布扣
</html> 
bubuko.com,布布扣

 制移除会话的程序 end.jsp

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

 部署文件 web.xml

<?xml version="1.0" encoding="UTF-8"?>
bubuko.com,布布扣
<web-app version="2.4" 
bubuko.com,布布扣    xmlns
="http://java.sun.com/xml/ns/j2ee" 
bubuko.com,布布扣    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" 
bubuko.com,布布扣    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee 
bubuko.com,布布扣    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
bubuko.com,布布扣
bubuko.com,布布扣
<listener>
bubuko.com,布布扣    
<listener-class>eflylab.SessionListener</listener-class>
bubuko.com,布布扣
</listener>
bubuko.com,布布扣
</web-app>



 

bubuko.com,布布扣
 

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

bubuko.com,布布扣package eflylab;
bubuko.com,布布扣
bubuko.com,布布扣
import javax.servlet.*;
bubuko.com,布布扣
bubuko.com,布布扣
public class MyRequestListener 
bubuko.com,布布扣
implements ServletRequestListener,ServletRequestAttributeListener
bubuko.com,布布扣
{
bubuko.com,布布扣    
//ServletRequestListener
bubuko.com,布布扣
    public void requestDestroyed(ServletRequestEvent sre) 
bubuko.com,布布扣    
{
bubuko.com,布布扣        logout(
"request destroyed");
bubuko.com,布布扣    }

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

bubuko.com,布布扣    
public void attributeRemoved(ServletRequestAttributeEvent event) 
bubuko.com,布布扣    
{
bubuko.com,布布扣        logout(
"attributeRemoved(‘" + event.getName() + "‘, ‘" +
bubuko.com,布布扣        event.getValue() 
+ "‘)");
bubuko.com,布布扣
bubuko.com,布布扣    }

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

bubuko.com,布布扣         
catch(Exception e)
bubuko.com,布布扣         
{
bubuko.com,布布扣             out.close();
bubuko.com,布布扣         }
          
bubuko.com,布布扣    }
    
bubuko.com,布布扣}

bubuko.com,布布扣    
bubuko.com,布布扣        

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

---------------------------------------------------------------------------------------------




JSP--监听HTTP会话,布布扣,bubuko.com

JSP--监听HTTP会话

标签:des   style   blog   http   color   java   os   io   

原文地址:http://www.cnblogs.com/redcoatjk/p/3919100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!