启动Tomcat的错误 - 外部参数实体“%[dtd];”“在标记后包含字符

时间:2011-10-10 10:34:06

标签: java xml tomcat struts

我遇到了一个我无法弄清楚的错误。

基本上,NOTHING已经在正在运行的Web应用程序上发生了变化(除了数据流入之外)。它突然死了。

当访问该站点时,我看到HTTP状态500错误,带有NullPointerException。我认为原因是我的localhost日志中的先前错误;

SEVERE: Servlet threw load() exception javax.servlet.UnavailableException: org.xml.sax.SAXParseException: External parameter entity "%[dtd];" has characters after markup. at org.apache.struts.action.ActionServlet.init(ActionServlet.java:402) at javax.servlet.GenericServlet.init(GenericServlet.java:212) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4149) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4458) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630) at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:722) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:583) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

这让我觉得我的struts-config.xml出了问题,但是在大约2年内它根本没有改变,并且一直工作正常。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您的struts-config.xml文件是指位于jakarta.apache.org网站上的远程DTD。虽然该位置有效,但可能是解析器下载和使用DTD的尝试失败,可能是因为代理会过滤传出流量并返回DTD的无效内容。

您可以下载DTD并在您自己的环境中托管它,并让struts-config.xml文件使用这个新位置,如下所示:

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://example-org.com/struts-config_1_2.dtd">

其中example-org.com指的是本地Web服务器。

您也可以使用文件URI来引用本地目录中托管的DTD:

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "file:///tmp/struts-config_1_2.dtd">

struts-config_1_2.dtd文件放在Tomcat主机的/tmp目录中时会起作用;您需要确保Tomcat可以读取此文件。

答案 1 :(得分:0)

在我的情况下,[ERROR]外部参数实体&#34;%(null);&#34;标记之后的字符是由缺少的&#34;!&#34;在ATTLIST标记的开头。 这是提供的DTD架构中的拼写错误。 我有这个:

 <ATTLIST btag id CDATA #REQUIRED>

并且解决方案是添加&#34;!&#34;简单地:

 <!ATTLIST btag id CDATA #REQUIRED>