有没有人知道如何在嵌入式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();
}
}
答案 0 :(得分:3)
将Web应用程序添加到嵌入式Apache Tomcat有两种常规方法。 addContext()
和addWebapp()
。
addContext()
需要完全的程序化方法。您必须通过API配置所有内容。这包括提供静态内容(如图像)的默认servlet。您尚未配置默认Servlet,因此不会提供静态内容。
您几乎肯定希望使用addWebapp()
,这与删除webapps文件夹中的目录并让Tomcat自动部署它大致相似。在这种情况下,与conf / web.xml(默认servlet,JSP servlet,MIME类型映射,欢迎文件等)中的设置等效的设置将应用于webapp。
答案 1 :(得分:1)
我发现this guide对于启动我自己的设置很有用,还有一些Tomcat 8 documentation reading。
我将webapp放入资源文件夹,它会自动复制到maven的目标/测试类并从那里运行。