【问题标题】:Unable to start Spring MVC application in Spring Tool Suite无法在 Spring Tool Suite 中启动 Spring MVC 应用程序
【发布时间】:2015-03-21 17:58:39
【问题描述】:

我正在使用 Spring 框架和使用 Spring Tool Suite 的 maven 工具在 java 中开发 MVC Web 应用程序。

我在运行我的应用程序时收到以下错误。

SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.LinkageError: loader constraint violation: when resolving method   "org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(Ljavax/servlet/ServletConfig;)Lorg/apache/tomcat/InstanceManager;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/WEB_002dINF/view/NewFile_jsp, and the class loader (instance of java/net/URLClassLoader) for the method's defining class, org/apache/jasper/runtime/InstanceManagerFactory, have different Class objects for the type org/apache/tomcat/InstanceManager used in the signature
at org.apache.jsp.WEB_002dINF.view.NewFile_jsp._jspInit(NewFile_jsp.java:32)
at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:180)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:349)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

`Jan 23, 2015 12:55:53 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with     path [/MyMsit] threw exception [java.lang.LinkageError: loader constraint  violation: when resolving method    "org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(Ljavax/s ervlet/ServletConfig;)Lorg/apache/tomcat/InstanceManager;" the class loader  (instance of org/apache/jasper/servlet/JasperLoader) of the current class,  org/apache/jsp/WEB_002dINF/view/NewFile_jsp, and the class loader (instance  of java/net/URLClassLoader) for the method's defining class,  org/apache/jasper/runtime/InstanceManagerFactory, have different Class  objects for the type org/apache/tomcat/InstanceManager used in the signature]  with root cause
java.lang.LinkageError: loader constraint violation: when resolving method     "org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(Ljavax/servlet/ServletConfig;)Lorg/apache/tomcat/InstanceManager;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/WEB_002dINF/view/NewFile_jsp, and the class loader (instance of java/net/URLClassLoader) for the method's defining class, org/apache/jasper/runtime/InstanceManagerFactory, have different Class objects for the type org/apache/tomcat/InstanceManager used in the signature

pom.xml的内容是

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.mymsit</groupId>
<artifactId>MyMsit</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>MyMsit</name>
<description>Complete Course portal for MSIT Course</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.1.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

<properties>
    <!-- Generic properties -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <!-- Web -->
    <jsp.version>2.3.1</jsp.version>
    <servlet.version>2.5</servlet.version>


    <!-- Spring -->
    <spring-framework.version>4.1.1.RELEASE</spring-framework.version>

    <!-- Hibernate / JPA -->
    <hibernate.version>4.2.1.Final</hibernate.version>

    <!-- Logging -->

    <slf4j.version>1.7.10</slf4j.version>

    <!-- Test -->
    <junit.version>4.11</junit.version>

</properties>

<dependencies>

    <!-- Spring MVC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        </dependency>

    <!-- Other Web dependencies -->

    <!-- Hibernate -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        </dependency>


    <!-- Test Artifacts -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>


    <!-- Boot Artifacts -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

    <dependency>
        <groupId>org.hornetq</groupId>
        <artifactId>hornetq-core</artifactId>
        <version>2.2.21.Final</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        </dependency>

    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-facebook</artifactId>
        </dependency>

    <dependency>
        <groupId>org.linkedin</groupId>
        <artifactId>org.linkedin.zookeeper-impl</artifactId>
        <version>1.5.1</version>
    </dependency>


    <dependency>
        <groupId>org.linkedin</groupId>
        <artifactId>org.linkedin.util-groovy</artifactId>
        <version>1.9.0</version>
    </dependency>

</dependencies>

web.xml内容如下

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     id="WebApp_ID" version="2.5">

<welcome-file-list>

<welcome-file>NewFile.html</welcome-file>

</welcome-file-list>
<display-name>MyMsit</display-name>

<!--
    - Location of the XML file that defines the root application context.
    - Applied by ContextLoaderListener.
-->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/application-config.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


<!--
    - Servlet that dispatches request to registered handlers (Controller implementations).
-->
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

我无法理解错误。谁能帮我解决这个问题。

【问题讨论】:

  • 查看您的依赖项,我会说它们是一团糟。您是否尝试使用 Spring Boot?您的项目令人困惑...
  • 在 STC 中我需要在 pom.xml 中明确提及 spring 依赖项吗?
  • 这并不特定于 STS 或 IDE。如果您使用 Maven 管理项目中的依赖项,则必须在 pom.xml 文件中处理它们,独立于您用于实现项目的 IDE。 STS 将解析 pom.xml 文件并使用 Maven 来解决这些依赖关系。而且您的错误看起来很像某处存在依赖性问题。我建议从一个干净、新鲜的 Spring Boot 应用程序开始(例如,使用 spring.io/guides 的 Spring Guides)。如果您愿意,也可以直接在 STS 中使用它们。
  • 我相信这是您的环境的依赖问题。正如其他人所说,首先确保你没有拉重复的罐子。我在使用 Eclipse Luna 和 tomcat 的项目中得到了同样的结果。我确信我的礼貌是正确的。事实证明,对于我来说,是 Eclipse groovy 插件导致了这个问题。你可以尝试一件事;如果在窗户上;是下载 Process Monitor 并跟踪 javaw.exe 调用的内容。希望对某人有所帮助。

标签: spring spring-mvc spring-tool-suite


【解决方案1】:

参考 Shrikant 的帖子 - 有点。

在使用 Tomcat 时,您绝对不希望将 Tomcat 的 jar 文件包含在您的 WEB-INF/lib 文件夹中。

jar 来自 Spring Boot 上的 Maven 依赖项。 指定在你的 pom 中提供 spring-boot jar,就像这样

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <scope>provided</scope>
     </dependency>

这让我有点恼火,直到我查看了扩展的 pom 的 Dependency Hierarchy 并看到了 tomcat jar 的来源。一旦我将范围更改为提供而不是在 spring-boot 依赖项上编译,我的页面加载就好了。

Shrikant -> 真的没有什么反对你的答案,我只是不想从我的 lib 目录中删除 jars 然后建立一个战争,当我可以一次清理、打包、安装和部署所有内容时,单击一个按钮。

【讨论】:

    【解决方案2】:

    不要在 web.xml 中配置,而是使用实现 SpringBootServletInitializer 的类,

    【讨论】:

    • 你需要更详细地解释你的答案
    【解决方案3】:

    我也面临同样的问题,但我得到了解决方案。
    如果你使用的是Tomcat服务器,那么你一定不能把tomcat的jar文件放到WEB-INF/lib中。 Tomcat 已经有这些类,它们必须由根 tomcat 类加载器加载,而不是由 web-app 类加载器加载。
    所以检查你的WEB-INF/lib文件夹并删除所有tomcat的jar。(例如:tomcat-api-8.0.0-RC1.jar,tomcat-juli-8.0.0-RC1.jar,tomcat-util-8.0.0 -RC1.jar,tomcat-servlet-api-8.0.0-RC1.jar)。

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 2017-05-26
      • 2012-11-23
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      相关资源
      最近更新 更多