Tomcat ERROR : The currently selected server type does not support remote hosts
업데이트:
:( Trouble
저번 포스팅 <이클립스 서버 런타임 환경 설정하기: 아파치 톰캣>에서 마지막에 예고했던 대로 다음의 에러를 해결해 보자.
Run on Server 로 JSP 프로젝트를 실행하면 톰캣 서버 버전을 선택하라는 대화상자가 나온다. 여기서 자신이 원하는 버전을 선택하면 된다. 나는 8.5 버전을 선택했는데 다음과 같은 에러가 뜨면서 버튼들도 비활성화되었다.
ERROR : The server does not support version 4.0 of the J2EE Web module specification.
:0 Think
에러 메시지를 해석해보면 톰캣 서버가 웹 모듈 4.0 버전의 스펙을 지원하지 않는다고 한다. 이게 무슨 말일까? 구글링을 통해서 나름대로 정리를 해봤다.
Dynamic Web Module
은 동적 페이지를 만들어서 보여주기 위한Servlet API Version
을 의미한다.- 이러한 사양을
Servlet Spec(Specification)
이라고 한다. - 서블릿 스펙에 맞는 톰캣 버전은 정해져 있다.
- 버전별 스펙들은 아파치 공식 홈페이지에서 확인할 수 있다.
- http://tomcat.apache.org/whichversion.html
- 버전별 스펙들은 아파치 공식 홈페이지에서 확인할 수 있다.
- 따라서 각 버전들을 정확하게 매핑해줘야 한다.
:) Solution
-
Dynamic Web Module Version 확인하기
-
Servlet Spec에 맞는 Tomcat Version 확인하기
-
Dynamic Web Module Version 변경하기
Step 1. Dynamic Web Module Version 확인하기
[Project Properties] - [Project Facets]에서 Dynamic Web Module 버전을 살펴보니 4.0이다.
Project Facets
- 프로젝트의 기본 형태를 지정해 준다.
- 기본 형태(웹인지? maven 인지? Spring 인지? 등등)에 따라 jdk를 맞춰줘야 하는데, 웹의 경우에는 서버 버전까지 맞춰줘야 한다.
Step 2. Servlet Spec에 맞는 Tomcat Version 확인하기
아파치 공식 홈페이지에서 버전별 스펙 표를 보면 Servlet Spec 4.0
은 Tomcat Version 9.0.x
와 매핑된다. 따라서 Tomcat Version 8.5.x
와 매핑 시키기 위해서는 Servlet Spec 3.1
로 버전을 낮춰야 한다.
Step 3. Dynamic Web Module Version 변경하기
알맞은 Servlet Spec 버전을 알았으니 Project Facets 설정으로 돌아와서 4.0 -> 3.1 버전으로 낮춰보자. 그런데, 여기서 문제가 생긴다. (문제가 안 생긴다면 적용하고 즐기면 된다.)
Cannot change version of project facet Dynamic Web Module to 3.1
이처럼 3.1 버전으로 내리지도 못하는 상황이라면, 아래와 같이 해결하면 된다.
- {해당 프로젝트 폴더}/.settings/org.eclipse.wst.common.project.facet.core.xml 파일을 편집한다.
.settings
폴더가 안보여요 ㅠㅠ- 윈도우즈의 경우 보기 옵션에서
숨김 파일 표시
에 체크해 준다. - 맥의 경우
command + shift + .
- 윈도우즈의 경우 보기 옵션에서
-
<installed facet=”jst.web” version=”3.1”/ > 4.0 -> 3.1 로 변경
1 2 3 4 5 6 7 8 9
<?xml version="1.0" encoding="UTF-8"?> <faceted-project> <fixed facet="java"/> <fixed facet="wst.jsdt.web"/> <fixed facet="jst.web"/> <installed facet="java" version="1.8"/> <installed facet="jst.web" version="3.1"/> <installed facet="wst.jsdt.web" version="1.0"/> </faceted-project>
- 프로젝트를 새로 고침 해주면 자동으로 버전이 3.1로 바뀌어 있을 것이다.
마치며
다이나믹 웹 프로젝트 생성 시에 dynamic web module version이라는 섹션에서 모듈 버전을 선택할 수 있었다. 항상 개발 환경에 맞게 자동으로 잡아줘서 그냥 냅뒀었는데 중요한 부분이었구나!
그리고 Project Facets에서 Dynamic web module에 체크를 해주고 알맞은 스펙의 버전을 선택해 주면 기본 java 프로젝트도 동적 웹 프로젝트로 변환해서 실행할 수 있다는 것을 알게 되었다.