没有WEB-INF的嵌入式Tomcat

时间:2013-02-27 14:43:53

标签: tomcat

我正在努力设置嵌入式Tomcat服务器。我的设置与Tomcat约定不同,因为我有一个somePath / www目录,其中我的静态文件包括index.html。我也没有WEB-INF,也没有web.xml。

我在请求localhost:8080 /时需要Tomcat打开index.html。这不起作用,我得到一个页面找不到错误。然而,当我请求localhost:8080 / index.html时,请求返回相关文件。我当前的当前尝试配置如下所示。

tomcat.addWebapp("/", "somePath/www");
Context ctx = tomcat.addContext("/", "somePath/www");
Wrapper defaultServlet = ctx.createWrapper();
defaultServlet.setName("default");
defaultServlet.setServletClass("org.apache.catalina.servlets.DefaultServlet");
defaultServlet.addInitParameter("debug", "0");
defaultServlet.addInitParameter("listings", "false");
defaultServlet.setLoadOnStartup(1);
ctx.addChild(defaultServlet);
ctx.addServletMapping("/*", "default");

另一方面,对于以下设置:

tomcat.addWebapp("/MY_APP", "somePath/www");

localhost:8080 / MY_APP /也可以。

当url只是上下文根时,有没有办法让嵌入式Tomcat加载index.html位于任意目录中?我还要求解决方案不要更改目录结构。谢谢!

1 个答案:

答案 0 :(得分:4)

为了让tomcat只对上下文路径(index.html)的请求提供http://localhost:8080/,您需要应用以下修改:

  • 使用"index.html"Context.addWelcomeFile()添加到您的上下文的欢迎文件列表中。将相对于上下文的基目录查找该文件。您也可以使用相对路径,例如。 "static/index.html"
  • "/" servlet的servlet映射中使用"default"模式。只有这样tomcat才会在调用默认servlet之前考虑欢迎文件并重写请求路径。

应用这些更改后,代码应如下所示:

Context ctx = tomcat.addContext("/", "somePath/www");

defaultServlet = ctx.createWrapper();
defaultServlet.setName("default");
defaultServlet.setServletClass("org.apache.catalina.servlets.DefaultServlet");
defaultServlet.addInitParameter("debug", "0");
defaultServlet.addInitParameter("listings", "false");
defaultServlet.setLoadOnStartup(1);

ctx.addChild(defaultServlet);
ctx.addServletMapping("/", "default");
ctx.addWelcomeFile("index.html");

这类似于tomcat在调用tomcat.addWebapp()时配置上下文的方式,所以你可以使用它:

Context ctx = tomcat.addWebapp("/", "somePath/www");