Author: remm
Date: Wed Nov 29 09:46:00 2017
New Revision: 1816617

URL: http://svn.apache.org/viewvc?rev=1816617&view=rev
Log:
Add a bare bones default-context-path impl (best effort really, it's a bad 
feature). Also fix for some mapping paths, excluded pending some clarifications.

Modified:
    tomcat/trunk/java/org/apache/catalina/Context.java
    tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java
    tomcat/trunk/java/org/apache/catalina/core/ApplicationDispatcher.java
    tomcat/trunk/java/org/apache/catalina/core/ApplicationMapping.java
    tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
    tomcat/trunk/java/org/apache/catalina/mapper/MapperListener.java
    tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
    tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java
    
tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/LocalStrings.properties
    tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java
    tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java
    tomcat/trunk/test/org/apache/tomcat/unittest/TesterContext.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/Context.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Context.java?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Context.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Context.java Wed Nov 29 09:46:00 2017
@@ -348,6 +348,20 @@ public interface Context extends Contain
 
 
     /**
+     * Get the best effort path for mapping.
+     * @return the default context path
+     */
+    public String getDefaultContextPath();
+
+
+    /**
+     * Return the best effort path for mapping.
+     * @param defaultContextPath The default context path
+     */
+    public void setDefaultContextPath(String defaultContextPath);
+
+
+    /**
      * Return the deny-uncovered-http-methods flag for this web application.
      *
      * @return The current value of the flag

Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java Wed Nov 
29 09:46:00 2017
@@ -287,7 +287,11 @@ public class ApplicationContext implemen
 
     @Override
     public String getContextPath() {
-        return context.getPath();
+        if (Globals.STRICT_SERVLET_COMPLIANCE && 
context.getDefaultContextPath() != null) {
+            return context.getDefaultContextPath();
+        } else {
+            return context.getPath();
+        }
     }
 
 

Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationDispatcher.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationDispatcher.java?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ApplicationDispatcher.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/ApplicationDispatcher.java Wed 
Nov 29 09:46:00 2017
@@ -626,7 +626,9 @@ final class ApplicationDispatcher implem
             wrequest.setQueryString(queryString);
             wrequest.setQueryParams(queryString);
         }
-        wrequest.setMapping(mapping);
+        if (!Globals.STRICT_SERVLET_COMPLIANCE) {
+            wrequest.setMapping(mapping);
+        }
 
         invoke(state.outerRequest, state.outerResponse, state);
     }

Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationMapping.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationMapping.java?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ApplicationMapping.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/ApplicationMapping.java Wed Nov 
29 09:46:00 2017
@@ -19,6 +19,7 @@ package org.apache.catalina.core;
 import javax.servlet.http.HttpServletMapping;
 import javax.servlet.http.MappingMatch;
 
+import org.apache.catalina.Globals;
 import org.apache.catalina.mapper.MappingData;
 
 public class ApplicationMapping {
@@ -47,7 +48,8 @@ public class ApplicationMapping {
                         mapping = new MappingImpl("", "", 
mappingData.matchType, servletName);
                         break;
                     case DEFAULT:
-                        mapping = new MappingImpl("", "/", 
mappingData.matchType, servletName);
+                        String match = Globals.STRICT_SERVLET_COMPLIANCE ? 
"default" : "";
+                        mapping = new MappingImpl(match, "/", 
mappingData.matchType, servletName);
                         break;
                     case EXACT:
                         mapping = new 
MappingImpl(mappingData.wrapperPath.toString().substring(1),

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContext.java?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Wed Nov 29 
09:46:00 2017
@@ -343,6 +343,12 @@ public class StandardContext extends Con
 
 
     /**
+     * Best effort mapping path.
+     */
+    private String defaultContextPath;
+
+
+    /**
      * Override the default context xml location.
      */
     private String defaultContextXml;
@@ -1598,6 +1604,21 @@ public class StandardContext extends Con
 
     }
 
+    @Override
+    public String getDefaultContextPath() {
+        return defaultContextPath;
+    }
+
+    /**
+     * Set the best effort path for mapping.
+     *
+     * @param defaultContextPath The default context path
+     */
+    @Override
+    public void setDefaultContextPath(String defaultContextPath) {
+        this.defaultContextPath = defaultContextPath;
+    }
+
     public String getDefaultContextXml() {
         return defaultContextXml;
     }

Modified: tomcat/trunk/java/org/apache/catalina/mapper/MapperListener.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mapper/MapperListener.java?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/mapper/MapperListener.java (original)
+++ tomcat/trunk/java/org/apache/catalina/mapper/MapperListener.java Wed Nov 29 
09:46:00 2017
@@ -24,6 +24,7 @@ import org.apache.catalina.ContainerEven
 import org.apache.catalina.ContainerListener;
 import org.apache.catalina.Context;
 import org.apache.catalina.Engine;
+import org.apache.catalina.Globals;
 import org.apache.catalina.Host;
 import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleEvent;
