3

有谁知道如何在嵌入式 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:在开发中为嵌入式 tomcat 添加上下文

但我没有使用 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();  
    }
}
4

1 回答 1

3

将 Web 应用程序添加到嵌入式 Apache Tomcat 有两种通用方法。addContext()addWebapp()

addContext()需要完全程序化的方法。您必须通过 API 配置所有内容。这包括提供静态内容(如图像)的默认 servlet。您尚未配置默认 Servlet,因此不提供静态内容。

您几乎肯定想要使用addWebapp()它与在 webapps 文件夹中放置一个目录并让 Tomcat 自动部署它大体相似。在这种情况下,与 conf/web.xml 中的设置(默认 servlet、JSP servlet、MIME 类型映射、欢迎文件等)等效的设置将应用于 webapp。

于 2013-02-03T09:40:57.360 回答