在 servlet容器中添加越来越多的配置 (在我的情况下,嵌入式Jetty )我开始怀疑是否应该放置所有内容进入 web.xml 或在Java代码中保留配置 programmatic 。
是否有理由选择web.xml而非编程方法,反之亦然?是安全原因还是仅仅是装饰品?
对我而言,似乎web.xml更好,因为您专门用DSL来完成工作,而不是将所有内容都压入代码中。另一方面,当我在代码中时,我可以快速查找配置。
答案 0 :(得分:2)
这取决于您想要配置的内容和方便性。
Servlet 3.0允许您以三种不同的方式定义元数据:
web.xml ,通常在此处配置在不同环境中部署时会发生变化的配置。这些属性包括数据库属性,属性文件,管理员用户属性等。
在web.xml中定义的优点是,所有配置都存在于中心位置,并且易于文档化等。仅在一个地方定义,在分布式开发中很难维护。是的,再次,Servlet 3.0允许你应该为其定义库的web-fragments.xml,它可以再次为每个库提供单个描述符。
注释,在开发期间可以定义但在部署期间也可以覆盖的任何内容都被定义为注释。
优点是无需在部署描述符中进行配置,除非必须重写它。注释可以给出默认值。 缺点是Container必须处理注释的所有类。我不认为这是一个很大的劣势。
以编程方式,任何您知道不会改变的内容都可以以编程方式进行配置。优点是开发人员确信任何人都不会随时更改配置。
答案 1 :(得分:0)
要使用web.config应用新设置,您只需更改配置文件并重新启动应用程序。如果在代码中保持配置,则需要重建项目。
答案 2 :(得分:0)
根据我的经验,您可以将web.xml用于一些很少改变的配置(如果您使用Jersey):
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- Register resources and providers under com.vogella.jersey.first package. -->
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.vogella.jersey.first</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
(我从http://www.vogella.com/tutorials/REST/article.html)
复制这些代码如果配置定期更改和更新(可以查看Netflix Archaius),编程配置将会很好
例如:服务超时,线程池大小或指标跟踪等...