Author: markt Date: Fri Aug 8 07:08:21 2008 New Revision: 683969 URL: http://svn.apache.org/viewvc?rev=683969&view=rev Log: When a JSP file is deleted, return a 404 for the next request rather than serving the next request as if the file still existed and then returning 404s for the second and subsequent requests.
Modified: tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java tomcat/trunk/java/org/apache/jasper/servlet/JspServlet.java tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java Modified: tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java?rev=683969&r1=683968&r2=683969&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java (original) +++ tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java Fri Aug 8 07:08:21 2008 @@ -569,7 +569,7 @@ } public boolean isRemoved() { - if (removed > 1 ) { + if (removed > 0 ) { return true; } return false; @@ -580,6 +580,9 @@ public void compile() throws JasperException, FileNotFoundException { createCompiler(); if (jspCompiler.isOutDated()) { + if (isRemoved()) { + throw new FileNotFoundException(jspUri); + } try { jspCompiler.removeGeneratedFiles(); jspLoader = null; Modified: tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java?rev=683969&r1=683968&r2=683969&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java Fri Aug 8 07:08:21 2008 @@ -382,7 +382,7 @@ URL jspUrl = ctxt.getResource(jsp); if (jspUrl == null) { ctxt.incrementRemoved(); - return false; + return true; } URLConnection uc = jspUrl.openConnection(); if (uc instanceof JarURLConnection) { Modified: tomcat/trunk/java/org/apache/jasper/servlet/JspServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JspServlet.java?rev=683969&r1=683968&r2=683969&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/servlet/JspServlet.java (original) +++ tomcat/trunk/java/org/apache/jasper/servlet/JspServlet.java Fri Aug 8 07:08:21 2008 @@ -17,6 +17,7 @@ package org.apache.jasper.servlet; +import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.Constructor; import java.util.Enumeration; @@ -297,38 +298,15 @@ Throwable exception, boolean precompile) throws ServletException, IOException { - JspServletWrapper wrapper = - (JspServletWrapper) rctxt.getWrapper(jspUri); + JspServletWrapper wrapper = rctxt.getWrapper(jspUri); if (wrapper == null) { synchronized(this) { - wrapper = (JspServletWrapper) rctxt.getWrapper(jspUri); + wrapper = rctxt.getWrapper(jspUri); if (wrapper == null) { // Check if the requested JSP page exists, to avoid // creating unnecessary directories and files. if (null == context.getResource(jspUri)) { - String includeRequestUri = (String) - request.getAttribute( - "javax.servlet.include.request_uri"); - if (includeRequestUri != null) { - // This file was included. Throw an exception as - // a response.sendError() will be ignored - String msg = Localizer.getMessage( - "jsp.error.file.not.found",jspUri); - // Strictly, filtering this is an application - // responsibility but just in case... - throw new ServletException( - SecurityUtil.filter(msg)); - } else { - try { - response.sendError( - HttpServletResponse.SC_NOT_FOUND, - request.getRequestURI()); - } catch (IllegalStateException ise) { - log.error(Localizer.getMessage( - "jsp.error.file.not.found", - jspUri)); - } - } + handleMissingResource(request, response, jspUri); return; } boolean isErrorPage = exception != null; @@ -339,8 +317,40 @@ } } - wrapper.service(request, response, precompile); + try { + wrapper.service(request, response, precompile); + } catch (FileNotFoundException fnfe) { + handleMissingResource(request, response, jspUri); + } + + } + + private void handleMissingResource(HttpServletRequest request, + HttpServletResponse response, String jspUri) + throws ServletException, IOException { + + String includeRequestUri = + (String)request.getAttribute("javax.servlet.include.request_uri"); + + if (includeRequestUri != null) { + // This file was included. Throw an exception as + // a response.sendError() will be ignored + String msg = + Localizer.getMessage("jsp.error.file.not.found",jspUri); + // Strictly, filtering this is an application + // responsibility but just in case... + throw new ServletException(SecurityUtil.filter(msg)); + } else { + try { + response.sendError(HttpServletResponse.SC_NOT_FOUND, + request.getRequestURI()); + } catch (IllegalStateException ise) { + log.error(Localizer.getMessage("jsp.error.file.not.found", + jspUri)); + } + } + return; } Modified: tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java?rev=683969&r1=683968&r2=683969&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java (original) +++ tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java Fri Aug 8 07:08:21 2008 @@ -334,6 +334,9 @@ } else { throw ex; } + } catch (FileNotFoundException fnfe) { + // File has been removed. Let caller handle this. + throw fnfe; } catch (IOException ex) { if (options.getDevelopment()) { throw handleJspException(ex); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]