HttpSessionAttributeListener用法- -
监听session中的对象,通过HttpSessionAttributeListener的接口,一个更巧妙的方法。
假设现在有这样需求,需要获得当前登陆用户的数量。
我们可以编写下列这样一个类来实现HttpSessionAttributeListener接口。
package demo.listener;
import javax.servlet.ServletContext; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent;
public class UserCounter implements HttpSessionAttributeListener {
public void attributeAdded(HttpSessionBindingEvent event) { if (attributeIsUser(event)) adjustUserCounter(event.getSession( ).getServletContext( ), true); }
public void attributeRemoved(HttpSessionBindingEvent event) { if (attributeIsUser(event)) adjustUserCounter(event.getSession( ).getServletContext( ), false); }
public void attributeReplaced(HttpSessionBindingEvent event) { }
private boolean attributeIsUser(HttpSessionBindingEvent event) { String name = event.getName( ); Object value = event.getValue( ); return "user".equals(name) && value instanceof demo.app.domain.user; }
private void adjustUserCounter(ServletContext ctx, boolean userAdded) { Integer counterObj = (Integer) ctx.getAttribute("numUsers"); int counter = (counterObj == null ? 0 : counterObj.intValue( )); if (userAdded) { counter++; } else { if (counter > 0) counter--; } ctx.setAttribute("numUsers", new Integer(counter)); } }
完成以上代码后,就配置一下web.xml文件
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java./dtd/web-app_2_3.dtd">
Struts Cookbook - Chapter 7 Examples
demo.listener.UserCounter
... rest of web.xml
同样还有其他的监听接口,例如
ServletContextAttributeListener ServletRequestAttributeListener
http://spaces./members/Jauan/PersonalSpace.aspx?_c01_blogpart=blogmgmt&_c=blogpart
|