我遇到了一个我无法弄清楚的错误。
基本上,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年内它根本没有改变,并且一直工作正常。
有什么想法吗?
答案 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>