部署描述符中xml声明的重要性是什么?

时间:2017-01-05 15:31:07

标签: java java-ee weblogic weblogic12c java-ee-7

任何人都知道它们是否重要吗?我正在尝试创建一个WebLogic 12c应用程序。对于web.xml文件,这个xml声明是否正确:

<?xml version="1.0" encoding="windows-1252"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">

这是我的application.xml声明:

<?xml version = '1.0' encoding="UTF-8"?>
<application xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd" version="7">

如果不是版本=&#34; 7&#34;,我有版本=&#34; 5&#34;像这样,这有关系吗?这是否告诉它使用Java EE 5规范,或者因为我使用的是12c,无论如何都是Java EE 7:

<?xml version = '1.0' encoding = 'windows-1252'?>
<application 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/application_5.xsd" version="5">

4 个答案:

答案 0 :(得分:2)

在JavaEE 7之前,必须在部署描述符中列出所有常见注释,如@Path@WebListener。通过引入这些注释,您现在可以将它们留给他们来进行类角色绑定。

但是......他们已过时,web.xml具有优先权,并将覆盖注释。这使得编码人员可以轻松地为开发和测试目的设置一些设置,并让部署人员将其设置为更多可部署的东西&#34;没有触及代码。

答案 1 :(得分:1)

有一个很好的原则叫做“早先失败”。这意味着,越早发现错误越好。并且一旦检测到错误报告它,请不要继续。这是因为如果你继续使用不良数据或在糟糕状态下运行,那么损害将比你立即失败时更高。

实施例: 考虑将资金从账户A转移到B的系统。计算最终金额。计算中的错误导致数量为负数。一旦你发现这种情况有什么好处:未能继续并且实际上为帐户A增加了一些金额并从帐户B中删除了虽然需要相反的操作?

同样涉及XML中的模式。如果应用程序(在您的情况下,Java EE容器无法验证XML,那么它比错误地部署您的应用程序更好。不正确的部署可能会导致如上所述的错误。

答案 2 :(得分:1)

是的,如果您使用的是Java EE 7 - 请使用新的部署描述符。命名空间已经改变。

您可以比较http://java.sun.com/xml/ns/javaee/application_5.xsdhttp://xmlns.jcp.org/xml/ns/javaee/application_7.xsd

之间的差异

此处记录了更改摘要 - https://antoniogoncalves.org/2013/06/04/java-ee-7-deployment-descriptors/

即使使用旧描述符,应用程序服务器也可能接受您的应用程序,但它可能只是为了向后兼容。如果您确定您的应用程序是基于Java EE 7的,那么强烈建议您使用新的描述符命名空间。

答案 3 :(得分:1)

当然重要。不同的模式将具有不同的功能。我的回答一般适用于模式。

有很多变量,但某些模式可能与某种依赖项不兼容。例如(完全虚构的情况),让我们说您正在使用Java EE版本5,并导入版本7架构。

版本5有一个名为foo的元素。 foo需要id。版本7为foo添加了一项新功能,现在它有一个新参数name

您正在使用只有foo(id)的Java EE 5,但您在XML中定义了

 <foo id="bar" name="bar"/>
根据架构,

是完全有效的XML。但是,这在运行时会失败,因为在Java EE 5中,foo不能有name

我不了解您的具体情况,但在所有情况下,您的架构版本应与您的相关版本相匹配。最好的情况是没有什么不好的事情。最糟糕的情况是失败了,而且不明白为什么。