Two patches attached, 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: 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) {
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
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>