项目中有时候会遇到jar包冲突的问题, 报以下异常 Servlet.service() for servlet [jsp] in context with path [] threw exception [java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;] with root cause 是因为 jasper-compiler.jar jasper-runtime.jar 这几个jar包的问题, 因为tomcat6中没有这几个jar包, tomcat7却自带了这几个jar包, 当项目从tomcat6移到tomcat7时, 就会报jar包冲突的错误, 这时候我们经常的选择是删除项目中的jar包, 后来发现在tomcat的context.xml中配置一个参数 <Loader delegate='true' />, 就可以解决, 原因 True,表示tomcat将遵循JVM的delegate机制,即一个WebAppClassLoader在加载类文件时,会先递交给SharedClassLoader加载,SharedClassLoader无法加载成功,会继续向自己的父类委托,一直到BootstarpClassLoader,如果都没有加载成功,则最后由WebAppClassLoader自己进行加载。 |
|
来自: Levy_X > 《JAVAWEB学习资料》