java.lang.ClassNotFoundException : org.springframework.web.servlet.DispatcherServlet


87

나는 spring 3.1.0.RELEASE 를 사용하고 있으며 내 서블릿 컨테이너는 tomcat 7 이고 IDE는 eclipse indigo 이고 DispatcherServlet 을 포함하는 jar spring-webmvc-3.1.0.RELEASE.jar 는 lib 폴더에 존재하지만 아직 때 응용 프로그램을 실행하면 예외가 발생합니다.

java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:525)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:507)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:126)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1043)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4957)
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5284)
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5279)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

이 예외가 발생하는 이유와 해결 방법을 알려주십시오.

편집 : 다음은 내 구성 파일입니다.

1- .springBeans :

<?xml version="1.0" encoding="UTF-8"?>
<beansProjectDescription>
    <version>1</version>
    <pluginVersion><![CDATA[2.9.0.201203011806-RELEASE]]></pluginVersion>
    <configSuffixes>
        <configSuffix><![CDATA[xml]]></configSuffix>
    </configSuffixes>
    <enableImports><![CDATA[false]]></enableImports>
    <configs>
        <config>src/main/webapp/WEB-INF/checkout-servlet.xml</config>
    </configs>
    <configSets>
    </configSets>
</beansProjectDescription>

2- web.xml :

<web-app>
  <display-name>Checkout</display-name>

  <servlet>
    <servlet-name>checkout</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>checkout</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>

</web-app>

3- checkout-servlet.xml :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <context:component-scan base-package="com.myapp"/>

    <bean id="myService" class="com.myapp.MyService"/>

</beans>

또한 응용 프로그램의 페이지에 액세스하려고 할 때 예외가 발생합니다.

HTTP Status 404 - Servlet checkout is not available

type Status report

message Servlet checkout is not available

description The requested resource (Servlet checkout is not available) is not available.
Apache Tomcat/7.0.22

스프링 구성 파일을 게시하고 어떤 앱 서버에서 실행되어야하는지 알려 주실 수 있습니까?
Gergely Szilagyi

@Gergely Szilagyi, 질문을 업데이트했습니다.
Mahmoud Saleh

