376152 apply context resources recursively

This commit is contained in:
Greg Wilkins 2012-04-25 18:17:35 +10:00
parent 66e7caea86
commit fbac246a41
2 changed files with 46 additions and 2 deletions

View File

@ -19,6 +19,7 @@ import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.security.PermissionCollection; import java.security.PermissionCollection;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.EventListener; import java.util.EventListener;
import java.util.HashMap; 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) if (_resourceAliases == null)
return 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;
} }
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */

View File

@ -16,6 +16,7 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
@ -29,6 +30,8 @@ import junit.framework.Assert;
import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.HandlerList; 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; import org.junit.Test;
public class WebAppContextTest public class WebAppContextTest
@ -137,6 +140,34 @@ public class WebAppContextTest
Assert.assertNotNull(contextB.getServletHandler().getServletContext().getContext("/B/s")); 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 class ServletA extends GenericServlet
{ {
@Override @Override