我正在努力设置嵌入式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位于任意目录中?我还要求解决方案不要更改目录结构。谢谢!
答案 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");