This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/7.0.x by this push:
     new 747aa7b  Refactor Default servlet to simplify support for custom ETag 
formats
747aa7b is described below

commit 747aa7ba11f05a39339aef8da768ec57ad005912
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Aug 10 17:19:52 2020 +0100

    Refactor Default servlet to simplify support for custom ETag formats
---
 .../apache/catalina/servlets/DefaultServlet.java   | 27 ++++++++++++++++++----
 .../apache/catalina/servlets/WebdavServlet.java    |  2 +-
 webapps/docs/changelog.xml                         |  5 ++++
 3 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/java/org/apache/catalina/servlets/DefaultServlet.java 
b/java/org/apache/catalina/servlets/DefaultServlet.java
index fa2806c..2c8ca97 100644
--- a/java/org/apache/catalina/servlets/DefaultServlet.java
+++ b/java/org/apache/catalina/servlets/DefaultServlet.java
@@ -902,7 +902,7 @@ public class DefaultServlet extends HttpServlet {
                 ranges = parseRange(request, response, cacheEntry.attributes);
 
                 // ETag header
-                response.setHeader("ETag", cacheEntry.attributes.getETag());
+                response.setHeader("ETag", 
generateETag(cacheEntry.attributes));
 
                 // Last-Modified header
                 response.setHeader("Last-Modified",
@@ -1181,7 +1181,7 @@ public class DefaultServlet extends HttpServlet {
                 // Ignore
             }
 
-            String eTag = resourceAttributes.getETag();
+            String eTag = generateETag(resourceAttributes);
             long lastModified = resourceAttributes.getLastModified();
 
             if (headerValueTime == (-1L)) {
@@ -1910,7 +1910,7 @@ public class DefaultServlet extends HttpServlet {
             HttpServletResponse response, ResourceAttributes 
resourceAttributes)
             throws IOException {
 
-        String eTag = resourceAttributes.getETag();
+        String eTag = generateETag(resourceAttributes);
         // Default servlet uses weak matching so we strip any leading "W/" and
         // then compare using equals
         if (eTag.startsWith("W/")) {
@@ -1971,7 +1971,7 @@ public class DefaultServlet extends HttpServlet {
                     // The entity has not been modified since the date
                     // specified by the client. This is not an error case.
                     response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
-                    response.setHeader("ETag", resourceAttributes.getETag());
+                    response.setHeader("ETag", 
generateETag(resourceAttributes));
 
                     return false;
                 }
@@ -1998,7 +1998,7 @@ public class DefaultServlet extends HttpServlet {
             HttpServletResponse response, ResourceAttributes 
resourceAttributes)
             throws IOException {
 
-        String eTag = resourceAttributes.getETag();
+        String eTag = generateETag(resourceAttributes);
         String headerValue = request.getHeader("If-None-Match");
         if (headerValue != null) {
 
@@ -2072,6 +2072,23 @@ public class DefaultServlet extends HttpServlet {
 
 
     /**
+     * Provides the entity tag (the ETag header) for the given resource
+     * attributes. Intended to be over-ridden by custom DefaultServlet
+     * implementations that wish to use an alternative format for the entity
+     * tag.
+     *
+     * @param resourceAttributes  The resource attributes for which an entity
+     *                            tag is required.
+     *
+     * @return The result of calling {@link ResourceAttributes#getETag()} on 
the given
+     *         resource
+     */
+    protected String generateETag(ResourceAttributes resourceAttributes) {
+        return resourceAttributes.getETag();
+    }
+
+
+    /**
      * Copy the contents of the specified input stream to the specified
      * output stream, and ensure that both streams are closed before returning
      * (even in the face of an exception).
diff --git a/java/org/apache/catalina/servlets/WebdavServlet.java 
b/java/org/apache/catalina/servlets/WebdavServlet.java
index 2623a94..d8642ba 100644
--- a/java/org/apache/catalina/servlets/WebdavServlet.java
+++ b/java/org/apache/catalina/servlets/WebdavServlet.java
@@ -2128,7 +2128,7 @@ public class WebdavServlet extends DefaultServlet {
         generatePropFindResponse(generatedXML, rewrittenUrl, path, type, 
propertiesVector,
                 cacheEntry.context == null, false, 
cacheEntry.attributes.getCreation(), cacheEntry.attributes.getLastModified(),
                 cacheEntry.attributes.getContentLength(), 
getServletContext().getMimeType(cacheEntry.name),
-                cacheEntry.attributes.getETag());
+                generateETag(cacheEntry.attributes));
     }
 
 
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 88cad2b..8e71230 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -67,6 +67,11 @@
         prevent a potential exception when running under a security manager.
         Patch provided by Johnathan Gilday. (markt)
       </fix>
+      <add>
+        Refactor the Default servlet to provide a single method that can be
+        overridden (<code>generateETag()</code>) should a custom entity tag
+        format be required. (markt)
+      </add>
     </changelog>
   </subsection>
   <subsection name="Coyote">


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to