启动Tomcat一直出错:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter
开始以为是web.xml或某种编译错误引起,尝试了多种方法都没有结果。网搜以后,解决方法是在tomacat的配置文件context.xml里加上<Loader delegate="true"/>,添加以后测试OK。
大牛的解释是:
Loader对象可出现在Context中以控制Java类的加载。属性:delegate
delegate配置的意义:
True,表示tomcat将遵循JVM的delegate机制,即一个WebAppClassLoader在加载类文件时,会先递交给SharedClassLoader加载,SharedClassLoader无法加载成功,会继续向自己的父类委托,一直到BootstarpClassLoader,如果都没有加载成功,则最后由WebAppClassLoader自己进行加载。
False,表示将不遵循这个delegate机制,即WebAppClassLoader在加载类文件时,会优先自己尝试加载,如果加载失败,才会沿着继承链,依次委托父类加载。
在此说一下配置为False需要注意的问题:一旦配置为False,就要注意多个WebApp公用jar包存放位置,你可能会放到${CATALINA_HOME}/shared目录中共享,但是一不小心在应用的/WEB-INF/lib中也包含了一个同名的但版本不一致的jar的话,这就有可能会导致很多奇怪的问题
印象中 以前解决过这种问题,这次为了防止再忘记,特记于此。