This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 9.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 6c06abf43cc27eec30b61f7d178a73f11a748c66 Author: Mark Thomas <ma...@apache.org> AuthorDate: Thu Sep 11 12:11:36 2025 +0100 Use constant for HEAD --- java/org/apache/catalina/authenticator/FormAuthenticator.java | 2 +- java/org/apache/catalina/connector/OutputBuffer.java | 3 ++- java/org/apache/catalina/filters/CorsFilter.java | 2 +- java/org/apache/catalina/filters/ExpiresFilter.java | 2 +- java/org/apache/catalina/servlets/CGIServlet.java | 6 +++--- java/org/apache/catalina/servlets/DefaultServlet.java | 4 ++-- java/org/apache/catalina/ssi/SSIServletExternalResolver.java | 3 ++- java/org/apache/coyote/ajp/AjpProcessor.java | 3 ++- java/org/apache/coyote/ajp/Constants.java | 2 +- java/org/apache/coyote/http11/Http11Processor.java | 3 ++- test/javax/servlet/http/HttpServletDoHeadBaseTest.java | 3 ++- test/org/apache/catalina/filters/TestCorsFilter.java | 2 +- test/org/apache/catalina/servlets/TestDefaultServletOptions.java | 2 +- .../catalina/servlets/TestDefaultServletRfc9110Section14.java | 3 ++- .../apache/catalina/servlets/TestWebdavServletOptionCollection.java | 2 +- test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java | 2 +- .../apache/catalina/servlets/TestWebdavServletOptionsUnknown.java | 2 +- test/org/apache/catalina/startup/TomcatBaseTest.java | 2 +- test/org/apache/coyote/ajp/SimpleAjpClient.java | 4 ++-- test/org/apache/coyote/http2/Http2TestBase.java | 2 +- 20 files changed, 30 insertions(+), 24 deletions(-) diff --git a/java/org/apache/catalina/authenticator/FormAuthenticator.java b/java/org/apache/catalina/authenticator/FormAuthenticator.java index bd18064e7d..dcf783338f 100644 --- a/java/org/apache/catalina/authenticator/FormAuthenticator.java +++ b/java/org/apache/catalina/authenticator/FormAuthenticator.java @@ -591,7 +591,7 @@ public class FormAuthenticator extends AuthenticatorBase { String method = saved.getMethod(); MimeHeaders rmh = request.getCoyoteRequest().getMimeHeaders(); rmh.recycle(); - boolean cacheable = Method.GET.equals(method) || "HEAD".equals(method); + boolean cacheable = Method.GET.equals(method) || Method.HEAD.equals(method); Iterator<String> names = saved.getHeaderNames(); while (names.hasNext()) { String name = names.next(); diff --git a/java/org/apache/catalina/connector/OutputBuffer.java b/java/org/apache/catalina/connector/OutputBuffer.java index 9d0a3c08be..3f7cf9c8cf 100644 --- a/java/org/apache/catalina/connector/OutputBuffer.java +++ b/java/org/apache/catalina/connector/OutputBuffer.java @@ -37,6 +37,7 @@ import org.apache.coyote.CloseNowException; import org.apache.coyote.Response; import org.apache.tomcat.util.buf.B2CConverter; import org.apache.tomcat.util.buf.C2BConverter; +import org.apache.tomcat.util.http.Method; import org.apache.tomcat.util.res.StringManager; /** @@ -239,7 +240,7 @@ public class OutputBuffer extends Writer { // AND // - some content has been written OR this is NOT a HEAD request if (!coyoteResponse.isCommitted() && coyoteResponse.getContentLengthLong() == -1 && - (bb.remaining() > 0 || !"HEAD".equals(coyoteResponse.getRequest().getMethod()))) { + (bb.remaining() > 0 || !Method.HEAD.equals(coyoteResponse.getRequest().getMethod()))) { coyoteResponse.setContentLength(bb.remaining()); } diff --git a/java/org/apache/catalina/filters/CorsFilter.java b/java/org/apache/catalina/filters/CorsFilter.java index 329eabc09d..ee388a65ae 100644 --- a/java/org/apache/catalina/filters/CorsFilter.java +++ b/java/org/apache/catalina/filters/CorsFilter.java @@ -568,7 +568,7 @@ public class CorsFilter extends GenericFilter { } return CORSRequestType.ACTUAL; case Method.GET: - case "HEAD": + case Method.HEAD: return CORSRequestType.SIMPLE; case Method.POST: String mediaType = MediaType.parseMediaTypeOnly(request.getContentType()); diff --git a/java/org/apache/catalina/filters/ExpiresFilter.java b/java/org/apache/catalina/filters/ExpiresFilter.java index 8315a26e52..c80bd30374 100644 --- a/java/org/apache/catalina/filters/ExpiresFilter.java +++ b/java/org/apache/catalina/filters/ExpiresFilter.java @@ -1425,7 +1425,7 @@ public class ExpiresFilter extends FilterBase { // Don't add cache headers unless the request is a GET or a HEAD request String method = request.getMethod(); - if (!Method.GET.equals(method) && !"HEAD".equals(method)) { + if (!Method.GET.equals(method) && !Method.HEAD.equals(method)) { if (log.isDebugEnabled()) { log.debug(sm.getString("expiresFilter.invalidMethod", request.getRequestURI(), method)); } diff --git a/java/org/apache/catalina/servlets/CGIServlet.java b/java/org/apache/catalina/servlets/CGIServlet.java index 4326c73173..c1ca55f250 100644 --- a/java/org/apache/catalina/servlets/CGIServlet.java +++ b/java/org/apache/catalina/servlets/CGIServlet.java @@ -214,7 +214,7 @@ public final class CGIServlet extends HttpServlet { private static final String ALLOW_ANY_PATTERN = ".*"; static { - DEFAULT_SUPER_METHODS.add("HEAD"); + DEFAULT_SUPER_METHODS.add(Method.HEAD); DEFAULT_SUPER_METHODS.add("OPTIONS"); DEFAULT_SUPER_METHODS.add("TRACE"); @@ -724,8 +724,8 @@ public final class CGIServlet extends HttpServlet { // does not contain an unencoded "=" this is an indexed query. // The parsed query string becomes the command line parameters // for the cgi command. - if (enableCmdLineArguments && (Method.GET.equals(req.getMethod()) || req.getMethod().equals(Method.POST) || - req.getMethod().equals("HEAD"))) { + if (enableCmdLineArguments && (Method.GET.equals(req.getMethod()) || Method.POST.equals(req.getMethod()) || + Method.HEAD.equals(req.getMethod()))) { String qs; if (isIncluded) { qs = (String) req.getAttribute(RequestDispatcher.INCLUDE_QUERY_STRING); diff --git a/java/org/apache/catalina/servlets/DefaultServlet.java b/java/org/apache/catalina/servlets/DefaultServlet.java index 75f83a9c41..91adc827b5 100644 --- a/java/org/apache/catalina/servlets/DefaultServlet.java +++ b/java/org/apache/catalina/servlets/DefaultServlet.java @@ -2378,7 +2378,7 @@ public class DefaultServlet extends HttpServlet { WebResource resource) { String method = request.getMethod(); - if (!Method.GET.equals(method) && !"HEAD".equals(method)) { + if (!Method.GET.equals(method) && !Method.HEAD.equals(method)) { return true; } @@ -2486,7 +2486,7 @@ public class DefaultServlet extends HttpServlet { // 304 Not Modified. // For every other method, 412 Precondition Failed is sent // back. - if (Method.GET.equals(request.getMethod()) || "HEAD".equals(request.getMethod())) { + if (Method.GET.equals(request.getMethod()) || Method.HEAD.equals(request.getMethod())) { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); response.setHeader("ETag", resourceETag); } else { diff --git a/java/org/apache/catalina/ssi/SSIServletExternalResolver.java b/java/org/apache/catalina/ssi/SSIServletExternalResolver.java index 65bf65a99c..3cf7c4ff80 100644 --- a/java/org/apache/catalina/ssi/SSIServletExternalResolver.java +++ b/java/org/apache/catalina/ssi/SSIServletExternalResolver.java @@ -38,6 +38,7 @@ import org.apache.catalina.connector.Connector; import org.apache.catalina.connector.Request; import org.apache.tomcat.util.buf.B2CConverter; import org.apache.tomcat.util.buf.UDecoder; +import org.apache.tomcat.util.http.Method; import org.apache.tomcat.util.http.RequestUtil; import org.apache.tomcat.util.res.StringManager; @@ -501,7 +502,7 @@ public class SSIServletExternalResolver implements SSIExternalResolver { * Make an assumption that an empty response is a failure. This is a problem if a truly empty file were * included, but not sure how else to tell. */ - if (retVal.isEmpty() && !req.getMethod().equals("HEAD")) { + if (retVal.isEmpty() && !Method.HEAD.equals(req.getMethod())) { throw new IOException(sm.getString("ssiServletExternalResolver.noFile", path)); } return retVal; diff --git a/java/org/apache/coyote/ajp/AjpProcessor.java b/java/org/apache/coyote/ajp/AjpProcessor.java index 9b74273dba..5c129a13b5 100644 --- a/java/org/apache/coyote/ajp/AjpProcessor.java +++ b/java/org/apache/coyote/ajp/AjpProcessor.java @@ -48,6 +48,7 @@ import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.buf.MessageBytes; +import org.apache.tomcat.util.http.Method; import org.apache.tomcat.util.http.MimeHeaders; import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState; import org.apache.tomcat.util.net.ApplicationBufferHandler; @@ -931,7 +932,7 @@ public class AjpProcessor extends AbstractProcessor { // Responses with certain status codes and/or methods are not permitted to include a response body. int statusCode = response.getStatus(); if (statusCode < 200 || statusCode == 204 || statusCode == 205 || statusCode == 304 || - "HEAD".equals(request.getMethod())) { + Method.HEAD.equals(request.getMethod())) { // No entity body swallowResponse = true; } diff --git a/java/org/apache/coyote/ajp/Constants.java b/java/org/apache/coyote/ajp/Constants.java index c979f2f9c7..7363c174f7 100644 --- a/java/org/apache/coyote/ajp/Constants.java +++ b/java/org/apache/coyote/ajp/Constants.java @@ -107,7 +107,7 @@ public final class Constants { // Translates integer codes to names of HTTP methods private static final String[] methodTransArray = - { "OPTIONS", Method.GET, "HEAD", Method.POST, Method.PUT, "DELETE", "TRACE", "PROPFIND", "PROPPATCH", "MKCOL", "COPY", + { "OPTIONS", Method.GET, Method.HEAD, Method.POST, Method.PUT, "DELETE", "TRACE", "PROPFIND", "PROPPATCH", "MKCOL", "COPY", "MOVE", "LOCK", "UNLOCK", "ACL", "REPORT", "VERSION-CONTROL", "CHECKIN", "CHECKOUT", "UNCHECKOUT", "SEARCH", "MKWORKSPACE", "UPDATE", "LABEL", "MERGE", "BASELINE-CONTROL", "MKACTIVITY" }; diff --git a/java/org/apache/coyote/http11/Http11Processor.java b/java/org/apache/coyote/http11/Http11Processor.java index 3f042ea177..9baecfec8f 100644 --- a/java/org/apache/coyote/http11/Http11Processor.java +++ b/java/org/apache/coyote/http11/Http11Processor.java @@ -54,6 +54,7 @@ import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.buf.MessageBytes; import org.apache.tomcat.util.http.FastHttpDateFormat; +import org.apache.tomcat.util.http.Method; import org.apache.tomcat.util.http.MimeHeaders; import org.apache.tomcat.util.http.parser.HttpParser; import org.apache.tomcat.util.http.parser.TokenList; @@ -901,7 +902,7 @@ public class Http11Processor extends AbstractProcessor { } } - boolean head = "HEAD".equals(request.getMethod()); + boolean head = Method.HEAD.equals(request.getMethod()); if (head) { // Any entity body, if present, should not be sent outputBuffer.addActiveFilter(outputFilters[Constants.VOID_FILTER]); diff --git a/test/javax/servlet/http/HttpServletDoHeadBaseTest.java b/test/javax/servlet/http/HttpServletDoHeadBaseTest.java index 0856a03227..03b928fee3 100644 --- a/test/javax/servlet/http/HttpServletDoHeadBaseTest.java +++ b/test/javax/servlet/http/HttpServletDoHeadBaseTest.java @@ -41,6 +41,7 @@ import org.apache.coyote.http2.Http2TestBase; import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.collections.CaseInsensitiveKeyMap; import org.apache.tomcat.util.compat.JreCompat; +import org.apache.tomcat.util.http.Method; /* * Split into multiple tests as a single test takes so long it impacts the time @@ -245,7 +246,7 @@ public class HttpServletDoHeadBaseTest extends Http2TestBase { int adjustedBufferSize = bufferSize; boolean resetBufferSize = false; - if (JreCompat.isJre19Available() && "HEAD".equals(req.getMethod()) && useWriter && + if (JreCompat.isJre19Available() && Method.HEAD.equals(req.getMethod()) && useWriter && resetType != ResetType.NONE) { /* * Using legacy (non-legacy isn't available until Servlet 6.0 / Tomcat 10.1.x) HEAD handling with a diff --git a/test/org/apache/catalina/filters/TestCorsFilter.java b/test/org/apache/catalina/filters/TestCorsFilter.java index bda2d7c7f3..da1b0a8a65 100644 --- a/test/org/apache/catalina/filters/TestCorsFilter.java +++ b/test/org/apache/catalina/filters/TestCorsFilter.java @@ -110,7 +110,7 @@ public class TestCorsFilter { public void testDoFilterSimpleHEAD() throws IOException, ServletException { TesterHttpServletRequest request = new TesterHttpServletRequest(); request.setHeader(CorsFilter.REQUEST_HEADER_ORIGIN, TesterFilterConfigs.HTTPS_WWW_APACHE_ORG); - request.setMethod("HEAD"); + request.setMethod(Method.HEAD); TesterHttpServletResponse response = new TesterHttpServletResponse(); CorsFilter corsFilter = new CorsFilter(); diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java b/test/org/apache/catalina/servlets/TestDefaultServletOptions.java index 7a6ce3ee59..098961f80f 100644 --- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java +++ b/test/org/apache/catalina/servlets/TestDefaultServletOptions.java @@ -34,7 +34,7 @@ public class TestDefaultServletOptions extends ServletOptionsBaseTest { @Parameters public static Collection<Object[]> inputs() { String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, UNKNOWN_NAME }; - String[] methods = new String[] { Method.GET, Method.POST, "HEAD", "TRACE", Method.PUT, "DELETE" }; + String[] methods = new String[] { Method.GET, Method.POST, Method.HEAD, "TRACE", Method.PUT, "DELETE" }; List<Object[]> result = new ArrayList<>(); diff --git a/test/org/apache/catalina/servlets/TestDefaultServletRfc9110Section14.java b/test/org/apache/catalina/servlets/TestDefaultServletRfc9110Section14.java index b7dc76b93b..91aa5b3df2 100644 --- a/test/org/apache/catalina/servlets/TestDefaultServletRfc9110Section14.java +++ b/test/org/apache/catalina/servlets/TestDefaultServletRfc9110Section14.java @@ -31,6 +31,7 @@ import org.apache.catalina.Context; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.startup.TomcatBaseTest; import org.apache.tomcat.util.buf.ByteChunk; +import org.apache.tomcat.util.http.Method; public class TestDefaultServletRfc9110Section14 extends TomcatBaseTest { @@ -63,7 +64,7 @@ public class TestDefaultServletRfc9110Section14 extends TomcatBaseTest { Assert.assertTrue("Range requests is turn on, header `Accept-Ranges: bytes` is expected", responseHeaders.containsKey("Accept-Ranges") && responseHeaders.get("Accept-Ranges").contains("bytes")); - rc = methodUrl(path, responseBody, DEFAULT_CLIENT_TIMEOUT_MS, requestHeaders, responseHeaders, "HEAD"); + rc = methodUrl(path, responseBody, DEFAULT_CLIENT_TIMEOUT_MS, requestHeaders, responseHeaders, Method.HEAD); Assert.assertEquals("Range requests is turn on, SC_OK of HEAD is expected", HttpServletResponse.SC_OK, rc); Assert.assertTrue("Range requests is turn on, header `Accept-Ranges: bytes` is expected", responseHeaders.containsKey("Accept-Ranges") && responseHeaders.get("Accept-Ranges").contains("bytes")); diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java index ab4e6d6c7f..9976f331cd 100644 --- a/test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java +++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java @@ -37,7 +37,7 @@ public class TestWebdavServletOptionCollection extends ServletOptionsBaseTest { @Parameters public static Collection<Object[]> inputs() { - String[] methods = new String[] { Method.GET, Method.POST, "HEAD", "TRACE", Method.PUT, "DELETE", + String[] methods = new String[] { Method.GET, Method.POST, Method.HEAD, "TRACE", Method.PUT, "DELETE", "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" }; List<Object[]> result = new ArrayList<>(); diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java index e554e5b0a2..693c3bff5e 100644 --- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java +++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java @@ -37,7 +37,7 @@ public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest { @Parameters public static Collection<Object[]> inputs() { - String[] methods = new String[] { Method.GET, Method.POST, "HEAD", "TRACE", Method.PUT, "DELETE", + String[] methods = new String[] { Method.GET, Method.POST, Method.HEAD, "TRACE", Method.PUT, "DELETE", "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" }; List<Object[]> result = new ArrayList<>(); diff --git a/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java index 58c58d286e..b15741d97f 100644 --- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java +++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java @@ -37,7 +37,7 @@ public class TestWebdavServletOptionsUnknown extends ServletOptionsBaseTest { @Parameters public static Collection<Object[]> inputs() { - String[] methods = new String[] { Method.GET, Method.POST, "HEAD", "TRACE", Method.PUT, "DELETE", + String[] methods = new String[] { Method.GET, Method.POST, Method.HEAD, "TRACE", Method.PUT, "DELETE", "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", "PROPPATCH" }; List<Object[]> result = new ArrayList<>(); diff --git a/test/org/apache/catalina/startup/TomcatBaseTest.java b/test/org/apache/catalina/startup/TomcatBaseTest.java index d5acd9dafc..3ea3e92461 100644 --- a/test/org/apache/catalina/startup/TomcatBaseTest.java +++ b/test/org/apache/catalina/startup/TomcatBaseTest.java @@ -669,7 +669,7 @@ public abstract class TomcatBaseTest extends LoggingBaseTest { public static int headUrl(String path, ByteChunk out, Map<String, List<String>> resHead) throws IOException { - return methodUrl(path, out, DEFAULT_CLIENT_TIMEOUT_MS, null, resHead, "HEAD"); + return methodUrl(path, out, DEFAULT_CLIENT_TIMEOUT_MS, null, resHead, Method.HEAD); } public static int getUrl(String path, ByteChunk out, Map<String, List<String>> reqHead, diff --git a/test/org/apache/coyote/ajp/SimpleAjpClient.java b/test/org/apache/coyote/ajp/SimpleAjpClient.java index c7d401df13..1a365e47a6 100644 --- a/test/org/apache/coyote/ajp/SimpleAjpClient.java +++ b/test/org/apache/coyote/ajp/SimpleAjpClient.java @@ -82,7 +82,7 @@ public class SimpleAjpClient { case Method.GET: this.method = 2; break; - case "HEAD": + case Method.HEAD: this.method = 3; break; case Method.POST: @@ -169,7 +169,7 @@ public class SimpleAjpClient { case 2: return Method.GET; case 3: - return "HEAD"; + return Method.HEAD; case 4: return Method.POST; case 5: diff --git a/test/org/apache/coyote/http2/Http2TestBase.java b/test/org/apache/coyote/http2/Http2TestBase.java index 4eb1ecc9d8..3e1f15c42c 100644 --- a/test/org/apache/coyote/http2/Http2TestBase.java +++ b/test/org/apache/coyote/http2/Http2TestBase.java @@ -450,7 +450,7 @@ public abstract class Http2TestBase extends TomcatBaseTest { protected void buildHeadRequest(byte[] headersFrameHeader, ByteBuffer headersPayload, int streamId, String path) { MimeHeaders headers = new MimeHeaders(); - headers.addValue(":method").setString("HEAD"); + headers.addValue(":method").setString(Method.HEAD); headers.addValue(":scheme").setString("http"); headers.addValue(":path").setString(path); headers.addValue(":authority").setString("localhost:" + getPort()); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org