有谁知道如何在嵌入式 Tomcat 实例中设置上下文以从不在已部署文件夹中的本地目录提供文件?
在标准的 server.xml 中,它看起来像这样:
<Context docBase="/MyWebApp/images" path="/tmp/images/" reloadable="false"/>
我尝试了以下 tomcat 嵌入式调用的不同变体,但均未成功:
tomcat.addContext(tomcat.getHost(), "/MyWebApp/images", "/tmp/images/");
我也试过:
tomcat.addContext("/MyWebApp/images", "/tmp/images/");
看起来这个 grails 问题的思路是一样的:
grails: add context to embedded tomcat in development
但我没有使用 grails。 (使用 Java)
这是我使用的完整启动代码:
package launch;
import java.io.File;
import org.apache.catalina.startup.Tomcat;
public class Main {
public static void main(String[] args) throws Exception {
String webappDirLocation = "/src/main/webapp/";
Tomcat tomcat = new Tomcat();
//The port that we should run on can be set into an environment variable
//Look for that variable and default to 8080 if it isn't there.
String webPort = System.getenv("PORT");
if(webPort == null || webPort.isEmpty()) {
webPort = "8080";
}
tomcat.setPort(Integer.valueOf(webPort));
tomcat.addWebapp("/MyWebApp", new File(webappDirLocation).getAbsolutePath());
tomcat.addContext("/MyWebApp/images", "/tmp/images/");
tomcat.start();
tomcat.getServer().await();
}
}
最佳答案
将 Web 应用程序添加到嵌入式 Apache Tomcat 有两种通用方法。 addContext()
和 addWebapp()
。
addContext()
需要完全编程的方法。您必须通过 API 配置所有内容。这包括提供静态内容(如图像)的默认 servlet。您尚未配置默认 Servlet,因此不会提供静态内容。
您几乎肯定想要使用 addWebapp()
,这与在 webapps 文件夹中放置一个目录并让 Tomcat 自动部署它大致相似。在这种情况下,与 conf/web.xml 中相同的设置(默认 servlet、JSP servlet、MIME 类型映射、欢迎文件等)将应用于 webapp。
关于java - Tomcat 为 docBase 嵌入了 addContext 的正确用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14578794/