正确的解决方法;javax.servlet.ServletException:java.lang.LinkageError:loader约束冲突“;?

正确的解决方法;javax.servlet.ServletException:java.lang.LinkageError:loader约束冲突“;?,java,tomcat,Java,Tomcat,我将我的war文件(在Tomcat7环境下运行)移动到Tomcat6环境。然后我得到了这个异常。作为解决方案,我尝试了。但仍然没有成功!!我想在一台只有tomcat 6的远程机器上运行。请帮我解决 例外情况 javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/WebappClassLo

我将我的war文件(在Tomcat7环境下运行)移动到Tomcat6环境。然后我得到了这个异常。作为解决方案,我尝试了。但仍然没有成功!!我想在一台只有tomcat 6的远程机器上运行。请帮我解决

例外情况

 javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/WebappClassLoader) previously initiated loading for a different type with name "javax/el/ExpressionFactory"
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:268)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
        org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
        org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    root cause

    java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/WebappClassLoader) previously initiated loading for a different type with name "javax/el/ExpressionFactory"
        java.lang.ClassLoader.defineClass1(Native Method)
        java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2331)
        org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:976)
        org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1451)
        org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1329)
        org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128)
        org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
        java.lang.Class.getDeclaredFields0(Native Method)
        java.lang.Class.privateGetDeclaredFields(Class.java:2397)
        java.lang.Class.getDeclaredFields(Class.java:1806)
        org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:181)
        org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:148)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
        org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
        org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

在类路径中有两个版本的表达式语言。你的应用程序加载的服务器与你的服务器不兼容。查看一个名为javax.el-api、commons el或jboss el-api等的文件。尝试从应用程序中删除该文件,因为Tomcat有自己的版本。

我被这个错误困扰了很长时间。添加了我在解决此问题之前所做的一些研究。是的,我们需要从
/WEB-INF/lib
文件夹中删除库,如
jsp-api.jar、el-api.jar、servlet-api.jar
。但是怎么做呢

在我的例子中,我使用ApacheIvy作为依赖项管理器,并使用SpringMVC。它下载所有依赖项以及上面提到的库。在运行时,这些与Tomcat库提供的API冲突。简单的解决方案是从依赖项中排除这些JAR,或者创建配置,并仅在编译时配置中包含这些库。很快对我起作用的是排除了这些库

    <dependency org="org.springframework" name="spring-webmvc"
        rev="4.0.4.RELEASE">
        <exclude org="javax.servlet" name="javax.servlet-api" />
        <exclude org="javax.servlet.jsp" name="jsp-api" />
        <exclude org="javax.el" name="javax.el-api" />
    </dependency>