Jsp 什么';这是一个很好的参数化方法;“静态”;Tomcat webapp中的内容(如CSS)?

Jsp 什么';这是一个很好的参数化方法;“静态”;Tomcat webapp中的内容(如CSS)?,jsp,deployment,configuration,tomcat,substitution,Jsp,Deployment,Configuration,Tomcat,Substitution,我们的一些CSS文件包含的参数可能因部署位置(dev、QA、prod)而异。例如: background: url(#DOJO_PATH#/dijit/themes...) 避免硬编码特定CDN或本地托管Dojo安装的路径 当部署脚本将webapp的内容复制到Tomcat webapps目录中时,这些值在文本上由实际值替换。通过这种方式,相同的部署归档文件(包含其他配置的WAR+TAR文件)可以部署到dev、QA和prod,使用特定于环境的配置文件提供的不同参数 但是,我希望WAR的内容(包

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

 background: url(#DOJO_PATH#/dijit/themes...)
避免硬编码特定CDN或本地托管Dojo安装的路径

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

但是,我希望WAR的内容(包括模板化的CSS文件)独立于此内部部署脚本。由于我们无法真正控制部署脚本,所以我所能做的就是将Tomcat配置为应用程序context.xml中的环境变量,并在运行时使用Tomcat将这些参数插入CSS中

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


有没有人有其他的想法或工具来实现这一点?我们致力于Tomcat,并在部署或运行时(即,不是在构建时)替换这些参数。

对我来说,您现在所做的似乎是最好的解决方案

您可以轻松地编写这些由Servlet提供服务的文件,并使用一些视图呈现技术(如Freemarker,甚至是自定义编写的模板系统)动态替换这些文件的内容,以替换关键字,但这样做会带来成本


如果这些资源在运行时是真正静态的,Tomcat可以更有效地服务于这些资源。此外,如果您使用Apache前置Tomcat服务器,那么您可以让Apache在不影响Tomcat服务器的情况下服务于静态内容,从而使JVM线程池更小,竞争更少。

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

我想到,最好在Tomcat或JEE Servlet规范中有一个部署挂钩,以避免需要编写此类脚本我们通常会做的事情是使用Maven插件在构建阶段将单独的文件添加到Web存档中。这样,我们只需将P添加到构建命令中,并用正确的文件构建。但是,通常CSS中的路径应该是相同的相对路径。我们将应用程序部署到的环境(因为CSS引用的东西是web应用程序本身的一部分)。更改此url是因为您想将dojo放在CDN上吗?更像是我们想升级版本或切换CDN,而不涉及所有引用dojo主题内容的CSS代码。除了dojo url之外,还有其他参数化值,不过谢天谢地,静态文件中很少。我们不能真正使用Ant或Maven替换实际构建,因为站点文件是由另一个组使用其自定义脚本部署在QA和生产服务器上的。它们在QA和prod中部署相同的tarball。我们确实在本地工作站上使用Maven/Ant进行替换,但有两种方法做事情很烦人。