This seems to be an FAQ item without a good solution, at least that I've
noticed on the list.  Recently I had to address this myself, moving some
sites over to Tomcat.  Here is my solution, for critique.

First, I subclassed Jasper's HttpJspBase to add the desired behavior:

abstract public class LastModifiedJSP extends
org.apache.jasper.runtime.HttpJspBase
{
        protected long getLastModified(HttpServletRequest request)
        {
                long lm = (new
java.io.File(getServletConfig().getServletContext().getRealPath(request.getS
ervletPath())).lastModified()) / 1000L * 1000L;
                return lm;
        }

        public void service(ServletRequest req, ServletResponse res)
                        throws ServletException, IOException
        {
                HttpServletRequest request = (HttpServletRequest) req;
                HttpServletResponse response = (HttpServletResponse) res;

                long checkDate = request.getDateHeader("If-Modified-Since");
                long lastMod = getLastModified(request);
                if (checkDate > 0 && lastMod <= checkDate)
                {
                        response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
                        return;
                }
                response.setDateHeader("Last-Modified", lastMod);

                super.service(request, response);
        }

        public String getServletInfo()
        {
                return "Base class for JSP pages that want Conditional Get handling.
Default getLastModified() returns lastModified() for JSP source file.";
        }
}

then each page that wants to use this behavior includes:

   <%@ page extends="com.devtech.jsp.LastModifiedJSP" %>

That's it.  If a page wants to change its Last-Modified behavior, it can
optionally provide a getLastModified() method, just as a servlet would do.
And I will change the default behavior to also check included pages via
getIncludes().

        --- Noel


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to