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