2013-02-27 38 views
2

我正在努力設置一個嵌入式Tomcat服務器。我的設置與Tomcat約定不同,因爲我有一個somePath/www目錄,其中包含index.html的靜態文件。我也沒有WEB-INF,我沒有web.xml。沒有WEB-INF的嵌入式Tomcat

我需要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"); 

本地主機:8080/my_app應用/正常工作了。

有沒有一種方法可以讓嵌入式Tomcat加載index.html位於任意目錄中,當url只是上下文根?我還要求解決方案不要更改目錄結構。謝謝!

回答

2

爲了tomcat的服務index.html上的請求只需要應用以下修改上下文路徑(​​):

  • 添加"index.html"使用Context.addWelcomeFile()在你的上下文的歡迎文件列表。該文件將相對於您的上下文的基本目錄進行查找。你也可以使用相對路徑,例如。 "static/index.html"
  • 在servlet映射中使用"/"模式爲"default" servlet。只有在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.addWebapp(),所以你可以只使用此tomcat的如何配置方面:

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