2

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

我需要 Tomcat 在请求 localhost:8080/ 时打开 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 位于任意目录中?我还要求解决方案不更改目录结构。谢谢!

4

1 回答 1

3

In order for tomcat to serve index.html on requests with just the context path (http://localhost:8080/) you need to apply the following modifications:

  • Add "index.html" to the list of welcome files of your context using Context.addWelcomeFile(). The file will be looked up relative to your context's base directory. You can also use relative paths, eg. "static/index.html"
  • Use "/" pattern in servlet mapping for "default" servlet. Only then tomcat will consider welcome files and rewrite the request path before calling default servlet.

After applying these changes the code should look like this:

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");

This is similar to how tomcat configures the context when you call tomcat.addWebapp(), so you could just use this:

Context ctx = tomcat.addWebapp("/", "somePath/www");
于 2013-03-05T22:53:12.223 回答