유용하지 않았기 때문에 내 대답을 삭제했습니다. 죄송합니다 :(
Gergely Szilagyi

@iNan, 나는 이클립스 인디고를 사용하고 있습니다
Mahmoud Saleh

1
DispatcherServlet에서 직접 CNF가 아니라 종속 클래스에서 오류가 발생했다고 생각합니다. 다른 중첩 된 예외가 있는지 확인하십시오.
adarshr

답변:


248

배포 어셈블리에 "Maven 종속성"을 추가해야합니다.

  • 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오.
  • 배포 어셈블리를 클릭합니다.
  • 추가를 클릭
  • "Java 빌드 경로 항목"을 클릭하십시오.
  • Maven 종속성 선택 "
  • 마침을 클릭합니다.

다시 빌드하고 배포

참고 : 이것은 비 Maven 프로젝트 에도 적용됩니다 .


니스-내 pom.xml에 적절한 종속성을 추가 한 후에도 위와 같이 따를 때까지 오류가 해결되지 않았음에도 혼란 스러웠습니다.
srinivas

니스 .. 완벽한 솔루션
프라 사드 VS

1
왜 이것이 작동합니까? 내 말은, 모든 Maven 종속성을 사용할 수 있어야하지 않습니까? tomcat7 : run과 함께 Tomcat7 플러그를 사용하는 경우 어떻게 수행 할 수 있습니까?
Johnny Bigoode

매력처럼 작동합니다!
yrazlik jul.

이것은 비 메이븐 프로젝트에도 적용됩니다. !! 나는 maven 프로젝트를 만들었고 같은 문제가 발생했습니다. 이 솔루션은 저에게 효과적이었습니다.
Bandham Manikanta

33

두 가지 가능한 답변 :

1- lib에 spring-beans 및 spring-context jar를 포함하지 않았습니다. maven을 사용한다면 (많은 도움이 될 것입니다) 그 두 줄이면 충분할 것입니다.

<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
   <version>3.1.0.RELEASE</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
   <version>3.1.0.RELEASE</version>
</dependency>

2- 필요한 jar가 클래스 경로에 있지만 tomcat에 배포되지 않았습니다.


문제를 해결 해주셔서 감사 합니다만, 당신이 maven을 사용하고 있다는 것을 당신의 문제에서 이해할 수 있다고 생각하지 않습니다.
Serkan Arıkuşu

1
maven이 질문에 태그되어 있습니다!
Mahmoud Saleh

3
spring-webmvcpom.xml의지에 추가 하면 문제가 해결됩니다. 감사.
OO7

19

안녕하세요, Idea Intellij와 Spring 4에서 동일한 문제가 발생했습니다. 문제를 해결하고 답변을 공유하고 싶었습니다.

나는 tomcat 7 / idea intellij 13 / spring 4를 사용합니다.

pom.xml 종속성

  <properties>
    <spring.version>4.0.5.RELEASE</spring.version>
  </properties>

  <dependencies>     
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
enter code here
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.2</version>
    </dependency>
        <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
  </dependencies>

Idea Intellij에서는 파일-> 프로젝트 설정-> 아티팩트로 이동해야합니다. 그때 여기에 이미지 설명 입력

정리-> 프로젝트 다시 빌드-> 아티팩트를 빌드하면 모든 것이 정상입니다 ...


당신은 천재입니다. 어떤 차이가 있는지 설명해 주시겠습니까? Maven이 모든 것을 가져 오는 이유는 무엇입니까? 그래도 그렇게해야 작동합니까?
DMurta 2015

@DMurta 누가 maven이 모든 것을 수출한다고 말했습니까?
Adelin

12

이것은 나를 위해 문제를 해결합니다. 쉽고 간단하게 설명 할 수 있습니다.

1 단계

  • 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오.
  • 속성을 클릭하십시오.

2 단계

  • 배포 어셈블리 탭을 클릭하십시오.
  • 추가 ...를 클릭하십시오.

3 단계

  • Java 빌드 경로 항목을 클릭하십시오.

4 단계

  • Maven 종속성을 클릭하십시오.
  • 마침 버튼 클릭

5 단계

  • Spring MVC 애플리케이션을 Tomcat에 다시 배포
  • Tomcat 다시 시작
  • 목록 항목

classnotfoundexception


내 제안에 부여한 점수를 재고 해 주시겠습니까?
Lycone

10

배포 어셈블리 에 항목이 있음을 발견했습니다 .

[persisted container] org.maven.ide.eclipse.maven2_classpath_container

나는 그것을 제거하고 maven dependencies항목을 추가했으며 이제 정상적으로 작동합니다.


5

이 모든 조언이 작동하지 않으면 서버 (Tomcat 등)를 다시 만들어야합니다. 그것은 내 문제를 해결했습니다.


5

pom.xml에 아래 종속성을 포함하십시오.

<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
   <version>{spring-version}</version>
</dependency>

4

나는 같은 문제에 직면했다. 내 로컬에서 maven 저장소 .m2 폴더 (.... m2 \ repository \ org \ springframework \ spring-webmvc)를 보았을 때 두 개의 3.2.0.RELEASE 폴더를 발견했습니다. 그래서 하나를 제거했습니다. 그런 다음 프로젝트로 이동하여 마우스 오른쪽 버튼을 클릭-> 속성-> 배포 essembly-> maven 종속성을 추가하십시오. 빌드를 정리 한 다음 서버를 다시 시작하십시오. 그런 다음 DispatcherServlet이로드되었습니다.


예, 이것은 내 문제도 해결했습니다. Eclipse에서 배포 어셈블리에 종속성을 추가해야하는 이유는 무엇입니까?
Freelancer

2

제 경우에는 maven의 업데이트 프로젝트 유틸리티를 사용한 후이 문제가 발생합니다. 나는 당신이 제안한 모든 해결 방법을 시도했지만 아무것도 작동하지 않는 것 같습니다. 결국 솔루션은 서버에서 프로젝트를 제거하여 깨끗한 지 확인하고 다시 추가하는 것이 었습니다. 그러면 작동합니다.이 솔루션이 여러분에게 도움이되기를 바랍니다.


2

GlassFish 서버를 사용할 수 있으며 오류가 해결됩니다. tomcat7 및 tomcat8로 시도했지만이 오류는 계속 발생했지만 GlassFish로 해결되었습니다. 서버 문제라고 생각합니다.

다음은 tomcat7의 결과입니다. tomcat7의 결과

GlassFish의 결과는 다음과 같습니다. GlassFish를 사용한 결과


1

프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오. 배치 어셈블리를 클릭하십시오. 추가를 클릭하고 "Java 빌드 경로 항목"을 클릭하고 Maven 종속성을 선택하고 완료를 클릭하십시오.


1

누군가에게 유용 할 수 있으므로 여기에 게시하겠습니다. 나는 내pom.xml

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

1
  1. 작업중 인 프로젝트의 속성 으로 이동
  2. 배포 어셈블리 메뉴를 선택하고 추가 버튼을 클릭 합니다.
  3. 옵트 자바 빌드 경로 항목 과 클릭합니다 메이븐 종속성
  4. 프로젝트 빌드 및 실행

여기에 이미지 설명 입력


1
Java 빌드 경로 항목을 클릭 할 때 Maven 종속성 옵션이 없습니다.
Muktadir Khan

나는 당신 이이 질문을 어떤 측면에서 알지 못했습니다. 새 질문을 게시하십시오.
Lova Chittumuri

0

다음 단계에 따라 해결했습니다.

  • 프로젝트> 구성> Maven 프로젝트로 변환을 마우스 오른쪽 단추로 클릭하십시오.
  • 변환 후 프로젝트> Maven> 프로젝트 업데이트를 마우스 오른쪽 버튼으로 클릭합니다.

이것은 프로젝트의 "배포 어셈블리"설정을 수정합니다.


0

jar 파일을 클래스 경로에서 web-inf / lib 로 이동하고 새 tomcat 서버를 실행합니다.


0

간단한 해결책을 찾았습니다. WEB-INF-> lib 폴더 안에 항아리를 추가하기 만하면됩니다.


0

나는 WebSphere에서 이와 동일한 문제가 있었지만 Spring 종속성이 있는지 확인했지만 Tomcat에서 잘 실행되었지만 솔루션을 찾을 수 없었습니다. 결국 응용 프로그램을 제거하고 여전히 오류가 발생하여 WebSphere가 손상된 인스턴스에 매달려 있다고 생각합니다.

문제를 해결하려면 응용 프로그램을 다시 설치하고 중지하고 제거한 다음 다시 설치해야했습니다.


0

나에게 그것은 실수였다 pom.xml.-나는 <scope>provided<scope>내 의존성을 설정 했고, 이것은 mvn package무대 에서 그것들이 복사되지 않게 만들었다 .

내 증상은 OP가 게시 한 오류 메시지와 패키지 실행 후 .war 내부의 WEB-INF / lib 경로에 jar가 포함되지 않았다는 것입니다. 스코프를 제거했을 때 항아리가 출력에 나타나고 모든 것이 정상적으로로드됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.