Spring Boot 프로젝트 war 배포 내장톰캣 이용문의입니다.
- 작성자 :
- 힘*어
- 작성일 :
- 2023-04-12 14:53:45
- 조회수 :
- 2,862
- 구분 :
- 개발환경 / 4.1
- 진행상태 :
- 완료
Q
이미 완성한 프로젝트를 외장톰캣 >> 내장톰캣으로 사용하기 위한 작업을 하고 있습니다.
그러나
이클립스 환경에서는 어플리케이션이 정상적으로 동작하지만
배포 환경에서는 servlet 오류 납니다.
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler processing failed; nested exception is java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/servlet/http/HttpServletMapping;] with root cause
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/servlet/http/HttpServletMapping;
.....
SEVERE: Exception Processing ErrorPage[errorCode=0, location=/error]
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/servlet/http/HttpServletMapping
......
오류를 확인하기 위해 제가 시도해본 방법입니다 ...
전자정부4.1 버전을 설치하고
1. eGovFrame Boot Web Project를 생성해서
tiles 적용후 war로 패키지 빌드해서
java -jar 명령어로 실행 >> 실패
2. Spring Starter Project를 생성해서 동일하게
tiles 적용후 war로 패키지 빌드해서
java -jar 명령어로 실행 >> 성공
3. 성공한 Spring Starter Project 프로젝트의 pom.xml에
eGovFrame Boot Web Project 프로젝트의 pom.xml에 자동 생성된
groupid가 org.egovfame.rte인 디펜던시 추가
<groupId>org.egovframe.rte</groupId>
<artifactId>org.egovframe.rte.ptl.mvc</artifactId>
<artifactId>org.egovframe.rte.psl.dataaccess</artifactId>
<artifactId>org.egovframe.rte.fdl.idgnr</artifactId>
<artifactId>org.egovframe.rte.fdl.property</artifactId>
(버전은 4.1.0 이고 게시물이 2000바이트까지만 가능해서 축약)
java -jar 명령어로 실행 >> 실패
위 디펜던시를 추가하면 오류가 발생하고 지우면 정상 실행됩니다.
네 개 중 하나라도 있으면 오류가 발생합니다.
기존 프로젝트에서 위 디펜던시를 사용하고 있으니 지울 수는 없고
서블릿 버전을 조정하던가 위 디펜던시에서 안받던가 해야 할거 같은데
추측으로는 eGovFrame Boot Web Project에 포함되는 디펜던시에
서블릿 버전이 맞지 않아서 생기는 문제 같은데 어떻게 해야하나요?
그러나
이클립스 환경에서는 어플리케이션이 정상적으로 동작하지만
배포 환경에서는 servlet 오류 납니다.
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler processing failed; nested exception is java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/servlet/http/HttpServletMapping;] with root cause
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/servlet/http/HttpServletMapping;
.....
SEVERE: Exception Processing ErrorPage[errorCode=0, location=/error]
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/servlet/http/HttpServletMapping
......
오류를 확인하기 위해 제가 시도해본 방법입니다 ...
전자정부4.1 버전을 설치하고
1. eGovFrame Boot Web Project를 생성해서
tiles 적용후 war로 패키지 빌드해서
java -jar 명령어로 실행 >> 실패
2. Spring Starter Project를 생성해서 동일하게
tiles 적용후 war로 패키지 빌드해서
java -jar 명령어로 실행 >> 성공
3. 성공한 Spring Starter Project 프로젝트의 pom.xml에
eGovFrame Boot Web Project 프로젝트의 pom.xml에 자동 생성된
groupid가 org.egovfame.rte인 디펜던시 추가
<groupId>org.egovframe.rte</groupId>
<artifactId>org.egovframe.rte.ptl.mvc</artifactId>
<artifactId>org.egovframe.rte.psl.dataaccess</artifactId>
<artifactId>org.egovframe.rte.fdl.idgnr</artifactId>
<artifactId>org.egovframe.rte.fdl.property</artifactId>
(버전은 4.1.0 이고 게시물이 2000바이트까지만 가능해서 축약)
java -jar 명령어로 실행 >> 실패
위 디펜던시를 추가하면 오류가 발생하고 지우면 정상 실행됩니다.
네 개 중 하나라도 있으면 오류가 발생합니다.
기존 프로젝트에서 위 디펜던시를 사용하고 있으니 지울 수는 없고
서블릿 버전을 조정하던가 위 디펜던시에서 안받던가 해야 할거 같은데
추측으로는 eGovFrame Boot Web Project에 포함되는 디펜던시에
서블릿 버전이 맞지 않아서 생기는 문제 같은데 어떻게 해야하나요?
환경정보
-
- OS 정보 :
- 표준프레임워크 버전 :
- JDK(JRE) 정보 :
- WAS 정보 :
- DB 정보 :
- 기타 환경 정보 :
A
안녕하세요.
표준프레임워크 센터입니다.
eGovFrame Boot Web Project를
war로 패키징하여 구동 시에 발생한
NoSuchMethodError 경우
구성 환경의 JDK에
Servlet에서 필요로하는 라이브러리 중
el-api.jar와
servlet-api.jar 라이브러리가 누락되어
에러가 발생한 것일 가능성이 있습니다.
이 경우,
pom.xml에 누락된 라이브러리를 다운로드 받기 위해
다음의 의존성을 추가해 주시거나
Tomcat 설치 디렉터리에서
다음의 라이브러리 2개
el-api.jar
servlet-api.jar
를 JDK 쪽으로 복사하신 다음
구동시켜 보시기 바랍니다.
[Tomcat Root] /lib => [JDK Root] /jre/lib/ext
감사합니다.
표준프레임워크 센터입니다.
eGovFrame Boot Web Project를
war로 패키징하여 구동 시에 발생한
NoSuchMethodError 경우
구성 환경의 JDK에
Servlet에서 필요로하는 라이브러리 중
el-api.jar와
servlet-api.jar 라이브러리가 누락되어
에러가 발생한 것일 가능성이 있습니다.
이 경우,
pom.xml에 누락된 라이브러리를 다운로드 받기 위해
다음의 의존성을 추가해 주시거나
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-servlet-api</artifactId> <version>9.0.63</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-el-api</artifactId> <version>9.0.63</version> </dependency> |
Tomcat 설치 디렉터리에서
다음의 라이브러리 2개
el-api.jar
servlet-api.jar
를 JDK 쪽으로 복사하신 다음
구동시켜 보시기 바랍니다.
[Tomcat Root] /lib => [JDK Root] /jre/lib/ext
감사합니다.