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

时间:2014-08-25 03:59:16

标签: java servlets web

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

4 个答案:

答案 0 :(得分:3)

在Servlet 3.0中没有删除对web.xml的支持,而且(IMO)在可预见的将来不太可能删除它。

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

最有说服力的引用是在A6.6

  

“如果Web应用程序不包含任何内容,则不需要包含web.xml   Servlet,Filter或Listener组件。换句话说,只包含一个应用程序   静态文件或JSP页面不需要存在web.xml。“

它的含义是,允许允许删除“web.xml”文件...但是也允许包含一个。换句话说,它是可选


那么为什么他们允许你遗漏“web.xml”?我可以想到几个原因:

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

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

但最重要的是,是你的选择

答案 1 :(得分:1)

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

从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">

这不会造成伤害

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

Xml配置将代码与配置分离。但它们可能会被污染,难以维持。您可能会听到约定优于配置等内容。我并不是说所有这些缺点都适用于web.xml。但总的来说,它们与xml配置有关。 xmls可能会变得混乱。大多数时候,它们都是手写的,容易出现错别字。由于它们在编写时没有编译(?)/检查语法正确性,因此它们可能在运行时失败。

注释提供了将代码及其配置保持在一起的优势。因此配置更接近它所属的位置。通过查看类或方法,您可以立即了解很多有关代码及其配置的信息。

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

至于为什么java ee团队决定继续进行注释,我认为一定是考虑这些因素的决定。

相关问题