remm        2002/11/08 06:56:44

  Modified:    jasper2/src/share/org/apache/jasper/runtime Tag:
                        tomcat_4_branch PageContextImpl.java
  Log:
  - Port revised non flushing patch.
  - It appears not to be causing problems during my testing. If it does, the patch
    should be reverted.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.11.2.4  +42 -6     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/PageContextImpl.java
  
  Index: PageContextImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/PageContextImpl.java,v
  retrieving revision 1.11.2.3
  retrieving revision 1.11.2.4
  diff -u -r1.11.2.3 -r1.11.2.4
  --- PageContextImpl.java      6 Nov 2002 15:38:44 -0000       1.11.2.3
  +++ PageContextImpl.java      8 Nov 2002 14:56:44 -0000       1.11.2.4
  @@ -176,10 +176,13 @@
        try {
            if (isIncluded) {
                ((JspWriterImpl)out).flushBuffer();
  -                     // push it into the including jspWriter
  +                // push it into the including jspWriter
            } else {
  -             out.flush();
  -         }
  +                // Do not flush the buffer even if we're not included (i.e.
  +                // we are the main page. The servlet will flush it and close
  +                // the stream.
  +                ((JspWriterImpl)out).flushBuffer();
  +            }
        } catch (IOException ex) {
            loghelper.log("Internal error flushing the buffer in release()");
        }
  @@ -470,15 +473,48 @@
       public void handlePageException(Throwable t)
           throws IOException, ServletException 
       {
  +     if (t == null) throw new NullPointerException("null Throwable");
           // set the request attribute with the Throwable.
  +
        request.setAttribute("javax.servlet.jsp.jspException", t);
   
        if (errorPageURL != null && !errorPageURL.equals("")) {
  +
  +         // Set request attributes.
  +         // Do not set the javax.servlet.error.exception attribute here
  +         // (instead, set in the generated servlet code for the error page)
  +         // in order to prevent the ErrorReportValve, which is invoked as
  +         // part of forwarding the request to the error page, from
  +         // throwing it if the response has not been committed (the response
  +         // will have been committed if the error page is a JSP page).
  +         request.setAttribute("javax.servlet.error.status_code",
  +             new Integer(HttpServletResponse.SC_INTERNAL_SERVER_ERROR));
  +         request.setAttribute("javax.servlet.error.request_uri",
  +             ((HttpServletRequest) request).getRequestURI());
  +         request.setAttribute("javax.servlet.error.servlet_name",
  +                              config.getServletName());
  +
               try {
                   forward(errorPageURL);
               } catch (IllegalStateException ise) {
                   include(errorPageURL);
               }
  +
  +            // The error page could be inside an include.
  +
  +            Object 
newException=request.getAttribute("javax.servlet.error.exception");
  +
  +            // t==null means the attribute was not set.
  +            if ( (newException!= null) && (newException==t) ) {
  +                request.removeAttribute("javax.servlet.error.exception");
  +            }
  +
  +            // now clear the error code - to prevent double handling.
  +            request.removeAttribute("javax.servlet.error.status_code");
  +            request.removeAttribute("javax.servlet.error.request_uri");
  +            request.removeAttribute("javax.servlet.error.status_code");
  +            request.removeAttribute("javax.servlet.jsp.jspException");
  +
        } else {
               // Otherwise throw the exception wrapped inside a ServletException.
            // Set the exception as the root cause in the ServletException
  
  
  

--
To unsubscribe, e-mail:   <mailto:tomcat-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@;jakarta.apache.org>

Reply via email to