您的位置:首页 > 运维架构 > Tomcat

Tomcat 7.0.12 报错 org.apache.catalina.deploy.WebXml addFilter

2017-04-28 10:36 549 查看
今天工作的时候从SVN新下载了一个项目,用的Tomcat 7.0.52 启动的,虽然项目能启动,但是有些页面报错:

java.io.FileNotFoundException: Could not resolve XML resource
[null] with public ID [***] and base URI [null] to a known, local entity.


是因为 自从7.0.52版本后出于安全考虑将 xmlBlockExternal=”true”

官方解释:

As per discussion with Tomcat developers, xmlBlockExternal=”true”
attribute of Tomcat’s Context (context.xml) was set true by default
starting from 7.0.52. With xmlBlockExternal=”false” generated/djn-
settings.conf can be included` ontext  xmlBlockExternal="false">


可以将 Tomcat conf目录下的context.xml的 contex 节点上加上一个属性

xmlBlockExternal=”false”

然后我下载了一个低版本的 Tomcat 7.0.12 ,运行后又出现下面的错误,我将主要的信息截了出来:

2017-4-28 10:32:25 org.apache.tomcat.util.digester.Digester endElement
严重: End event threw exception
java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter
at org.apache.tomcat.util.IntrospectionUtils.callMethod1(IntrospectionUtils.java:802)
at org.apache.tomcat.util.digester.SetNextRule.end(SetNextRule.java:201)
at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1057)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
.....
2017-4-28 10:32:25 org.apache.catalina.startup.ContextConfig parseWebXml
严重: Parse error in application web.xml file at jndi:/localhost/B-SDM/WEB-INF/web.xml
java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter
at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2687)
at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2713)
at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1060)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
......
2017-4-<
ac35
span class="hljs-number">28 10:32:25 org.apache.catalina.startup.ContextConfig parseWebXml
严重: Occurred at line 21 column 11
2017-4-28 10:32:25 org.apache.catalina.startup.ContextConfig configureStart
严重: Marking this application unavailable due to previous error(s)


这个错的解决方法是在Tomcat的 conf目录下的context.xml配置文件中的 Context 节点上加入 配置.

<Loader delegate="true" />


关于< Loader delegate=”true” /> 节点:

设置为 true,表示tomcat将遵循JVM的delegate机制,即一个WebAppClassLoader在加载类文件时,会先递交给SharedClassLoader加载,SharedClassLoader无法加载成功,会继续向自己的父类委托,一直到BootstarpClassLoader,如果都没有加载成功,则最后由WebAppClassLoader自己进行加载。

设置成 false,表示将不遵循这个delegate机制,即WebAppClassLoader在加载类文件时,会优先自己尝试加载,如果加载失败,才会沿着继承链,依次委托父类加载。

关于类加载的机制,将在稍后的博客中总结.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