@@ -364,11 +365,14 @@ public class MapperListener extends Life
      */
     private void registerContext(Context context) {
 
-        String contextPath = context.getPath();
+        Host host = (Host)context.getParent();
+        String contextPath = Globals.STRICT_SERVLET_COMPLIANCE ? 
context.getDefaultContextPath() : null;
+        if (contextPath == null || host.findChild(contextPath) != null) {
+            contextPath = context.getPath();
+        }
         if ("/".equals(contextPath)) {
             contextPath = "";
         }
-        Host host = (Host)context.getParent();
 
         WebResourceRoot resources = context.getResources();
         String[] welcomeFiles = context.findWelcomeFiles();
@@ -399,7 +403,11 @@ public class MapperListener extends Life
      */
     private void unregisterContext(Context context) {
 
-        String contextPath = context.getPath();
+        Host host = (Host)context.getParent();
+        String contextPath = Globals.STRICT_SERVLET_COMPLIANCE ? 
context.getDefaultContextPath() : null;
+        if (contextPath == null || host.findChild(contextPath) != null) {
+            contextPath = context.getPath();
+        }
         if ("/".equals(contextPath)) {
             contextPath = "";
         }

Modified: tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Wed Nov 29 
09:46:00 2017
@@ -1257,6 +1257,7 @@ public class ContextConfig implements Li
         for (Entry<String, String> entry : 
webxml.getContextParams().entrySet()) {
             context.addParameter(entry.getKey(), entry.getValue());
         }
+        context.setDefaultContextPath(webxml.getDefaultContextPath());
         context.setDenyUncoveredHttpMethods(
                 webxml.getDenyUncoveredHttpMethods());
         context.setDisplayName(webxml.getDisplayName());

Modified: tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java Wed Nov 29 
09:46:00 2017
@@ -372,6 +372,11 @@ public class FailedContext extends Lifec
     public void setAltDDName(String altDDName) { /* NO-OP */ }
 
     @Override
+    public String getDefaultContextPath() { return null; }
+    @Override
+    public void setDefaultContextPath(String defaultContextPath) { /* NO-OP */ 
}
+
+    @Override
     public boolean getDenyUncoveredHttpMethods() { return false; }
     @Override
     public void setDenyUncoveredHttpMethods(boolean denyUncoveredHttpMethods) {

Modified: 
tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/LocalStrings.properties?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/LocalStrings.properties 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/LocalStrings.properties 
Wed Nov 29 09:46:00 2017
@@ -39,6 +39,7 @@ webXml.duplicateResourceRef=Duplicate re
 webXml.duplicateServletMapping=The servlets named [{0}] and [{1}] are both 
mapped to the url-pattern [{2}] which is not permitted
 webXml.duplicateTaglibUri=Duplicate tag library URI [{0}]
 webXml.reservedName=A web.xml file was detected using a reserved name [{0}]. 
The name element will be ignored for this fragment.
+webXml.mergeConflictDefaultContextPath=The default context path was defined in 
multiple fragments with different values including fragment with name [{0}] 
located at [{1}]
 webXml.mergeConflictDisplayName=The display name was defined in multiple 
fragments with different values including fragment with name [{0}] located at 
[{1}]
 webXml.mergeConflictFilter=The Filter [{0}] was defined inconsistently in 
multiple fragments including fragment with name [{1}] located at [{2}]
 webXml.mergeConflictLoginConfig=A LoginConfig was defined inconsistently in 
multiple fragments including fragment with name [{0}] located at [{1}]

Modified: 
tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java Wed 
Nov 29 09:46:00 2017
@@ -203,6 +203,9 @@ public class WebRuleSet implements RuleS
         digester.addCallParam(fullPrefix + "/context-param/param-name", 0);
         digester.addCallParam(fullPrefix + "/context-param/param-value", 1);
 
+        digester.addCallMethod(fullPrefix + "/default-context-path",
+                "setDefaultContextPath", 0);
+
         digester.addCallMethod(fullPrefix + "/display-name",
                                "setDisplayName", 0);
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java Wed Nov 
29 09:46:00 2017
@@ -231,6 +231,13 @@ public class WebXml extends XmlEncodingB
     // - description
     // - icon
 
+    // default-context-path
+    private String defaultContextPath = null;
+    public String getDefaultContextPath() { return defaultContextPath; }
+    public void setDefaultContextPath(String defaultContextPath) {
+        this.defaultContextPath = defaultContextPath;
+    }
+
     // display-name - TODO should support multiple with language
     private String displayName = null;
     public String getDisplayName() { return displayName; }
@@ -1424,6 +1431,24 @@ public class WebXml extends XmlEncodingB
         }
         contextParams.putAll(temp.getContextParams());
 
+        if (defaultContextPath == null) {
+            for (WebXml fragment : fragments) {
+                String value = fragment.getDefaultContextPath();
+                if (value != null) {
+                    if (temp.getDefaultContextPath() == null) {
+                        temp.setDefaultContextPath(value);
+                    } else {
+                        log.error(sm.getString(
+                                "webXml.mergeConflictDefaultContextPath",
+                                fragment.getName(),
+                                fragment.getURL()));
+                        return false;
+                    }
+                }
+            }
+            defaultContextPath = temp.getDefaultContextPath();
+        }
+
         if (displayName == null) {
             for (WebXml fragment : fragments) {
                 String value = fragment.getDisplayName();

Modified: tomcat/trunk/test/org/apache/tomcat/unittest/TesterContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/unittest/TesterContext.java?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/unittest/TesterContext.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/unittest/TesterContext.java Wed Nov 29 
09:46:00 2017
@@ -471,6 +471,16 @@ public class TesterContext implements Co
     }
 
     @Override
+    public String getDefaultContextPath() {
+        return null;
+    }
+
+    @Override
+    public void setDefaultContextPath(String defaultContextPath) {
+        // NO-OP
+    }
+
+    @Override
     public boolean getDenyUncoveredHttpMethods() {
         return false;
     }

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1816617&r1=1816616&r2=1816617&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Nov 29 09:46:00 2017
@@ -50,6 +50,12 @@
       <fix>
         Add some missing NPEs to ServletContext. (remm)
       </fix>
+      <fix>
+        Minor HttpServletMapping issues. (remm)
+      </fix>
+      <fix>
+        Add bare bones support for default context path. (remm)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Other">



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

Reply via email to