DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10457>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10457 Patch submission for DefaultServlet/WebdavServlet to be more flexible Summary: Patch submission for DefaultServlet/WebdavServlet to be more flexible Product: Tomcat 4 Version: 4.0.4 Final Platform: Other OS/Version: Other Status: NEW Severity: Enhancement Priority: Other Component: Servlets:WebDAV AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] The following are two patches that I posted to the tomcat-dev mailing list but seemingly got ignored. Someone suggested I use the bug database to post the stuff so it could get better tracked. So, here goes: Two patches cut-n-pasted below, catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java There are two main pieces to this patch: 1) The addition of an "isDefaultServlet" initialization parameter to the WebdavServlet This allows the webdav servlet to be integrated as both the default servlet as well as a url-pattern prefix servlet. Some small mods are made to generate correct HREF's in a PROPFIND request based on this parameter value. 2) Parameterize getResources() DefaultServlet and WebdavServlet to pass in a HttpServletRequest object so that DirContext's can be created by derived servlets to return DirContext's on other request-based parameters, either in the URL or session or whatever. The default behavior is to simply ignore the HttpServletRequest parameter and return the same DirContext that has always been returned (the one created on webapp initialization). Lemme know if this can be applied by somebody. Thanks russ Index: WebdavServlet.java =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java,v retrieving revision 1.25.2.2 diff -u -r1.25.2.2 WebdavServlet.java --- WebdavServlet.java 1 Apr 2002 18:17:43 -0000 1.25.2.2 +++ WebdavServlet.java 24 Jun 2002 18:33:09 -0000 @@ -1,5 +1,5 @@ /* - * $Header: /home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java,v 1.25.2.2 2002/04/01 18:17:43 remm Exp $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java,v 1.25.2.2 2002/04/01 18:17:43 remm Exp $ * $Revision: 1.25.2.2 $ * $Date: 2002/04/01 18:17:43 $ * @@ -249,6 +249,19 @@ */ private String secret = "catalina"; + + /** + * This flag keeps track of whether the servlet is invoked as the "default" + * servlet for the web application. We need to know the difference + * since the because we use HttpServletRequest methods to generate + * HREF's in the XML that gets returned for PROPFIND, etc. In testing, + * depending on the Webdav client and if this servlet is + * a default servlet the behavior of getServletPath() + * and getPathInfo() varies. A user must put "true" in the web.xml + * for this init parameter if the <url-pattern> for the servlet + * is the string "/". + */ + private boolean isDefaultServlet = true; // --------------------------------------------------------- Public Methods @@ -266,6 +279,9 @@ value = getServletConfig().getInitParameter("secret"); if (value != null) secret = value; + + value = getServletConfig().getInitParameter("isDefaultServlet"); + isDefaultServlet = new Boolean(value).booleanValue(); } catch (Throwable t) { ; } @@ -292,7 +308,6 @@ return documentBuilder; } - /** * Handles the special WebDAV methods. */ @@ -365,7 +380,7 @@ String methodsAllowed = null; // Retrieve the resources - DirContext resources = getResources(); + DirContext resources = getResources(req); if (resources == null) { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); @@ -504,7 +519,7 @@ } // Retrieve the resources - DirContext resources = getResources(); + DirContext resources = getResources(req); if (resources == null) { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); @@ -700,7 +715,7 @@ } // Retrieve the resources - DirContext resources = getResources(); + DirContext resources = getResources(req); if (resources == null) { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); @@ -1038,7 +1053,7 @@ lock.path = path; // Retrieve the resources - DirContext resources = getResources(); + DirContext resources = getResources(req); if (resources == null) { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); @@ -1594,7 +1609,7 @@ // Overwriting the destination // Retrieve the resources - DirContext resources = getResources(); + DirContext resources = getResources(req); if (resources == null) { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); @@ -1779,7 +1794,7 @@ } // Retrieve the resources - DirContext resources = getResources(); + DirContext resources = getResources(req); if (resources == null) { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); @@ -2003,6 +2018,12 @@ generatedXML.writeElement(null, "href", XMLWriter.OPENING); String href = req.getContextPath(); + if (!isDefaultServlet) + { + // A non-default servlet will need to have the url-pattern from + // getServletPath() appended so the HREF's get generated correctly. + href += req.getServletPath(); + } if ((href.endsWith("/")) && (path.startsWith("/"))) href += path.substring(1); else Index: DefaultServlet.java =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v retrieving revision 1.39.2.6 diff -u -r1.39.2.6 DefaultServlet.java --- DefaultServlet.java 18 Apr 2002 03:08:04 -0000 1.39.2.6 +++ DefaultServlet.java 24 Jun 2002 18:33:23 -0000 @@ -1,5 +1,5 @@ /* - * $Header: /home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v 1.39.2.6 2002/04/18 03:08:04 billbarker Exp $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v 1.39.2.6 2002/04/18 03:08:04 billbarker Exp $ * $Revision: 1.39.2.6 $ * $Date: 2002/04/18 03:08:04 $ * @@ -344,6 +344,18 @@ /** + * Return a DirContext. This can be overridden in subclasses to return + * different kind of DirContexts if desired, perhaps based on data in the + * request. By, default we call DefaultServlet's getResources() to return + * the context-configured resource. + */ + protected DirContext getResources(HttpServletRequest request) + { + return getResources(); + } + + + /** * Get resources. This method will try to retrieve the resources through * JNDI first, then in the servlet context if JNDI has failed (it could be * disabled). It will return null. @@ -588,7 +600,7 @@ } // Retrieve the resources - DirContext resources = getResources(); + DirContext resources = getResources(req); if (resources == null) { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); @@ -655,7 +667,7 @@ // Retrieve the Catalina context // Retrieve the resources - DirContext resources = getResources(); + DirContext resources = getResources(req); if (resources == null) { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); @@ -1049,7 +1061,7 @@ } // Retrieve the Catalina context and Resources implementation - DirContext resources = getResources(); + DirContext resources = getResources(request); ResourceInfo resourceInfo = new ResourceInfo(path, resources); if (!resourceInfo.exists) { -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>