【发布时间】:2011-04-29 19:27:39
【问题描述】:
有点懒惰,我很高兴发现我可以通过 New -> Servlet 创建一个新的 servlet 源代码,而不是通过 New -> Class 然后将类编辑为 servlet。
但是,我发现每次在 Eclipse 中创建新的 servlet 时,Eclipse 都会修改我的 web.xml。
具体来说,它将顶部元素修改为:
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
id="WebApp_ID" version="2.4">
(我的换行符。)
这似乎并不一定是坏事,但它通过在其名称前添加“javaee:”来修改各种子元素,以表明这些元素属于该命名空间。
例如,它会改变
<display-name>ShowLifecycles</display-name>
到
<javaee:display-name>ShowLifecycles</javaee:display-name>
之后,eclipse 抱怨它修改的所有元素,给我这样的符号:
cvc-complex-type.2.4.a: Invalid content was found starting with element 'javaee:display-name'. One of '{"http://
java.sun.com/xml/ns/j2ee":description, "http://java.sun.com/xml/ns/j2ee":display-name, "http://java.sun.com/xml/ns/
j2ee":icon, "http://java.sun.com/xml/ns/j2ee":distributable, "http://java.sun.com/xml/ns/j2ee":context-param, "http://
java.sun.com/xml/ns/j2ee":filter, "http://java.sun.com/xml/ns/j2ee":filter-mapping, "http://java.sun.com/xml/ns/
j2ee":listener, "http://java.sun.com/xml/ns/j2ee":servlet, "http://java.sun.com/xml/ns/j2ee":servlet-mapping, "http://
java.sun.com/xml/ns/j2ee":session-config, "http://java.sun.com/xml/ns/j2ee":mime-mapping, "http://java.sun.com/xml/ns/
j2ee":welcome-file-list, "http://java.sun.com/xml/ns/j2ee":error-page, "http://java.sun.com/xml/ns/j2ee":jsp-config, "http://
java.sun.com/xml/ns/j2ee":security-constraint, "http://java.sun.com/xml/ns/j2ee":login-config, "http://java.sun.com/xml/ns/
j2ee":security-role, "http://java.sun.com/xml/ns/j2ee":env-entry, "http://java.sun.com/xml/ns/j2ee":ejb-ref, "http://
java.sun.com/xml/ns/j2ee":ejb-local-ref, "http://java.sun.com/xml/ns/j2ee":service-ref, "http://java.sun.com/xml/ns/
j2ee":resource-ref, "http://java.sun.com/xml/ns/j2ee":resource-env-ref, "http://java.sun.com/xml/ns/j2ee":message-
destination-ref, "http://java.sun.com/xml/ns/j2ee":message-destination, "http://java.sun.com/xml/ns/j2ee":locale-
encoding-mapping-list}' is expected.
更糟糕的是,当我使用 find 和 replace 删除所有“javaee:”文件时,即使它们不再存在,Eclipse 仍然会抱怨这些。我必须复制并粘贴整个剩余文件,以消除这些投诉。
我确信 Eclipse 正在努力发挥作用,并预料到对这个命名空间的一些期望或需求。我该如何做以下两件事之一:
让它停止这样做?
利用它试图做的任何事情,让它为我工作而不是对我不利?
【问题讨论】:
-
这是避免使用 Eclipse 向导的一个很好的理由
-
你可以使用servlet 3.0吗?
-
@Bozho - 我是 servlet 的新手。我可能可以使用 servlet 3.0,但我什至不知道我当前使用的是哪个版本(我认为是最新的)或如何告诉它使用不同的版本。
-
@matt b - 这将是最简单的解决方案,但与其避免它,我更愿意理解它。 :-)
-
获取 Tomcat 7.0 并使用 servlet 3.0。 WTP 也支持它,所以请尝试一下。
标签: java eclipse servlets web.xml xml-namespaces