From fbac246a41656a4bdeb8d74d6e9d7c4deca9bb3b Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Wed, 25 Apr 2012 18:17:35 +1000 Subject: [PATCH] 376152 apply context resources recursively --- .../eclipse/jetty/webapp/WebAppContext.java | 17 ++++++++-- .../jetty/webapp/WebAppContextTest.java | 31 +++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java index 9efbdc37fac..29f0bb27e6f 100644 --- a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java +++ b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java @@ -19,6 +19,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.security.PermissionCollection; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.EventListener; import java.util.HashMap; @@ -271,11 +272,23 @@ public class WebAppContext extends ServletContextHandler implements WebAppClassL } /* ------------------------------------------------------------ */ - public String getResourceAlias(String alias) + public String getResourceAlias(String path) { if (_resourceAliases == null) return null; - return _resourceAliases.get(alias); + String alias = _resourceAliases.get(path); + + int slash=path.length(); + while (alias==null) + { + slash=path.lastIndexOf("/",slash-1); + if (slash<0) + break; + String match=_resourceAliases.get(path.substring(0,slash+1)); + if (match!=null) + alias=match+path.substring(slash+1); + } + return alias; } /* ------------------------------------------------------------ */ diff --git a/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppContextTest.java b/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppContextTest.java index 359da247524..e3c49ad895a 100644 --- a/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppContextTest.java +++ b/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppContextTest.java @@ -16,6 +16,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import java.io.File; import java.io.IOException; import java.util.Arrays; @@ -29,6 +30,8 @@ import junit.framework.Assert; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.HandlerList; +import org.eclipse.jetty.util.resource.Resource; +import org.eclipse.jetty.util.resource.ResourceCollection; import org.junit.Test; public class WebAppContextTest @@ -137,6 +140,34 @@ public class WebAppContextTest Assert.assertNotNull(contextB.getServletHandler().getServletContext().getContext("/B/s")); } + + @Test + public void testAlias() throws Exception + { + File dir = File.createTempFile("dir",null); + dir.delete(); + dir.mkdir(); + dir.deleteOnExit(); + + File webinf = new File(dir,"WEB-INF"); + webinf.mkdir(); + + File classes = new File(dir,"classes"); + classes.mkdir(); + + File someclass = new File(classes,"SomeClass.class"); + someclass.createNewFile(); + + WebAppContext context = new WebAppContext(); + context.setBaseResource(new ResourceCollection(dir.getAbsolutePath())); + + context.setResourceAlias("/WEB-INF/classes/", "/classes/"); + + assertTrue(Resource.newResource(context.getServletContext().getResource("/WEB-INF/classes/SomeClass.class")).exists()); + assertTrue(Resource.newResource(context.getServletContext().getResource("/classes/SomeClass.class")).exists()); + + } + class ServletA extends GenericServlet { @Override