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