amyroh 2002/09/11 17:09:28 Modified: catalina/src/share/org/apache/catalina/core ApplicationDispatcher.java ApplicationFilterFactory.java StandardWrapperValve.java catalina/src/share/org/apache/catalina/deploy FilterMap.java catalina/src/share/org/apache/catalina/valves ErrorDispatcherValve.java Log: Fix RequestDispatcher for ERROR and INCLUDE - bugzilla bugs 12456 and 12457. Patch submitted by Greg Murray <[EMAIL PROTECTED]>. Revision Changes Path 1.4 +60 -36 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java Index: ApplicationDispatcher.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- ApplicationDispatcher.java 23 Aug 2002 23:01:05 -0000 1.3 +++ ApplicationDispatcher.java 12 Sep 2002 00:09:27 -0000 1.4 @@ -360,7 +360,6 @@ private void doForward(ServletRequest request, ServletResponse response) throws ServletException, IOException { - // Reset any output that has been buffered, but keep headers/cookies if (response.isCommitted()) { if (debug >= 1) @@ -392,8 +391,18 @@ if (debug >= 1) log(" Non-HTTP Forward"); - invoke(request, response, ApplicationFilterFactory.FORWARD); - + // only set the Dispatcher Type to Forward if it has not been set. It will have + // been set by the ErrorDispatcherValue in the case of an ERROR + // it will be REQUEST coming in from the StandardWrapperValue and + // ERROR coming from the ErrorDispatcherValue + if (request.getAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR) != null){ + Integer disInt = (Integer)request.getAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR); + if (disInt.intValue() != ApplicationFilterFactory.ERROR) { + request.setAttribute(ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR, servletPath); + request.setAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR, new Integer(ApplicationFilterFactory.FORWARD)); + } + } + invoke(request, response); } // Handle an HTTP named dispatcher forward @@ -401,7 +410,18 @@ if (debug >= 1) log(" Named Dispatcher Forward"); - invoke(request, response, ApplicationFilterFactory.FORWARD); + // only set the Dispatcher Type to Forward if it has not been set. It will have + // been set by the ErrorDispatcherValue in the case of an ERROR + // it will be REQUEST coming in from the StandardWrapperValue and + // ERROR coming from the ErrorDispatcherValue + if (request.getAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR) != null){ + Integer disInt = (Integer)request.getAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR); + if (disInt.intValue() != ApplicationFilterFactory.ERROR) { + request.setAttribute(ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR, servletPath); + request.setAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR, new Integer(ApplicationFilterFactory.FORWARD)); + } + } + invoke(request, response); } @@ -429,7 +449,19 @@ wrequest.setQueryString(queryString); wrequest.mergeParameters(queryString); } - invoke(outerRequest, response, ApplicationFilterFactory.FORWARD); + + // only set the Dispatcher Type to Forward if it has not been set. It will have + // been set by the ErrorDispatcherValue in the case of an ERROR + // it will be REQUEST coming in from the StandardWrapperValue and + // ERROR coming from the ErrorDispatcherValue + if (wrequest.getAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR) != null){ + Integer disInt = (Integer)request.getAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR); + if (disInt.intValue() != ApplicationFilterFactory.ERROR) { + wrequest.setAttribute(ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR, servletPath); + wrequest.setAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR, new Integer(ApplicationFilterFactory.FORWARD)); + } + } + invoke(outerRequest, response); unwrapRequest(); } @@ -516,7 +548,10 @@ if (debug >= 1) log(" Non-HTTP Include"); - invoke(request, outerResponse, ApplicationFilterFactory.INCLUDE); + request.setAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR, + new Integer(ApplicationFilterFactory.INCLUDE)); + request.setAttribute(ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR, servletPath); + invoke(request, outerResponse); unwrapResponse(); } @@ -532,7 +567,10 @@ wrequest.setAttribute(Globals.NAMED_DISPATCHER_ATTR, name); if (servletPath != null) wrequest.setServletPath(servletPath); - invoke(outerRequest, outerResponse, ApplicationFilterFactory.INCLUDE); + wrequest.setAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR, + new Integer(ApplicationFilterFactory.INCLUDE)); + wrequest.setAttribute(ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR, servletPath); + invoke(outerRequest, outerResponse); unwrapRequest(); unwrapResponse(); @@ -571,8 +609,11 @@ queryString); wrequest.mergeParameters(queryString); } - // invoke(wrequest, wresponse); - invoke(outerRequest, outerResponse, ApplicationFilterFactory.INCLUDE); + + wrequest.setAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR, + new Integer(ApplicationFilterFactory.INCLUDE)); + wrequest.setAttribute(ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR, servletPath); + invoke(outerRequest, outerResponse); unwrapRequest(); unwrapResponse(); @@ -599,8 +640,8 @@ * @exception IOException if an input/output error occurs * @exception ServletException if a servlet error occurs */ - private void invoke(ServletRequest request, ServletResponse response, - int dispatcherMapping) throws IOException, ServletException { + private void invoke(ServletRequest request, ServletResponse response) + throws IOException, ServletException { // Checking to see if the context classloader is the current context // classloader. If it's not, we're saving it, and setting the context @@ -669,9 +710,9 @@ } // Get the FilterChain Here ApplicationFilterFactory factory = ApplicationFilterFactory.getInstance(); - ApplicationFilterChain filterChain = factory.createFilterChain(request, wrapper, servlet, dispatcherMapping); - - + ApplicationFilterChain filterChain = factory.createFilterChain(request, + wrapper, + servlet); // Call the service() method for the allocated servlet instance try { String jspFile = wrapper.getJspFile(); @@ -681,24 +722,11 @@ request.removeAttribute(Globals.JSP_FILE_ATTR); support.fireInstanceEvent(InstanceEvent.BEFORE_DISPATCH_EVENT, servlet, request, response); - // Added by Greg Murray for filter chaining // for includes/forwards if ((servlet != null) && (filterChain != null)) { filterChain.doFilter(request, response); } - // Greg Murray additions complete - /* Servlet Service Method is called by the FilterChain - - if (servlet != null) { - // if (debug >= 2) - // log(" Calling service(), jspFile=" + jspFile); - if ((hrequest != null) && (hresponse != null)) { - servlet.service((HttpServletRequest) request, - (HttpServletResponse) response); - } else { - servlet.service(request, response); - } - }*/ + // Servlet Service Method is called by the FilterChain request.removeAttribute(Globals.JSP_FILE_ATTR); support.fireInstanceEvent(InstanceEvent.AFTER_DISPATCH_EVENT, servlet, request, response); @@ -733,7 +761,6 @@ runtimeException = e; } - // Addtions by Greg Murray for Filter Chaining // Release the filter chain (if any) for this request try { if (filterChain != null) @@ -743,13 +770,10 @@ wrapper.getName()), e); //FIXME Exception handling needs to be simpiler to what is in the StandardWrapperValue } - // End Greg Murray additions // Deallocate the allocated servlet instance try { if (servlet != null) { - // if (debug >= 2) - // log(" Deallocating servlet instance"); wrapper.deallocate(servlet); } } catch (ServletException e) { 1.3 +49 -52 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationFilterFactory.java Index: ApplicationFilterFactory.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationFilterFactory.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ApplicationFilterFactory.java 23 Aug 2002 23:01:05 -0000 1.2 +++ ApplicationFilterFactory.java 12 Sep 2002 00:09:27 -0000 1.3 @@ -90,9 +90,13 @@ public final class ApplicationFilterFactory { - public static final int FORWARD =1; - public static final int INCLUDE =3; - public static final int REQUEST = 4; + public static final int ERROR = 1; + public static final int FORWARD =2; + public static final int INCLUDE =4; + public static final int REQUEST = 8; + + public static final String DISPATCHER_TYPE_ATTR="org.apache.catalina.core.DISPATCHER_TYPE"; + public static final String DISPATCHER_REQUEST_PATH_ATTR="org.apache.catalina.core.DISPATCHER_REQUEST_PATH"; // ----------------------------------------------------------- Constructors @@ -122,8 +126,15 @@ * @param servlet The servlet instance to be wrapped */ public ApplicationFilterChain createFilterChain(ServletRequest request, - Wrapper wrapper, Servlet servlet, int dispatcher) { + Wrapper wrapper, Servlet servlet) { + // get the dispatcher type + int dispatcher = -1; + if (request.getAttribute(DISPATCHER_TYPE_ATTR) != null) { + Integer dispatcherInt = (Integer)request.getAttribute(DISPATCHER_TYPE_ATTR); + dispatcher = dispatcherInt.intValue(); + } + String requestPath = (String)request.getAttribute(DISPATCHER_REQUEST_PATH_ATTR); HttpServletRequest hreq = null; if (request instanceof HttpServletRequest) hreq = (HttpServletRequest)request; // If there is no servlet to execute, return null @@ -144,77 +155,42 @@ // If there are no filter mappings, we are done if ((filterMaps == null) || (filterMaps.length == 0)) return (filterChain); -// if (debug >= 1) -// log("createFilterChain: Processing " + filterMaps.length + -// " filter map entries"); // Acquire the information we will need to match filter mappings - String requestPath = null; - if (hreq != null) { - String contextPath = hreq.getContextPath(); - if (contextPath == null) - contextPath = ""; - String requestURI = hreq.getRequestURI(); - //((HttpRequest) request).getDecodedRequestURI(); - if (requestURI.length() >= contextPath.length()) - requestPath = requestURI.substring(contextPath.length()); - } String servletName = wrapper.getName(); -// if (debug >= 1) { -// log(" requestPath=" + requestPath); -// log(" servletName=" + servletName); -// } + int n = 0; // Add the relevant path-mapped filters to this filter chain for (int i = 0; i < filterMaps.length; i++) { -// if (debug >= 2) -// log(" Checking path-mapped filter '" + -// filterMaps[i] + "'"); + if (!matchFiltersURL(filterMaps[i], requestPath, dispatcher)) continue; ApplicationFilterConfig filterConfig = (ApplicationFilterConfig) context.findFilterConfig(filterMaps[i].getFilterName()); if (filterConfig == null) { -// if (debug >= 2) -// log(" Missing path-mapped filter '" + -// filterMaps[i] + "'"); ; // FIXME - log configuration problem continue; } -// if (debug >= 2) -// log(" Adding path-mapped filter '" + -// filterConfig.getFilterName() + "'"); filterChain.addFilter(filterConfig); n++; } // Add filters that match on servlet name second for (int i = 0; i < filterMaps.length; i++) { -// if (debug >= 2) -// log(" Checking servlet-mapped filter '" + -// filterMaps[i] + "'"); if (!matchFiltersServlet(filterMaps[i], servletName, dispatcher)) continue; ApplicationFilterConfig filterConfig = (ApplicationFilterConfig) context.findFilterConfig(filterMaps[i].getFilterName()); if (filterConfig == null) { -// if (debug >= 2) -// log(" Missing servlet-mapped filter '" + -// filterMaps[i] + "'"); ; // FIXME - log configuration problem continue; } -// if (debug >= 2) -// log(" Adding servlet-mapped filter '" + -// filterMaps[i] + "'"); filterChain.addFilter(filterConfig); n++; } // Return the completed filter chain -// if (debug >= 2) -// log(" Returning chain with " + n + " filters"); return (filterChain); } @@ -231,10 +207,6 @@ String requestPath, int dispatcher) { -// if (debug >= 3) -// log(" Matching request path '" + requestPath + -// "' against mapping " + filterMap); - if (requestPath == null) return (false); @@ -286,8 +258,12 @@ switch (dispatcher) { case FORWARD : { if (filterMap.getDispatcherMapping() == FilterMap.FORWARD || - filterMap.getDispatcherMapping() == FilterMap.FORWARD_INCLUDE || + filterMap.getDispatcherMapping() == FilterMap.FORWARD_ERROR || + filterMap.getDispatcherMapping() == FilterMap.INCLUDE_FORWARD || + filterMap.getDispatcherMapping() == FilterMap.INCLUDE_ERROR_FORWARD || filterMap.getDispatcherMapping() == FilterMap.REQUEST_FORWARD || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_ERROR_FORWARD || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_ERROR_FORWARD_INCLUDE || filterMap.getDispatcherMapping() == FilterMap.REQUEST_FORWARD_INCLUDE) { return true; } @@ -295,8 +271,12 @@ } case INCLUDE : { if (filterMap.getDispatcherMapping() == FilterMap.INCLUDE || - filterMap.getDispatcherMapping() == FilterMap.FORWARD_INCLUDE || - filterMap.getDispatcherMapping() == FilterMap.REQUEST_INCLUDE|| + filterMap.getDispatcherMapping() == FilterMap.INCLUDE_ERROR || + filterMap.getDispatcherMapping() == FilterMap.INCLUDE_FORWARD || + filterMap.getDispatcherMapping() == FilterMap.INCLUDE_ERROR_FORWARD || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_INCLUDE || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_ERROR_INCLUDE || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_ERROR_FORWARD_INCLUDE || filterMap.getDispatcherMapping() == FilterMap.REQUEST_FORWARD_INCLUDE) { return true; } @@ -304,9 +284,26 @@ } case REQUEST : { if (filterMap.getDispatcherMapping() == FilterMap.REQUEST || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_ERROR || filterMap.getDispatcherMapping() == FilterMap.REQUEST_INCLUDE || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_ERROR_INCLUDE || filterMap.getDispatcherMapping() == FilterMap.REQUEST_FORWARD || - filterMap.getDispatcherMapping() == FilterMap.REQUEST_FORWARD_INCLUDE) { + filterMap.getDispatcherMapping() == FilterMap.REQUEST_ERROR_FORWARD || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_FORWARD_INCLUDE || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_ERROR_FORWARD_INCLUDE) { + return true; + } + break; + } + case ERROR : { + if (filterMap.getDispatcherMapping() == FilterMap.ERROR || + filterMap.getDispatcherMapping() == FilterMap.FORWARD_ERROR || + filterMap.getDispatcherMapping() == FilterMap.INCLUDE_ERROR || + filterMap.getDispatcherMapping() == FilterMap.INCLUDE_ERROR_FORWARD || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_ERROR || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_ERROR_FORWARD || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_ERROR_FORWARD_INCLUDE || + filterMap.getDispatcherMapping() == FilterMap.REQUEST_ERROR_INCLUDE) { return true; } break; 1.4 +17 -6 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java Index: StandardWrapperValve.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- StandardWrapperValve.java 23 Aug 2002 23:01:05 -0000 1.3 +++ StandardWrapperValve.java 12 Sep 2002 00:09:27 -0000 1.4 @@ -243,10 +243,21 @@ exception(request, response, e); servlet = null; } - + String requestPath = null; + if (hreq != null) { + String contextPath = hreq.getContextPath(); + if (contextPath == null) + contextPath = ""; + String requestURI = hreq.getRequestURI(); + if (requestURI.length() >= contextPath.length()) + requestPath = requestURI.substring(contextPath.length()); + } + sreq.setAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR, + new Integer(ApplicationFilterFactory.REQUEST)); + sreq.setAttribute(ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR, requestPath); // Create the filter chain for this request ApplicationFilterFactory factory = ApplicationFilterFactory.getInstance(); - ApplicationFilterChain filterChain = factory.createFilterChain(sreq, wrapper, servlet, ApplicationFilterFactory.REQUEST); + ApplicationFilterChain filterChain = factory.createFilterChain(sreq, wrapper, servlet); // Call the filter chain for this request // NOTE: This also calls the servlet's service() method 1.3 +66 -28 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/deploy/FilterMap.java Index: FilterMap.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/deploy/FilterMap.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- FilterMap.java 22 Aug 2002 22:05:51 -0000 1.2 +++ FilterMap.java 12 Sep 2002 00:09:28 -0000 1.3 @@ -83,27 +83,35 @@ // ------------------------------------------------------------- Properties - //added by Greg Murray - - public static final int FORWARD =1; - public static final int FORWARD_INCLUDE =2; - public static final int INCLUDE =3; - public static final int REQUEST = 4; - public static final int REQUEST_FORWARD =5; - public static final int REQUEST_INCLUDE =6; - public static final int REQUEST_FORWARD_INCLUDE =7; - - // represents nothing having been set. This will be seen - // as equal to a REQUEST - private static final int NOT_SET = -1; - - private int dispatcherMapping=NOT_SET; /** * The name of this filter to be executed when this mapping matches * a particular request. */ - private String filterName = null; + + public static final int ERROR = 1; + public static final int FORWARD = 2; + public static final int FORWARD_ERROR =3; + public static final int INCLUDE = 4; + public static final int INCLUDE_ERROR = 5; + public static final int INCLUDE_ERROR_FORWARD =6; + public static final int INCLUDE_FORWARD = 7; + public static final int REQUEST = 8; + public static final int REQUEST_ERROR = 9; + public static final int REQUEST_ERROR_FORWARD = 10; + public static final int REQUEST_ERROR_FORWARD_INCLUDE = 11; + public static final int REQUEST_ERROR_INCLUDE = 12; + public static final int REQUEST_FORWARD = 13; + public static final int REQUEST_INCLUDE = 14; + public static final int REQUEST_FORWARD_INCLUDE= 15; + + // represents nothing having been set. This will be seen + // as equal to a REQUEST + private static final int NOT_SET = -1; + + private int dispatcherMapping=NOT_SET; + + private String filterName = null; public String getFilterName() { return (this.filterName); @@ -140,59 +148,89 @@ public void setURLPattern(String urlPattern) { this.urlPattern = RequestUtil.URLDecode(urlPattern); } - + /** - * Added by Greg Murray * * This method will be used to set the current state of the FilterMap * representing the state of when filters should be applied: * + * ERROR * FORWARD - * FORWARD_INCLUDE + * FORWARD_ERROR * INCLUDE + * INCLUDE_ERROR + * INCLUDE_ERROR_FORWARD * REQUEST - * REQUEST_INCLUDE, + * REQUEST_ERROR + * REQUEST_ERROR_INCLUDE + * REQUEST_ERROR_FORWARD_INCLUDE + * REQUEST_INCLUDE * REQUEST_FORWARD, * REQUEST_FORWARD_INCLUDE * */ public void setDispatcher(String dispatcherString) { String dispatcher = dispatcherString.toUpperCase(); - + if (dispatcher.equals("FORWARD")) { // apply FORWARD to the global dispatcherMapping. switch (dispatcherMapping) { - case INCLUDE : dispatcherMapping = FORWARD_INCLUDE; break; case NOT_SET : dispatcherMapping = FORWARD; break; + case ERROR : dispatcherMapping = FORWARD_ERROR; + case INCLUDE : dispatcherMapping = INCLUDE_FORWARD; break; + case INCLUDE_ERROR : dispatcherMapping = INCLUDE_ERROR_FORWARD; break; case REQUEST : dispatcherMapping = REQUEST_FORWARD; break; + case REQUEST_ERROR : dispatcherMapping = REQUEST_ERROR_FORWARD; break; + case REQUEST_ERROR_INCLUDE : dispatcherMapping = REQUEST_ERROR_FORWARD_INCLUDE; break; case REQUEST_INCLUDE : dispatcherMapping = REQUEST_FORWARD_INCLUDE; break; } } else if (dispatcher.equals("INCLUDE")) { // apply INCLUDE to the global dispatcherMapping. switch (dispatcherMapping) { - case FORWARD : dispatcherMapping = FORWARD_INCLUDE; break; case NOT_SET : dispatcherMapping = INCLUDE; break; + case ERROR : dispatcherMapping = INCLUDE_ERROR; + case FORWARD : dispatcherMapping = INCLUDE_FORWARD; break; + case FORWARD_ERROR : dispatcherMapping = INCLUDE_ERROR_FORWARD; break; case REQUEST : dispatcherMapping = REQUEST_INCLUDE; break; + case REQUEST_ERROR : dispatcherMapping = REQUEST_ERROR_INCLUDE; break; + case REQUEST_ERROR_FORWARD : dispatcherMapping = REQUEST_ERROR_FORWARD_INCLUDE; break; case REQUEST_FORWARD : dispatcherMapping = REQUEST_FORWARD_INCLUDE; break; } } else if (dispatcher.equals("REQUEST")) { // apply REQUEST to the global dispatcherMapping. switch (dispatcherMapping) { + case NOT_SET : dispatcherMapping = REQUEST; break; + case ERROR : dispatcherMapping = REQUEST_ERROR; case FORWARD : dispatcherMapping = REQUEST_FORWARD; break; + case FORWARD_ERROR : dispatcherMapping = REQUEST_ERROR_FORWARD; break; case INCLUDE : dispatcherMapping = REQUEST_INCLUDE; break; - case NOT_SET : dispatcherMapping = REQUEST; break; - case FORWARD_INCLUDE : dispatcherMapping = REQUEST_FORWARD_INCLUDE; break; + case INCLUDE_ERROR : dispatcherMapping = REQUEST_ERROR_INCLUDE; break; + case INCLUDE_FORWARD : dispatcherMapping = REQUEST_FORWARD_INCLUDE; break; + case INCLUDE_ERROR_FORWARD : dispatcherMapping = REQUEST_ERROR_FORWARD_INCLUDE; break; + } + } else if (dispatcher.equals("ERROR")) { + // apply ERROR to the global dispatcherMapping. + switch (dispatcherMapping) { + case NOT_SET : dispatcherMapping = ERROR; break; + case FORWARD : dispatcherMapping = FORWARD_ERROR; break; + case INCLUDE : dispatcherMapping = INCLUDE_ERROR; break; + case INCLUDE_FORWARD : dispatcherMapping = INCLUDE_ERROR_FORWARD; break; + case REQUEST : dispatcherMapping = REQUEST_ERROR; + case REQUEST_INCLUDE : dispatcherMapping = REQUEST_ERROR_INCLUDE; + case REQUEST_FORWARD : dispatcherMapping = REQUEST_ERROR_FORWARD; + case REQUEST_FORWARD_INCLUDE : dispatcherMapping = REQUEST_ERROR_FORWARD_INCLUDE; } } } - + public int getDispatcherMapping() { // per the SRV.6.2.5 absence of any dispatcher elements is // equivelant to a REQUEST value if (dispatcherMapping == NOT_SET) return REQUEST; - else return dispatcherMapping; + else return dispatcherMapping; } + // --------------------------------------------------------- Public Methods 1.3 +9 -5 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/ErrorDispatcherValve.java Index: ErrorDispatcherValve.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/ErrorDispatcherValve.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ErrorDispatcherValve.java 15 Aug 2002 19:11:31 -0000 1.2 +++ ErrorDispatcherValve.java 12 Sep 2002 00:09:28 -0000 1.3 @@ -91,7 +91,7 @@ import org.apache.catalina.deploy.ErrorPage; import org.apache.catalina.util.RequestUtil; import org.apache.catalina.util.StringManager; - +import org.apache.catalina.core.ApplicationFilterFactory; /** * <p>Implementation of a Valve that handles the error dispatch (that is, will @@ -231,6 +231,10 @@ response.setAppCommitted(false); ServletRequest sreq = request.getRequest(); ServletResponse sresp = response.getResponse(); + sreq.setAttribute(ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR, + errorPage.getLocation()); + sreq.setAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR, + new Integer(ApplicationFilterFactory.ERROR)); sreq.setAttribute (Globals.STATUS_CODE_ATTR, new Integer(HttpServletResponse.SC_INTERNAL_SERVER_ERROR));
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>