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]>

Reply via email to