session监听器 在程序的配置文件中设置session的失效时间是30分钟,在session失效的时候自动调用一个事务完成一些操作,请问具体该怎么实现,怎样让页面知道session是不是已经失效,并且做一些反映,应该会用到监听器,请问怎么实现。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Http Session Listener监听Http Session的操作。当创建一个Session时,激发session Created(Http Session Event se)方法;当销毁一个Session时,激发session Destroyed (Http Session Event se)方法。 看看这个吧public class SessionListener implements HttpSessionAttributeListener { /** * 保存sessionID和用户帐号 */ private static Map<String, String> users = new HashMap<String, String>() ; /** * 保存sessionID和管理员帐号 */ private static Map<String, String> admins = new HashMap<String, String>(); public void attributeAdded(HttpSessionBindingEvent arg0) { System.out.println("-----------------------" + arg0.getName()); System.out.println("+++++++++++++++++++++++" + arg0.getSession().getId()); if("current_user".equals(arg0.getName())) { users.put(arg0.getSession().getId(), ((User)arg0.getValue()).getUserCode()); } else if("current_admin".equals(arg0.getName())) { admins.put(arg0.getSession().getId(), ((Administrator)arg0.getValue()).getAdminCode()); } } public void attributeRemoved(HttpSessionBindingEvent arg0) { System.out.println("-----------------------" + arg0.getName()); System.out.println("+++++++++++++++++++++++" + arg0.getSession().getId()); if("current_user".equals(arg0.getName())) { if(users.containsValue(((User)arg0.getValue()).getUserCode())) { Iterator<Map.Entry<String, String>> it = users.entrySet().iterator(); while(it.hasNext()) { Map.Entry<String, String> m = it.next(); String key = m.getKey(); String val = m.getValue(); if(val.equals(((User)arg0.getValue()).getUserCode())) { users.remove(key); break; } } } } else if("current_admin".equals(arg0.getName())) { if(admins.containsValue(((Administrator)arg0.getValue()).getAdminCode())) { Iterator<Map.Entry<String, String>> it = admins.entrySet().iterator(); while(it.hasNext()) { Map.Entry<String, String> m = it.next(); String key = m.getKey(); String val = m.getValue(); if(val.equals(((Administrator)arg0.getValue()).getAdminCode())) { admins.remove(key); break; } } } } } public void attributeReplaced(HttpSessionBindingEvent arg0) { System.out.println("-----------------------" + arg0.getName()); } public static Map<String, String> getAdmins() { return admins; } public static Map<String, String> getUsers() { return users; }} 还有一定。如果使用全局监听。请在web.xml中配置如果使用特定类监听。请注意,只有在session中将监听类添加/移除 操作时才会触发事件,调用相应方法。 将map封装到json对象报net.sf.json.JSONException 用户登入验证 老是出问题,jsp+jdbc+servlet+JavaBean 请问toString的方法和Println有联系吗 求助 急! 南京发展如何? 用户名空指针个判断的问题 棘手的问题 请问tomcat与apache的问题(急) 求大神解决Hibernate问题 用BufferedReader封装socket的输入流,返回了null,怎么处理 请问高人:你们怎样学习源代码? 我的这个页面无法使用样式表
/**
* 保存sessionID和用户帐号
*/
private static Map<String, String> users = new HashMap<String, String>() ;
/**
* 保存sessionID和管理员帐号
*/
private static Map<String, String> admins = new HashMap<String, String>();
public void attributeAdded(HttpSessionBindingEvent arg0) {
System.out.println("-----------------------" + arg0.getName());
System.out.println("+++++++++++++++++++++++" + arg0.getSession().getId());
if("current_user".equals(arg0.getName())) {
users.put(arg0.getSession().getId(), ((User)arg0.getValue()).getUserCode()); } else if("current_admin".equals(arg0.getName())) {
admins.put(arg0.getSession().getId(), ((Administrator)arg0.getValue()).getAdminCode()); }
}
public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.out.println("-----------------------" + arg0.getName());
System.out.println("+++++++++++++++++++++++" + arg0.getSession().getId());
if("current_user".equals(arg0.getName())) {
if(users.containsValue(((User)arg0.getValue()).getUserCode())) {
Iterator<Map.Entry<String, String>> it = users.entrySet().iterator();
while(it.hasNext()) {
Map.Entry<String, String> m = it.next();
String key = m.getKey();
String val = m.getValue();
if(val.equals(((User)arg0.getValue()).getUserCode())) {
users.remove(key);
break;
}
}
}
} else if("current_admin".equals(arg0.getName())) {
if(admins.containsValue(((Administrator)arg0.getValue()).getAdminCode())) {
Iterator<Map.Entry<String, String>> it = admins.entrySet().iterator();
while(it.hasNext()) {
Map.Entry<String, String> m = it.next();
String key = m.getKey();
String val = m.getValue();
if(val.equals(((Administrator)arg0.getValue()).getAdminCode())) {
admins.remove(key);
break;
}
}
}
}
}
public void attributeReplaced(HttpSessionBindingEvent arg0) {
System.out.println("-----------------------" + arg0.getName());
}
public static Map<String, String> getAdmins() {
return admins;
}
public static Map<String, String> getUsers() {
return users;
}
}