Tomcat 自定义 context.xml 文件从未被考虑在内

Tomcat custom context.xml file is never taken into account

我目前有一个 Web 应用程序的 Tomcat 配置问题(我使用 Tomcat 8.5.57)。
此 Web 应用程序打包在一个 war 文件中,其中包含 html 个文件和 css 个文件。
此应用程序运行良好。

现在,我收到一位客户的请求,要求能够通过客户管理的自定义 css 文件从 war 外部修改应用程序的外观和感觉(用于设置客户端的徽标或类似的东西)。
因此,我尝试创建一个名为 custom.xml 的自定义上下文文件,并将其放置在 tomcat\conf\Catalina\localhost 目录中。
这个文件看起来像:

<Context    docBase="E:/somedirectory/support" 
            path="/app/css" 
            reloadable    = "false"
            unpackWAR     = "false"
            swallowOutput = "true" >
                <WatchedResource>custom.css</WatchedResource>           
</Context>

我将包含一些 css 指令的 custom.css 文件作为测试放在 E:/somedirectory/support 目录中。
在我的 Web 应用程序的 html 文件中,头部部分有以下行:

<link rel="stylesheet" href="css/custom.css" media="screen" type="text/css"/>

问题是我的 custom.css 文件从未被考虑在内。

当我打开 Chrome 的开发人员工具的“源”选项卡时,我在 app/css 的层次结构中看到了一个 custom.css 文件,正如预期的那样(可能是由于html 文件),但它是无可救药的空文件。
我尝试了很多在 Web 和 Whosebug 上找到的东西,但对我没有任何作用...

有人可以帮助我吗?

谢谢!

<Context> 元素的 path 属性在 server.xml 之外被忽略:

This attribute must only be used when statically defining a Context in server.xml. In all other circumstances, the path will be inferred from the filenames used for either the .xml context file or the docBase. [from Tomcat documentation]

因此你有两个选择:

  • 您可以通过创建名为 conf\Catalina\localhost\app#css.xml 且内容为:
  • 的文件来定义具有上下文路径 /app/css 的新上下文(新 Web 应用程序)
<Context docBase="E:\somedirectory\support" />

这样,/app/css 子树下的所有内容E:\somedirectory\support 目录提供。

  1. 您可以通过添加一个名为 conf\Catalina\localhost\app.xml 的文件来重新定义您的应用程序上下文以包含一个额外的虚拟目录(在 WAR 文件的内容旁边):
<Context>
  <Resources>
    <PreResources className="org.apache.catalina.webresources.DirResourceSet"
                  base="E:\somedirectory\support"
                  webAppMount="/css" />
  </Resources>
</Context>

这样,在为 /app/css/foo/bar 提供请求时,Tomcat 将首先在 E:\somedirectory\support 中查找 foo/bar,然后在 WAR 文件中查找。