Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Bartel2015-10-28 05:52:07 +0000
committerJan Bartel2015-10-28 05:53:26 +0000
commitb74a89bcb9d07b5538601b7798f24669a8bd4f6a (patch)
treebff45458712e2f1fe868b7488c2f866dffd183b3
parent4134b1eca8f4656f1139006c6d7ba72f32cff79c (diff)
downloadorg.eclipse.jetty.project-b74a89bcb9d07b5538601b7798f24669a8bd4f6a.tar.gz
org.eclipse.jetty.project-b74a89bcb9d07b5538601b7798f24669a8bd4f6a.tar.xz
org.eclipse.jetty.project-b74a89bcb9d07b5538601b7798f24669a8bd4f6a.zip
479865 IllegalStateException: Multiple servlets map to path: *.jsp: jsp,jsp
-rw-r--r--jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletMapping.java19
-rw-r--r--jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java56
2 files changed, 69 insertions, 6 deletions
diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletMapping.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletMapping.java
index ab181862f4..bd1247f03e 100644
--- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletMapping.java
+++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletMapping.java
@@ -65,6 +65,25 @@ public class ServletMapping
{
_pathSpecs = pathSpecs;
}
+
+
+ /* ------------------------------------------------------------ */
+ /** Test if the list of path specs contains a particular one.
+ * @param pathSpec
+ * @return
+ */
+ public boolean containsPathSpec (String pathSpec)
+ {
+ if (_pathSpecs == null || _pathSpecs.length == 0)
+ return false;
+
+ for (String p:_pathSpecs)
+ {
+ if (p.equals(pathSpec))
+ return true;
+ }
+ return false;
+ }
/* ------------------------------------------------------------ */
/**
diff --git a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java
index 75ee94edc9..b2dc458675 100644
--- a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java
+++ b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java
@@ -51,6 +51,7 @@ import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.servlet.ServletMapping;
import org.eclipse.jetty.util.ArrayUtil;
import org.eclipse.jetty.util.Loader;
+import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
import org.eclipse.jetty.util.security.Constraint;
@@ -1210,8 +1211,9 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor
//remove ps from the path specs on the existing mapping
//if the mapping now has no pathspecs, remove it
String[] updatedPaths = ArrayUtil.removeFromArray(sm.getPathSpecs(), ps);
+
if (updatedPaths == null || updatedPaths.length == 0)
- {
+ {
if (LOG.isDebugEnabled()) LOG.debug("Removed empty mapping {}",sm);
listItor.remove();
}
@@ -1230,9 +1232,9 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor
paths.add(p);
context.getMetaData().setOrigin(servletName+".servlet.mapping."+p, descriptor);
}
+
mapping.setPathSpecs((String[]) paths.toArray(new String[paths.size()]));
if (LOG.isDebugEnabled()) LOG.debug("Added mapping {} ",mapping);
-
_servletMappings.add(mapping);
return mapping;
}
@@ -1367,10 +1369,52 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor
//add mappings to the jsp servlet from the property-group mappings
if (paths.size() > 0)
{
- ServletMapping mapping = new ServletMapping();
- mapping.setServletName("jsp");
- mapping.setPathSpecs(paths.toArray(new String[paths.size()]));
- _servletMappings.add(mapping);
+ ServletMapping jspMapping = null;
+ for (ServletMapping m: _servletMappings)
+ {
+ if (m.getServletName().equals("jsp"))
+ {
+ jspMapping = m;
+ break;
+ }
+ }
+ if (jspMapping != null)
+ {
+ if (jspMapping.getPathSpecs() == null)
+ {
+ //no paths in jsp servlet mapping, we will add all of ours
+ if (LOG.isDebugEnabled()) LOG.debug("Adding all paths from jsp-config to jsp servlet mapping");
+ jspMapping.setPathSpecs(paths.toArray(new String[paths.size()]));
+ }
+ else
+ {
+ //check if each of our paths is already present in existing mapping
+ ListIterator<String> piterator = paths.listIterator();
+ while (piterator.hasNext())
+ {
+ String p = piterator.next();
+ if (jspMapping.containsPathSpec(p))
+ piterator.remove();
+ }
+
+ //any remaining paths, add to the jspMapping
+ if (paths.size() > 0)
+ {
+ for (String p:jspMapping.getPathSpecs())
+ paths.add(p);
+ if (LOG.isDebugEnabled()) LOG.debug("Adding extra paths from jsp-config to jsp servlet mapping");
+ jspMapping.setPathSpecs((String[])paths.toArray(new String[paths.size()]));
+ }
+ }
+ }
+ else
+ {
+ //no mapping for jsp yet, make one
+ ServletMapping mapping = new ServletMapping();
+ mapping.setServletName("jsp");
+ mapping.setPathSpecs(paths.toArray(new String[paths.size()]));
+ _servletMappings.add(mapping);
+ }
}
}

Back to the top