m0_63630873 2023-05-14 18:52 采纳率: 0%
浏览 19

关于#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

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-15 05:20
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这有个类似的问题, 你可以参考下: 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 包冲突的具体原因,最后再选择合适的解决方式进行处理。


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

报告相同问题?

问题事件

  • 创建了问题 5月14日