向我的servlet 容器(在我的例子中为Embedded Jetty )添加越来越多的配置我开始怀疑是否应该将所有内容都放入web.xml或在 Java 代码中保持配置程序化。
是否有理由选择 web.xml 而不是编程方法,反之亦然?是否有安全原因,或者这只是装饰性的?
对我来说,似乎 web.xml 更好,因为您专门使用 DSL 来完成这项工作,而不是将所有内容都压入代码中。另一方面,当我在代码中时,我可以快速查找配置。
向我的servlet 容器(在我的例子中为Embedded Jetty )添加越来越多的配置我开始怀疑是否应该将所有内容都放入web.xml或在 Java 代码中保持配置程序化。
是否有理由选择 web.xml 而不是编程方法,反之亦然?是否有安全原因,或者这只是装饰性的?
对我来说,似乎 web.xml 更好,因为您专门使用 DSL 来完成这项工作,而不是将所有内容都压入代码中。另一方面,当我在代码中时,我可以快速查找配置。
这取决于您要配置的内容和您的便利性。
Servlet 3.0 允许您以三种不同的方式定义元数据:
web.xml,通常在不同环境下部署时会发生变化的配置应该在这里配置。这些属性包括数据库属性、属性文件、管理员用户属性等。
在web.xml中定义的好处是,所有的配置都集中在一个地方,便于文档编制等。只在一个地方定义,分布式开发时维护困难。是的,Servlet 3.0 再次允许 web-fragments.xml,您应该为其定义库,每个库可以再次具有单个描述符。
注释,任何可以在开发过程中定义但也可以在部署过程中被覆盖的东西都被定义为注释。
优点是无需在部署描述符中进行配置,除非它必须被覆盖。注释可以给出默认值。缺点是容器必须处理所有类的注释。我不认为这是很大的缺点。
以编程方式,您知道不会更改的任何内容都可以以编程方式进行配置。优点是开发人员可以确定任何人都不会随时更改配置。
要使用 web.config 应用新设置,您只需更改配置文件并重新启动应用程序。如果在代码中保留配置,您将需要重建项目。
根据我的经验,您可以将 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),则程序化配置会很好。
例如:服务超时、线程池大小或指标跟踪等...