关于#HTTP##javaweb#的问题,如何解决?

HTTP Status 500 - java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest"
这个错误应该怎么解决?
我把全网能找到的方案都试了个遍,包括将servlet-api.jar和jsp-api.jar的scope属性改为provided,pom文件中的dependecy也改了,但还是不行
我大概知道是jar包冲突引起的问题,请问该如何解决?

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7484531
  • 这篇博客也不错, 你可以看下[java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/
  • 除此之外, 这篇博客: maven报错: previously initiated loading for a different type with name "servlet/http/HttpServletReq中的 HTTP Status 500 - java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name “javax/servlet/http/HttpServletRequest” 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    解决办法:
    百度上好多都说这样解决:

     <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    

    原因是 配置依赖插件的时候,没有加 <scope>provided</scope>
    导致servlet-api的jar或者jsp-api的jar包与tomcat服务器运行时自带的jar包相冲突

    这种原因是大多数网友 遇到的问题.

    但是,我的项目加了 <scope>provided</scope>依然报错,错误信息还是下面的 没变化,
    经过 不懈努力…终于找到了问题的源头:
    在自己电脑安装的jdk的jre中还有 一个servlet.jar,就是这个jar与tomcat运行时的jar相冲突了,删掉之后,完美运行~~~~2333
    路径:C:\Program Files (x86)\Java\jdk1.8.0_144\jre\lib\ext
    具体路径 参考你们自己的jdk安装的路径
    路径

    网页上的报错信息:

        HTTP Status 500 - java.lang.LinkageError:
         loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name 
        "javax/servlet/http/HttpServletRequest"
    

    网页上的报错信息
    控制台(tomcat)的报错信息:

    严重: Allocate exception for servlet demo2.AServlet
    java.lang.ClassCastException: demo2.AServlet cannot be cast to javax.servlet.Servlet
    	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
    	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:865)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at java.lang.Thread.run(Thread.java:748)
    

    为方便好看,我给分成了两端:

     三月 23, 2019 1:04:23 下午 org.apache.catalina.core.StandardWrapperValve invoke
        严重: Servlet.service() for servlet [jsp] in context with path [] threw exception [java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest"] with root cause
        java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest"
        	at java.lang.Class.getDeclaredMethods0(Native Method)
        	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        	at java.lang.Class.getDeclaredMethods(Class.java:1975)
        	at org.apache.catalina.util.Introspection.getDeclaredMethods(Introspection.java:127)
        	at org.apache.catalina.core.DefaultInstanceManager.populateAnnotationsCache(DefaultInstanceManager.java:342)
        	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:161)
        	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:149)
        	at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:172)
        	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
        	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
        	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
        	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
        	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
        	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
        	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
        	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        	at java.lang.Thread.run(Thread.java:748)
    
  • 以下回答来自chatgpt:

    根据问题描述,出现了java.lang.LinkageError: loader constraint violation这个错误,并且可能是由于应用程序同时使用了多个版本的jar包导致的HTTP Status 500的错误。因此,为了解决该问题,可以按照以下步骤进行操作:

    1. 确认问题的具体原因

    首先,需要进一步确认导致HTTP Status 500错误的具体原因,是否是由于 jar 包的冲突引起的。可以查看服务器的日志文件,查找以下关键字:

    java.lang.LinkageError loader constraint violation

    如果出现了这两个关键字,则可以基本确认该问题的原因是 jar 包的冲突。

    1. 找出 jar 包冲突的具体原因

    接下来,需要找出冲突的 jar 包的具体原因,可以通过以下步骤进行操作:

    1) 打开应用程序的 WEB-INF 目录,找到 lib 目录下的 jar 包,检查是否有重复的 jar 包。

    2) 如果出现重复的 jar 包,可使用以下命令,在命令行中查找所有的该 jar 包:

    Linux / Unix:
    find . -name "xxx.jar"
    
    Windows:
    dir /s /b xxx.jar
    

    3) 排除其他可能的原因,例如:应用程序代码、配置文件等问题。

    1. 解决 jar 包冲突的问题

    解决 jar 包冲突问题的方法有多种,具体选择哪种方法,需要根据实际情况进行选择。

    1) 调整 jar 包的顺序

    有些 jar 包本身并不冲突,只是因为加载的顺序不同,导致了冲突。通过调整 jar 包的加载顺序即可解决问题。

    2) 使用排除依赖的方式

    在 Maven 项目中,可以通过排除依赖的方式解决 jar 包冲突的问题。例如:

    group-id artifact-id

    3) 使用 ClassLoader 隔离

    可以使用 ClassLoader 隔离的方式,使得应用程序加载的 jar 包与服务器加载的 jar 包隔离开来。具体实现方式可以参考 Apache Tomcat 官方文档:https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html

    总结:

    以上是解决 HTTP Status 500 错误,并出现了 java.lang.LinkageError: loader constraint violation 这个错误的具体步骤。需要先确认问题的具体原因,找出 jar 包冲突的具体原因,最后再选择合适的解决方式进行处理。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^