【问题标题】:Tomcat custom context.xml file is never taken into accountTomcat 自定义 context.xml 文件从未被考虑在内
【发布时间】:2021-06-16 16:03:28
【问题描述】:

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

现在,我有一个客户的请求,要求能够通过客户端管理的自定义 css 文件从战争之外修改应用程序的外观和感觉(用于设置客户端的徽标或其他东西像那样)。
因此,我尝试创建一个名为 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 文件中,我在 head 部分有以下行:

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

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

当我打开 Chrome 开发者工具的 Sources 选项卡时,我在 app/css 的层次结构中看到了一个 custom.css 文件,正如预期的那样(可能是由于 html 文件中的行),但它是空的。
我尝试了很多在 Web 和 stackoverflow 上找到的东西,但对我没有任何效果...

有人可以帮我吗?

谢谢!

【问题讨论】:

  • 遗憾的是,事实并非如此。我尝试了一些这样的配置:&lt;Context&gt; &lt;Resources className="org.apache.catalina.webresources.StandardRoot"&gt; &lt;PreResources className="org.apache.catalina.webresources.DirResourceSet" base="C:\\PROJECT_NAME\\conf" internalPath="/" webAppMount="/WEB-INF/classes" /&gt; &lt;/Resources&gt; &lt;/Context&gt; 但效果并不好。

标签: java css tomcat tomcat8


【解决方案1】:

&lt;Context&gt; 元素的 path 属性在 server.xml 之外被忽略:

该属性只能在 server.xml 中静态定义上下文时使用。在所有其他情况下,将从用于 .xml 上下文文件或 docBase 的文件名推断路径。 [来自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 文件中查找。

【讨论】:

  • 我尝试了解决方案 2,效果很好!非常感谢。
猜你喜欢
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 1970-01-01
相关资源
最近更新 更多