Tomcat为docBase嵌入了正确的addContext用法

时间:2013-01-29 08:46:58

标签: java tomcat configuration embedded-tomcat-7

有没有人知道如何在嵌入式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();  
    }
}

2 个答案:

答案 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的目标/测试类并从那里运行。