为什么 web.xml 从 servlet 3.0 中被删除

问题描述 投票:0回答:4

为什么 web.xml 被从 servlet 3.0 中删除了?现在通过 Java 完成配置。

java servlets web
4个回答
6
投票

对 web.xml 的支持在 Servlet 3.0 中并未被删除,并且(IMO)在可预见的将来不太可能被删除。

证据? 如果您下载 Servlet 3.0 规范并搜索“web.xml”,您将看到很多对其的引用。

最有说服力的引述在A6.6

“如果 Web 应用程序不包含任何内容,则不需要包含 web.xml Servlet、过滤器或侦听器组件。换句话说,一个应用程序仅包含 静态文件或 JSP 页面不需要存在 web.xml。”

它的意思是,Web 应用程序“允许”省略“web.xml”文件……但也允许包含一个文件。 换句话说,它是可选

那么他们为什么
允许

你省略“web.xml”? 我可以想到几个原因:

    以编程方式或通过注释进行配置通常
  • 更方便!

    以不同的方式/地点进行配置是违反 DRY 原则的。 如果您可以通过注释和/或显式调用在 Java 源代码中进行配置,为什么还要在 XML 中进行配置?
  • 但最重要的是,这是
  • 你的选择

在 Servlet 3 之前,定义任何部署属性的唯一方法是使用部署描述符 (web.xml)。

3
投票
从 Java EE 6 开始,引入了 @WebServlet、@WebFilter、@WebListener 等注释,这些注释允许您在 java 类本身中定义部署属性。 您不必在 web.xml 中提及它们。现在可以使用 @WebSerlvet 注释提供您可以在 web.xml 中提及的所有属性。

如您所见,不需要任何部署描述符。

所以现在生成的默认 web.xml 将只包含这个

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

这不会造成任何伤害
    

一种看待它的方法是,现在注释提供与之前由 Web 部署描述符 (web.xml) 提供的相同配置。注释或 xml 由实现相关规范的引擎(tomcat、junit 等)读取和理解。因此总的来说,它们提供相同的功能。

2
投票
Xml 配置将代码与配置解耦。但它们可能会受到污染,也可能难以维护。您可能会听到诸如约定优于配置之类的说法。我并不是说所有这些缺点都适用于 web.xml。但总的来说,它们是关于 xml 配置的。 xml 可能会变得混乱。大多数时候它们是手写的并且容易出现错别字。由于它们在撰写本文时未编译(?)/检查语法正确性,因此它们可能在运行时失败。

注释的优点是将代码及其配置保持在一起。所以配置更接近它所属的地方。只需查看类或方法,您就可以立即了解很多有关代码及其配置的信息。

如今——即 Java 5 之后——许多框架和规范都采用注释方式。例如,hibernate、spring、REST(jax rs) 等。据我所知,它们仍然提供了一种使用 xml 来管理配置的方法。我的一些同事仍然更喜欢 xml,例如 spring 框架。我更倾向于注释。这是一个偏好和团队风格的问题。

至于为什么java ee团队决定继续使用注解,我想这一定是考虑了诸如此类的因素而做出的决定。

在 Servlet 3.0 中,web.xml 仍然存在,但是您可以通过从 Servlet 3.0 添加的注释方法来管理您的应用程序。这样做的原因只是从那里删除 xml 文件......

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.