为什么 web.xml 被从 servlet 3.0 中删除了?现在通过 Java 完成配置。
对 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)。
如您所见,不需要任何部署描述符。
所以现在生成的默认 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 等)读取和理解。因此总的来说,它们提供相同的功能。
注释的优点是将代码及其配置保持在一起。所以配置更接近它所属的地方。只需查看类或方法,您就可以立即了解很多有关代码及其配置的信息。
如今——即 Java 5 之后——许多框架和规范都采用注释方式。例如,hibernate、spring、REST(jax rs) 等。据我所知,它们仍然提供了一种使用 xml 来管理配置的方法。我的一些同事仍然更喜欢 xml,例如 spring 框架。我更倾向于注释。这是一个偏好和团队风格的问题。
至于为什么java ee团队决定继续使用注解,我想这一定是考虑了诸如此类的因素而做出的决定。
在 Servlet 3.0 中,web.xml 仍然存在,但是您可以通过从 Servlet 3.0 添加的注释方法来管理您的应用程序。这样做的原因只是从那里删除 xml 文件......