protected void prepareContext(Host host, ServletContextInitializer[] initializers) { File docBase = getValidDocumentRoot(); docBase = (docBase != null ? docBase : createTempDir("tomcat-docbase")); TomcatEmbeddedContext context = new TomcatEmbeddedContext(); context.setName(getContextPath()); context.setDisplayName(getDisplayName()); context.setPath(getContextPath()); context.setDocBase(docBase.getAbsolutePath()); context.addLifecycleListener(new FixContextListener()); context.setParentClassLoader( this.resourceLoader != null ? this.resourceLoader.getClassLoader() : ClassUtils.getDefaultClassLoader()); try { context.setUseRelativeRedirects(false); } catch (NoSuchMethodError ex) { // Tomcat is < 8.0.30. Continue } SkipPatternJarScanner.apply(context, this.tldSkip); WebappLoader loader = new WebappLoader(context.getParentClassLoader()); loader.setLoaderClass(TomcatEmbeddedWebappClassLoader.class.getName()); loader.setDelegate(true); context.setLoader(loader); if (isRegisterDefaultServlet()) { addDefaultServlet(context); } if (shouldRegisterJspServlet()) { addJspServlet(context); addJasperInitializer(context); context.addLifecycleListener(new StoreMergedWebXmlListener()); } ServletContextInitializer[] initializersToUse = mergeInitializers(initializers); configureContext(context, initializersToUse); host.addChild(context); postProcessContext(context); }
protected void prepareContext(Host host, ServletContextInitializer[] initializers) { File docBase = getValidDocumentRoot(); docBase = (docBase != null ? docBase : createTempDir("tomcat-docbase")); TomcatEmbeddedContext context = new TomcatEmbeddedContext(); context.setName(getContextPath()); context.setDisplayName(getDisplayName()); context.setPath(getContextPath()); context.setDocBase(docBase.getAbsolutePath()); context.addLifecycleListener(new FixContextListener()); context.setParentClassLoader( this.resourceLoader != null ? this.resourceLoader.getClassLoader() : ClassUtils.getDefaultClassLoader()); try { context.setUseRelativeRedirects(false); context.setMapperContextRootRedirectEnabled(true); } catch (NoSuchMethodError ex) { // Tomcat is < 8.0.30. Continue } SkipPatternJarScanner.apply(context, this.tldSkip); WebappLoader loader = new WebappLoader(context.getParentClassLoader()); loader.setLoaderClass(TomcatEmbeddedWebappClassLoader.class.getName()); loader.setDelegate(true); context.setLoader(loader); if (isRegisterDefaultServlet()) { addDefaultServlet(context); } if (shouldRegisterJspServlet()) { addJspServlet(context); addJasperInitializer(context); context.addLifecycleListener(new StoreMergedWebXmlListener()); } ServletContextInitializer[] initializersToUse = mergeInitializers(initializers); configureContext(context, initializersToUse); host.addChild(context); postProcessContext(context); }
protected void prepareContext(Host host, ServletContextInitializer[] initializers) { File docBase = getValidDocumentRoot(); docBase = (docBase != null ? docBase : createTempDir("tomcat-docbase")); TomcatEmbeddedContext context = new TomcatEmbeddedContext(); context.setName(getContextPath()); context.setDisplayName(getDisplayName()); context.setPath(getContextPath()); context.setDocBase(docBase.getAbsolutePath()); context.addLifecycleListener(new FixContextListener()); context.setParentClassLoader( this.resourceLoader != null ? this.resourceLoader.getClassLoader() : ClassUtils.getDefaultClassLoader()); SkipPatternJarScanner.apply(context, this.tldSkip); WebappLoader loader = new WebappLoader(context.getParentClassLoader()); loader.setLoaderClass(TomcatEmbeddedWebappClassLoader.class.getName()); loader.setDelegate(true); context.setLoader(loader); if (isRegisterDefaultServlet()) { addDefaultServlet(context); } if (shouldRegisterJspServlet()) { addJspServlet(context); addJasperInitializer(context); context.addLifecycleListener(new StoreMergedWebXmlListener()); } ServletContextInitializer[] initializersToUse = mergeInitializers(initializers); configureContext(context, initializersToUse); host.addChild(context); postProcessContext(context); }
@Test public void testBug57190() throws Exception { Tomcat tomcat = getTomcatInstance(); Context foo1 = new StandardContext(); foo1.setName("/foo##1"); foo1.setPath("/foo"); foo1.setWebappVersion("1"); foo1.setDocBase(System.getProperty("java.io.tmpdir")); foo1.addLifecycleListener(new FixContextListener()); foo1.addLifecycleListener(new SetIdListener("foo1")); tomcat.getHost().addChild(foo1); Context foo2 = new StandardContext(); foo2.setName("/foo##2"); foo2.setPath("/foo"); foo2.setWebappVersion("2"); foo2.setDocBase(System.getProperty("java.io.tmpdir")); foo2.addLifecycleListener(new FixContextListener()); foo2.addLifecycleListener(new SetIdListener("foo2")); tomcat.getHost().addChild(foo2); // No file system docBase required Context bar = tomcat.addContext("/bar", null); bar.addLifecycleListener(new SetIdListener("bar")); // No file system docBase required Context ctx = tomcat.addContext("", null); ctx.addLifecycleListener(new SetIdListener("ROOT")); ctx.setCrossContext(true); Tomcat.addServlet(ctx, "Bug57190Servlet", new Bug57190Servlet()); ctx.addServletMapping("/", "Bug57190Servlet"); tomcat.start(); ByteChunk res = getUrl("http://localhost:" + getPort() + "/"); String body = res.toString(); Assert.assertTrue(body, body.contains("01-bar")); Assert.assertTrue(body, body.contains("02-foo2")); Assert.assertTrue(body, body.contains("03-foo1")); Assert.assertTrue(body, body.contains("04-foo2")); Assert.assertTrue(body, body.contains("05-foo2")); Assert.assertTrue(body, body.contains("06-ROOT")); Assert.assertTrue(body, body.contains("07-ROOT")); Assert.assertTrue(body, body.contains("08-foo2")); Assert.assertTrue(body, body.contains("09-ROOT")); }