本人在使用tomcat 自带websocket时需要引用tomcat lib中的catlina.jar tomcatwebsocket.jar 到项目后启动tomcat时产生 java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet 运行异常。网上给出的解决方案是:
是在context.xml 添加 <loader delegate ="true"/>;让tomcat遵循jvm的代理机制。避免tomcat 中jar版本冲突引起的位置错误问题。
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的话,这就有可能会导致很多奇怪的问题。
原文转载于:http://blog.csdn.net/u013031360/article/details/52389402