Add the following fragment to your web.xml: <!-- Session Counting Filter --> <!-- Every request passing through this filter will be checked for a --> <!-- newly-created session, which will be then counted against the --> <!-- total sessions using this application. --> <filter> <filter-name>SessionCountFilter</filter-name> <filter-class>SessionCountFilter</filter-class> </filter> <filter-mapping> <filter-name>SessionCountFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-----Original Message----- From: David Kerber [mailto:[EMAIL PROTECTED] Sent: Thursday, February 09, 2006 10:56 AM To: Tomcat Users List Subject: Re: Logging session timeouts I got your code in, and it compiles, but I don't understand how I configure the url-mapping you refer to. Could you point me to some docs for that? I looked through the web.xml files (both the server one, and the one for the app), but couldn't find anything about url-mapping or filters that seemed to apply to this. It may be there, but I don't know enough about it to recognize it. Thanks! Dave Tim Lucia wrote: >Below is a filter which keeps track of how many sessions are attached >to a web app. The key part is the HttpSessionBindingListener interface. > >Tim > > >/** > * J2EE "Filter" to count page hits. What it counts depends on the >url-mapping > * in web.xml. > * > * @author tim.lucia > */ >public class SessionCountFilter > implements Filter, HttpSessionBindingListener, Serializable { > private final static Log logger = >LogFactory.getLog(SessionCountFilter.class); > > public static final Hashtable sessions = new Hashtable(); > public static int sessionCountHighWater = 0; > > /** > * Container startup notification > */ > public void init(FilterConfig arg0) throws ServletException > { > logger.debug("init(): " + arg0); > } > > /** > * Container shutdown notification > */ > public void destroy() > { > logger.debug("destroy()"); > } > > /** > * Process the container's filter request. > * @param request - Request object > * @param response - response object > * @param chain - next filter in the chain. > */ > public void doFilter(ServletRequest request, ServletResponse response, > FilterChain chain) > throws IOException, ServletException > { > chain.doFilter(request, response); > > HttpServletRequest httpRequest = (HttpServletRequest)request; > HttpSession session = httpRequest.getSession(false); > if (logger.isDebugEnabled()) { > logger.debug("Request " + httpRequest.getRequestURI() + > (session == null ? " returned no session" : > " belongs to session ID " + session.getId())); > } > > // Bind to the session, if there is one, and it is new: > if (null != session && session.isNew()) { > session.setAttribute(toString(), this); > } > } > > /** > * Implement HttpSessionBindingListener#valueBound > */ > public void valueBound(HttpSessionBindingEvent bindEvent) > { > HttpSession session = bindEvent.getSession(); > final String sessionID = session.getId(); > sessions.put(session, sessionID); > if (logger.isDebugEnabled()) { > logger.debug("[" + sessions.size() + "] CREATE: " + sessionID); > } > sessionCountHighWater = > (sessionCountHighWater < sessions.size() ? sessions.size() : >sessionCountHighWater); > } > > /** > * Implement HttpSessionBindingListener#valueUnbound > */ > public void valueUnbound(HttpSessionBindingEvent bindEvent) > { > HttpSession session = bindEvent.getSession(); > final String sessionID = (String)sessions.get(session); > sessions.remove(session); > if (logger.isDebugEnabled()) { > logger.debug("[" + sessions.size() + "] DESTROY: " + sessionID); > } > } > > /** > * Return current count of sessions > * @return The number of sessions currently tracked > */ > public static int getSessionCount() > { > return sessions.size(); > } > > /** > * Return high water mark of number of sessions > * @return The high water mark of sessions tracked > */ > public static int getSessionCountHighWater() > { > return sessionCountHighWater; > } > > /** > * Return string representation of this object > * @return a String representation of this object > */ > public String toString() > { > return getClass().getName() + "#" + hashCode(); > } >} > >-----Original Message----- >From: David Kerber [mailto:[EMAIL PROTECTED] >Sent: Thursday, February 09, 2006 9:38 AM >To: Tomcat Users List >Subject: Logging session timeouts > >Is there any way of trapping session timeouts, so I can log them? I am >logging when a user logs in and when they explicitly log out, but would >like to log when their session times out, if that is possible. > >TIA! >Dave > > > >--------------------------------------------------------------------- >To unsubscribe, e-mail: [EMAIL PROTECTED] >For additional commands, e-mail: [EMAIL PROTECTED] > > > >--------------------------------------------------------------------- >To unsubscribe, e-mail: [EMAIL PROTECTED] >For additional commands, e-mail: [EMAIL PROTECTED] > > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]