关于websphere5下部署war包时web.xml的验证问题

最近在websphere5.1上部署war包时遇到这样的问题:
消息

EAR 文件可能是损坏的和/或不完整的。
com.ibm.etools.archive.exception.DeploymentDescriptorLoadException: WEB-INF/web.xml

后来查看各方面资料,找到了问题所在。在使用标准的dtd方式验证web.xml时,webshpere5对web.xml的验证极为严格,其中的各个元素及其子元素无论是在名称上,还是在顺序上等等都要符合java官方规范,尤其是在出现顺序上。例如在web-app_2_3.dtd中定义<servlet></servlet>元素的定义如下:

<!ELEMENT servlet (icon?, servlet-name, display-name?, description?,
(servlet-class|jsp-file), init-param*, load-on-startup?, run-as?, security-role-ref*)>


那么如果你打算在was5.0中部署WAR包时就必须严格遵照该规范来书写该元素。如果你书写为以下方式:

<servlet>

<display-name>FetchFile</display-name>
<servlet-name>FetchFile</servlet-name>
<description>FetchAnnexServlet</description>
<servlet-class>com.egf.servlet.FetchFile</servlet-class>
</servlet>

那么was5.0仍然会报验证错误,仅仅因为servlet的子元素出现顺序未按照官方规范。应该为以下方式:

<servlet>
<servlet-name>FetchFile</servlet-name>
<display-name>FetchFile</display-name>
<description>FetchAnnexServlet</description>
<servlet-class>com.egf.servlet.FetchFile</servlet-class>
</servlet>

类似的,其他元素也应该遵循相应的规则。

如果在部署时出现该错误,可以参见was的错误日志,并按其错误提示修改相应的元素即可。

你可能感兴趣的:(websphere)