对于servlet 3.x,使用基于java的配置而不是web.xml有什么好处

时间:2014-11-10 16:13:47

标签: java web.xml servlet-3.0

使用Servlet 3.x API,我们可以完全消除web.xml并迁移到Java Config。我总是发现web.xml是一个非常好的调试点,可以开始理解Web应用程序。我无法理解为什么我们计划迁移到基于Java的配置并完全删除web.xml。我试过在互联网上寻找合适的答案,但找不到令人满意的解释。任何人都可以帮助我在实际场景中理解这一点。

2 个答案:

答案 0 :(得分:4)

它避免重复自己,并通过这样做犯错误。例如,servlet类是com.foo.bar.SomeServlet。使用web.xml,您将被迫在web.xml中重新输入此类:

<servlet-class>com.foo.bar.Someservlet</servlet-class>

但是等等,你做了一个拼写错误,你只会在运行时发现它。

或者您重命名了一个servlet类,但是您忘记在web.xml中重命名它,并且您只在部署时发现错误。

最后,它们让我们的生活更轻松。您正在创建一个servlet,显然您希望将其映射到某个URL。所以你只需添加一个注释。无需转到另一个文件来添加映射,然后返回到该类,因为您忘记了它的确切名称,然后再次返回该文件。有关servlet的所有内容都在servlet类中。对于过滤器,监听器等也是如此

注释没有所有这些问题。

答案 1 :(得分:1)

无描述符部署是配置文件的替代方案,但并不是要在每个应用程序和每个用例中始终替换web.xml。如果您需要能够在不重新编译的情况下更改配置,那么您当然应该坚持使用部署描述符。有时,设置所有内容的集中位置可以更容易启动。但它也可能不太灵活,因为您需要明确地手动设置所有内容。

自动可发现注释的一个优点是它们可以分离您的端点并使它们独立。例如,如果您构建JAX-RS Web服务,则Web应用程序只需提供应用程序路径。它不需要知道哪些资源实际可用。无论资源类如何命名或它们是哪个包都无关紧要。容器将处理一切。因为它完全符合servlet标准,所以你只需要在servlet容器中使用带注释的servlet或资源端点抛出war存档并让它们运行。或者将其作为wab存档并部署与osgi web bundle相同的东西。添加一些DI,所有这些都可以实现高度模块化的Web应用程序,并且可以轻松使用独立的微服务。

实际上,您也可以通过Web片段描述符获得大部分好处。另一方面,当您在整个系统中散布了数十个web-fragment.xml文件时,您也将失去明确的应用程序入口点的优势。此时,无论您使用文件还是注释,都可能取决于您的偏好。