【问题标题】:web.xml versus programmatic approachweb.xml 与编程方法
【发布时间】:2012-06-26 23:16:39
【问题描述】:

添加越来越多的配置到我的servlet容器(在我的例子中是Embedded Jetty)放入 web.xml 或将配置 programmatic 保留在 Java 代码中。

是否有理由选择 web.xml 而不是编程方法,反之亦然?是否有安全原因或者这只是装饰性的?

对我来说,web.xml 似乎更好,因为您专门使用 DSL 来完成这项工作,而不是将所有内容都压入代码中。另一方面,当我在代码中时,我可以快速查找配置。

【问题讨论】:

  • 你说的是哪种配置?
  • 其实所有可以做的配置,目前我只是配置servlet映射和约束,比如JAAS。

标签: java servlets configuration jetty web.xml


【解决方案1】:

根据我的经验,您可以将 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)
例如:服务超时、线程池大小或指标跟踪等...

【讨论】:

    【解决方案2】:

    这取决于您要配置的内容和您的便利性。

    Servlet 3.0 允许您以三种不同的方式定义元数据:

    web.xml,通常部署在不同环境时会发生变化的配置应该在这里配置。这些属性如数据库属性、属性文件、管理员用户属性等。

    在web.xml中定义的优点,所有的配置都集中在一个地方,便于文档编制等。只在一个地方定义,分布式开发时维护困难。是的,Servlet 3.0 再次允许 web-fragments.xml,您应该为其定义库,每个库可以再次具有单个描述符。

    注解,任何可以在开发过程中定义但也可以在部署过程中被覆盖的东西都被定义为注解。

    优点是不需要在部署描述符中配置,除非它必须被覆盖。注释可以给出默认值。 缺点是容器必须处理所有类的注释。我不认为这是很大的缺点。

    以编程方式,您知道不会更改的任何内容都可以以编程方式进行配置。优点是开发人员可以确定配置不会被任何人随时更改。

    【讨论】:

      【解决方案3】:

      要使用 web.config 应用新设置,您只需更改配置文件并重新启动应用程序。如果在代码中保留配置,您将需要重新构建项目。

      【讨论】:

      • 我也想过。但是,为什么还要介意程序化方法呢?
      猜你喜欢
      • 1970-01-01
      • 2017-02-24
      • 2013-05-19
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 2010-09-14
      • 2023-04-03
      相关资源
      最近更新 更多