我按书本来进行一个例子的测试,但发现在在session中添加值时也没有调用到valueBound()此方法。
请各位多多指教。。
谢谢。。程序代码如下:
/******************UserTrace.java*********************/
package test1;import test1.UserList;
import java.util.*;
import javax.servlet.http.*;
import java.io.*;
public class UserTrace implements
javax.servlet.http.HttpSessionBindingListener{
private String user_name;
private UserList Container=UserList.getInstance();

public String getUserName(){
 return user_name;
}

public void setUserName(String name){
 user_name=name;
}

public void valueBound(HttpSessionBindingEvent Event){
System.out.println("weiming");
}

public void valueUnbound(HttpSessionBindingEvent Event){
Container.removeUser(user_name);
}
}/******************UserList.jsp***************************/
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<%@ page import="test1.*"%>
<%!
 UserList userlist=UserList.getInstance();
 
%>
<jsp:useBean id="usertrace" class="test1.UserTrace" scope="session"/>
<%
 String user_id=request.getParameter("user_id");
 usertrace.setUserName(user_id);
 session.setAttribute("usertrace",usertrace);
 out.print("after session!");
 userlist.addUser(usertrace.getUserName());
 
 session.setMaxInactiveInterval(10);
 
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head><body>
<textarea rows="10">
<%
 Enumeration elements =userlist.getList();
 
 while(elements.hasMoreElements()){
  String name=(String)elements.nextElement();
  out.println(name);
 }
%>
</textarea>
</body>
</html>/*****************UserList.java******************/
package test1;
import java.util.*;
public class UserList{
private Vector Container;

private static UserList instance=new UserList();

private UserList()
{
Container=new Vector();
}

public static UserList getInstance(){

return instance;
}

public void addUser(String user){
 if(user!=null){
  Container.addElement(user);
 }
}

public Enumeration getList(){
 return Container.elements();
}

public void removeUser(String user){
 if(user!=null){
  Container.removeElement(user);
 }
}
}

解决方案 »

  1.   

    什么现象?
    session.setAttribute("",obj)的时候将根据obj是否实现HttpSessionBindingListener来执行valueBound事件;
    同样的Object obj=session.removeAttribute("");的时候将根据obj是否实现HttpSessionBindingListener来执行valueUnbound事件;
    特别的当session中"abc"已经对应一个obj1时,setAttribute("abc",obj2)将调用obj1.valueUnbound事件和obj2的valueBound事件.
      

  2.   

    使用bean的情况没用过,<jsp:useBean id="usertrace" class="test1.UserTrace" scope="session"/>
    你可以直接使用test1.UserTrace usertrace=new test1.UserTrace()来试试.
      

  3.   

    好久不用servlet,忘差不多了应聘都不知道该如何做了
      

  4.   

    那我的UserTrace类明明已经实现了HttpSessionBindingListenser,为什么它的valueBound事件都不被执行呢???