在Tomcat webapp中参数化“静态”内容(例如CSS)的好方法是什么?

时间:2010-04-27 14:04:10

标签: jsp deployment configuration tomcat substitution

我们的一些CSS文件包含的参数可能因部署位置(dev,QA,prod)而异。例如:

 background: url(#DOJO_PATH#/dijit/themes...)

以避免硬编码到特定CDN或本地托管的Dojo安装的路径。

当将Web应用程序的内容复制到Tomcat webapps目录中时,部署脚本会以文本方式将这些值替换为实际值。这样,可以将相同的部署归档文件(包含其他配置的WAR + TAR文件)部署到dev,QA和prod,并使用由特定于环境的配置文件提供的不同参数。

但是,我想使WAR的内容(包括模板化的CSS文件)独立于这个内部部署脚本。由于我们实际上无法控制部署脚本,因此我所能想到的就是将Tomcat与#DOJO_PATH#等配置为应用程序的context.xml中的环境变量,并使用Tomcat将这些参数插入到CSS中在运行时。

我可以将CSS文件制作成生成的JSP,但对我来说似乎有点难看。此外,每次应用程序部署只需要进行一次替换,因此使用JSP反复动态生成样式表将非常浪费。

有没有人可以使用任何其他想法或工具?我们致力于Tomcat并在部署或运行​​时(即不在构建时)替换这些参数。

2 个答案:

答案 0 :(得分:1)

你现在所做的事情对我来说似乎是最好的解决方案。

您可以轻松编写这些文件以供Servlet使用,并使用某些视图呈现技术(如Freemarker)(或者甚至是自定义书写模板系统来替换关键字)动态替换它们的内容,但这样做会产生相关成本如此。

如果Tomcat在运行时真正是静态的,那么它们可以更有效地提供这些资源。此外,如果您使用Apache安装Tomcat服务器,那么您可以让Apache提供静态内容而无需访问Tomcat服务器,从而使您的JVM线程池更小,争用率更低。

答案 1 :(得分:0)

您还可以拥有一个指向特定于环境的配置文件的环境变量,并在此时为您启用一些启动脚本。这样,命令行就不会失控。