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]>