tomcat jar 包 与 项目jar包冲突问题解决
Posted java-北京-菜鸟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat jar 包 与 项目jar包冲突问题解决相关的知识,希望对你有一定的参考价值。
项目中有时候会遇到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
java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/Jsp
是因为 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自己进行加载。
False,表示将不遵循这个delegate机制,即WebAppClassLoader在加载类文件时,会优先自己尝试加载,如果加载失败,才会沿着继承链,依次委托父类加载。
以上是关于tomcat jar 包 与 项目jar包冲突问题解决的主要内容,如果未能解决你的问题,请参考以下文章
weblogic下包冲突 导致@Valid失效 不能正确校验表单 分析与解决