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

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


The following commit(s) were added to refs/heads/main by this push:
     new 776f350e87 Complete the early hints implementation by updating the 
Servlet API
776f350e87 is described below

commit 776f350e87280e9dbfe9aa559ecb81a7d5afde77
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Thu Aug 15 14:39:09 2024 +0100

    Complete the early hints implementation by updating the Servlet API
---
 java/jakarta/servlet/http/HttpServletResponse.java    | 19 +++++++++++++++++++
 .../servlet/http/HttpServletResponseWrapper.java      | 11 +++++++++++
 java/org/apache/catalina/connector/Response.java      |  1 +
 .../org/apache/catalina/connector/ResponseFacade.java |  1 +
 .../catalina/filters/TesterHttpServletResponse.java   |  5 +++++
 webapps/docs/changelog.xml                            |  8 ++++++++
 6 files changed, 45 insertions(+)

diff --git a/java/jakarta/servlet/http/HttpServletResponse.java 
b/java/jakarta/servlet/http/HttpServletResponse.java
index 49be83c10a..85c79c1a8f 100644
--- a/java/jakarta/servlet/http/HttpServletResponse.java
+++ b/java/jakarta/servlet/http/HttpServletResponse.java
@@ -212,6 +212,17 @@ public interface HttpServletResponse extends 
ServletResponse {
      */
     void sendRedirect(String location, int sc, boolean clearBuffer) throws 
IOException;
 
+    /**
+     * Sends a 103 response to the client using the current response headers. 
This method does not commit the response and
+     * may be called multiple times before the response is committed. The 
current response headers may include some headers
+     * that have been added automatcially by the container.
+     * <p>
+     * This method has no effect if called after the response has been 
committed.
+     *
+     * @since Servlet 6.2
+     */
+    void sendEarlyHints();
+
     /**
      * Sets a response header with the given name and date-value. The date is 
specified in terms of milliseconds since
      * the epoch. If the header had already been set, the new value overwrites 
the previous one. The
@@ -386,6 +397,14 @@ public interface HttpServletResponse extends 
ServletResponse {
      */
     int SC_SWITCHING_PROTOCOLS = 101;
 
+    /**
+     * Status code (103) indicating that the server is likely to send a final 
response containing the headers present in
+     * this informational response.
+     *
+     * @since Servlet 6.2
+     */
+    int SC_EARLY_HINTS = 103;
+
     /**
      * Status code (200) indicating the request succeeded normally.
      */
diff --git a/java/jakarta/servlet/http/HttpServletResponseWrapper.java 
b/java/jakarta/servlet/http/HttpServletResponseWrapper.java
index 665ee96e50..3fbfd8c04e 100644
--- a/java/jakarta/servlet/http/HttpServletResponseWrapper.java
+++ b/java/jakarta/servlet/http/HttpServletResponseWrapper.java
@@ -139,6 +139,17 @@ public class HttpServletResponseWrapper extends 
ServletResponseWrapper implement
     }
 
 
+    /**
+     * The default behavior of this method is to call sendEarlyHints() on the 
wrapped response object.
+     *
+     * @since Servlet 6.2
+     */
+    @Override
+    public void sendEarlyHints() {
+        this._getHttpServletResponse().sendEarlyHints();
+    }
+
+
     /**
      * The default behavior of this method is to call setDateHeader(String 
name, long date) on the wrapped response
      * object.
diff --git a/java/org/apache/catalina/connector/Response.java 
b/java/org/apache/catalina/connector/Response.java
index 66dd7cab47..3a3b4237d3 100644
--- a/java/org/apache/catalina/connector/Response.java
+++ b/java/org/apache/catalina/connector/Response.java
@@ -1037,6 +1037,7 @@ public class Response implements HttpServletResponse {
     }
 
 
+    @Override
     public void sendEarlyHints() {
         if (isCommitted()) {
             return;
diff --git a/java/org/apache/catalina/connector/ResponseFacade.java 
b/java/org/apache/catalina/connector/ResponseFacade.java
index dcc4ee059d..6c12853f1f 100644
--- a/java/org/apache/catalina/connector/ResponseFacade.java
+++ b/java/org/apache/catalina/connector/ResponseFacade.java
@@ -245,6 +245,7 @@ public class ResponseFacade implements HttpServletResponse {
     }
 
 
+    @Override
     public void sendEarlyHints() {
         response.sendEarlyHints();
     }
diff --git a/test/org/apache/catalina/filters/TesterHttpServletResponse.java 
b/test/org/apache/catalina/filters/TesterHttpServletResponse.java
index 38e8e53617..3b284d1a7b 100644
--- a/test/org/apache/catalina/filters/TesterHttpServletResponse.java
+++ b/test/org/apache/catalina/filters/TesterHttpServletResponse.java
@@ -353,6 +353,11 @@ public class TesterHttpServletResponse implements 
HttpServletResponse {
     public void sendRedirect(String location, int sc, boolean clearBuffer) 
throws IOException {
         /* NOOP */}
 
+    @Override
+    public void sendEarlyHints() {
+        /* NOOP */
+    }
+
     @Override
     public void setDateHeader(String name, long value) {
         /* NOOP */}
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index bcd5a4398b..18b4733a82 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -113,6 +113,14 @@
       </scode>
     </changelog>
   </subsection>
+  <subsection name="Catalina">
+    <changelog>
+      <add>
+        Add support for the new Servlet API method
+        <code>HttpServletResponse.sendEarlyHints()</code>. (markt)
+      </add>
+    </changelog>
+  </subsection>
   <subsection name="Coyote">
     <changelog>
       <fix>


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

Reply via email to