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 511ffac20f Servlet 6.2 spec changes for 
HttpServletRequest.getContextPath()
511ffac20f is described below

commit 511ffac20f5cc332153a7540390484150aed67cd
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Apr 23 11:37:57 2025 +0100

    Servlet 6.2 spec changes for HttpServletRequest.getContextPath()
    
    While the relaxed requirements would allow a much simpler implementation
    of returning the canonical context path (obtained from
    getServletContext().getContextPath()), that approach complicates some
    Tomcat internals particularly around AsyncContext.dispath() when the
    request URI contains encoded / (%2F) characters.
    The simpler implementation isn't worth the risk of creating regressions.
---
 java/jakarta/servlet/http/HttpServletRequest.java     | 10 +++++++---
 java/org/apache/catalina/connector/Request.java       |  6 ++++++
 java/org/apache/catalina/connector/RequestFacade.java |  6 ++++++
 3 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/java/jakarta/servlet/http/HttpServletRequest.java 
b/java/jakarta/servlet/http/HttpServletRequest.java
index daff471fb7..a325da05ce 100644
--- a/java/jakarta/servlet/http/HttpServletRequest.java
+++ b/java/jakarta/servlet/http/HttpServletRequest.java
@@ -77,8 +77,8 @@ public interface HttpServletRequest extends ServletRequest {
      * <code>Date</code> object. Use this method with headers that contain 
dates, such as
      * <code>If-Modified-Since</code>.
      * <p>
-     * The date is returned as the number of milliseconds since January 1, 
1970 GMT. The header name
-     * is case-insensitive.
+     * The date is returned as the number of milliseconds since January 1, 
1970 GMT. The header name is
+     * case-insensitive.
      * <p>
      * If the request did not have a header of the specified name, this method 
returns -1. If the header can't be
      * converted to a date, the method throws an 
<code>IllegalArgumentException</code>.
@@ -239,7 +239,11 @@ public interface HttpServletRequest extends ServletRequest 
{
     /**
      * Returns the portion of the request URI that indicates the context of 
the request. The context path always comes
      * first in a request URI. The path starts with a "/" character but does 
not end with a "/" character. For servlets
-     * in the default (root) context, this method returns "". The container 
does not decode this string.
+     * in the default (root) context, this method returns "".
+     * <p>
+     * The value returned will be suitable for inclusion in a URI. It will be 
equivalent to the value provided by the
+     * user agent but it may not be identical to the value provided by the 
user agent. Path parameters will be removed,
+     * the path may be normalized or partially normalized and optional %nn 
encoding may be decoded or partially decoded.
      *
      * @return a <code>String</code> specifying the portion of the request URI 
that indicates the context of the request
      */
diff --git a/java/org/apache/catalina/connector/Request.java 
b/java/org/apache/catalina/connector/Request.java
index ef9345ba4f..a1738febe9 100644
--- a/java/org/apache/catalina/connector/Request.java
+++ b/java/org/apache/catalina/connector/Request.java
@@ -1841,6 +1841,12 @@ public class Request implements HttpServletRequest {
     }
 
 
+    /**
+     * {@inheritDoc}
+     * <p>
+     * Tomcat neither normalizes nor decodes the returned value. It will be 
identical to the part of the request URI
+     * provided by the user agent that was used to determine the context path.
+     */
     @Override
     public String getContextPath() {
         int lastSlash = mappingData.contextSlashCount;
diff --git a/java/org/apache/catalina/connector/RequestFacade.java 
b/java/org/apache/catalina/connector/RequestFacade.java
index 54be51b02d..4a8b3b99d7 100644
--- a/java/org/apache/catalina/connector/RequestFacade.java
+++ b/java/org/apache/catalina/connector/RequestFacade.java
@@ -341,6 +341,12 @@ public class RequestFacade implements HttpServletRequest {
     }
 
 
+    /**
+     * {@inheritDoc}
+     * <p>
+     * Tomcat neither normalizes nor decodes the returned value. It will be 
identical to the part of the request URI
+     * provided by the user agent that was used to determine the context path.
+     */
     @Override
     public String getContextPath() {
         checkFacade();


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

Reply via email to