如何在Tomcat 8上以root身份部署war之外的静态内容

时间:2017-12-18 11:49:53

标签: tomcat

我有一个docker容器 - Tomcat应用程序(war文件),它的静态内容包含在war文件中。但是出于开发目的,我想将静态内容移出war文件并将其映射到文件系统上的文件夹。这样做的原因很简单。例如,每次javascript文件发生更改时,我都不想重新部署。我想在浏览器中重新加载页面并进行更改。 Tomcat版本是8。

此问题的最常见解决方案(如果你谷歌)是更改server.xml文件并添加类似于此的代码段:

<Context docBase="/my/static/content/folder" path="/some/context" />

但是我想将静态内容映射到我的应用程序的根文件夹。说我的war文件名是myapp.war。它部署在“/ myapp”下。问题是,如果我想从root开始添加静态内容,那么我的上下文代码段如下所示:

<Context docBase="/my/static/content/folder" path="/myapp" />

这是不正确的,因为路径必须是唯一的,并且两者都不能使用“myapp” - 使用war文件名来导出上下文的自动部署以及上面的上下文片段。我可以改变路径指向“myapp / static”但是我需要对我想要避免的源代码应用更改。

如何将外部文件夹映射到我的应用程序根目录非常受欢迎。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题...... Context标签应如下所示:

<Context path="/myapp" docBase="myapp.war">
    <Resources className="org.apache.catalina.webresources.StandardRoot">
        <PreResources className="org.apache.catalina.webresources.DirResourceSet"
            base="/my/static/content/folder"
            webAppMount="/">
        </PreResources>
    </Resources>
</Context>

这个解决方案的一个令人不快的副作用是我的服务器启动时间从~22秒上升到~52秒。 我的&#34; / my / static / content /文件夹&#34;共有97件商品,尺码为13.7MB。

反馈如何改进这一点或欢迎没有如此大启动时间的替代解决方案。

更新: 从PreResources切换到PostResources解决了问题的启动时间。它从~52秒回到~26秒。现在开销只有4秒,这对我来说已经足够了。

更新2:在我的原始帖子中,我提到应将Context标签添加到server.xml。这可以工作,但更好,更清晰的添加方法是创建一个context.xml文件并将其放在WAR文件中的META-INF下。这样改变只在WAR文件中,服务器(分别是Docker镜像)是相同的,无论它是否用于开发。