网上有很多关于存储变量的建议,这些变量可能会根据env /其他条件而变化,这些建议是将它们放在web.xml中,但不是war文件中的web.xml吗?即使你发现爆炸的战争并改变它,如果你更新战争文件,它不会被覆盖吗?或者webcontainer是否提供了任何方法来配置web.xml而不需要修改war文件?
答案 0 :(得分:3)
根据我的经验,web.xml变量的使用非常有限 - 唯一的好处是它是寻找硬编码“配置”的标准位置。
有几种常见的解决方案可以获得更合理的方式来配置Web应用程序,其中没有一个是标准的:
getResourceAsStream
从类路径开始(IIRC通常意味着将配置文件放在Tomcat的lib
目录中)你也可以使用JNDI,它的缺点是设置和读取都相当重(如果你使用的是vanilla,反正 - 例如Spring对从JNDI读取有相当好的支持)。但是,JNDI 相当不错,因为它是每个应用程序,而不是进程全局设置。如果你需要在同一台服务器上运行同一个应用程序的多个实例,JNDI几乎是唯一的选择(虽然你可以用它来指出某个地方的配置文件,这样可以更容易使用)。
这可能与您的兴趣相关:How can I store Java EE configuration parameters outside of an EAR or WAR?
答案 1 :(得分:0)
在web.xml中指定参数值的优点
另见:
答案 2 :(得分:0)
据我所知,web.xml
无法提供存储自定义变量的功能。配置Web应用程序的典型方法是将配置存储在数据库中,单独的properties / xml / json / other文件,从单独的Web服务获取配置或通过环境变量提供配置。
通常使用所有这些的混合物。例如,您可以在运行容器时使用-D
开关添加系统变量。此变量将包含可在其中找到配置的文件或URL的路径。
您可以使用OS环境提供参数。
您的选择应取决于您拥有的参数数量,您正在开发的应用程序类型以及如何配置应用程序服务器或计算机操作系统。例如,如果您在服务器上托管应用程序无法配置这些方式不适合您,那么DB或Web服务是您唯一的方法。
答案 3 :(得分:0)
在Tomcat容器上工作的人们认识到你已经确定并具有解决问题的方法的讽刺。
他们针对您提到的问题实施的解决方案是创建另一个xml文件... the context.xml file,由服务器读取。
您似乎可以编辑此文件并让Tomcat在不重新启动的情况下读取新值...只要您将元素保留在server.xml之外。
我不使用Tomcat,所以我可能会错误地解释文档
GlassFish Web容器支持类似功能,但通过一对admin cli命令(asadmin)执行:
可能有Web管理控制台支持,您可以通过编辑domain.xml来设置它们。看起来它不像Tomcat实现那么灵活......但它确实使它非常容易使用。