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]

Reply via email to