이클립스에서 톰캣 사용하는 방법 / 톰캣 에러 해결

이클립스에서 톰캣 사용 방법

윈도우 톰캣 설치

https://tomcat.apache.org
프로젝트에 맞는 버전의 톰캣 선택 > 64-bit Windows zip으로 다운로드 > 압축 해제하면 설치 완료입니다.

이클립스에 톰캣 연동 방법

이클립스 하단 Servers 탭 내부 우클릭 > New > Server > Apache > Tomcat v(설치한 버전) Server 선택 > Next > Tomcat installation directory: Browse…를 통해 설치한 톰캣 폴더 선택 > JRE: 프로젝트에 맞는 버전의 JRE 선택 > Finish

톰캣에 프로젝트 추가 방법

이클립스 하단 Servers 탭에서 톰캣 우클릭 > Add and Remove… > Available: 목록의 프로젝트 더블클릭 > 프로젝트가 Configured: 목록으로 이동한 것 확인 > Finish

톰캣 프로젝트 Path 변경 방법
이클립스 하단 Servers 탭에서 톰캣 더블클릭 > 하단 Modules 탭 > Web Modules 선택 > Edit… > Path : /로 수정 > OK : Ctrl + S로 저장

톰캣 경로 수정 방법

Windows > Preferences > Server > Runtime Environments > 톰캣 선택 > Edit > Browse > 톰캣 폴더 선택 > Finish > Apply and Close

프로젝트에 톰캣 라이브러리 추가 방법

프로젝트 우클릭 > Java Build Path > Libraries > Add Library > Server Runtime > Next > 이클립스에 연동한 Apache Tomcat v(버전) 선택 > Finish 합니다.

톰캣 설정 방법

server.xml 설정 방법

<Resource auth="Container" factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" driverClassName="com.mysql.jdbc.Driver" global="jdbc/DB명" maxTotal="20" maxIdle="10" maxWait="-1" name="jdbc/DB명" type="javax.sql.DataSource" url="jdbc:mysql://DB서버IP또는도메인:3306/DB명?characterEncoding=UTF-8" username="DB계정명" password="DB계정비밀번호" validationQuery="select 1"/>

위와 같이, <GlobalNamingResources> 태그 내부에 DB 리소스를 입력합니다.
개발 DB 정보를 쓰면 개발 DB에 연결되고, 운영 DB 정보를 쓰면 운영 DB에 연결됩니다.

<Context docBase="프로젝트폴더명" path="URL시작경로" reloadable="true" source="org.eclipse.jst.jee.server:프로젝트명"/>

server.xml 최하단 Engine 태그 안에서는 Add 한 프로젝트 Context 정보가 맞는지 확인합니다.
프로젝트 Context는 Add 시 최하단 </Host> 위에 자동 생성되며, path를 /로 변경해주면 localhost:HTTP포트만으로 접근 가능합니다.

context.xml 설정 방법

<ResourceLink global="jdbc/DB명" name="jdbc/DB명" type="javax.sql.DataSource"></ResourceLink>

최하단 </context> 위에 DB 리소스 링크를 입력합니다.


이클립스 톰캣 에러 해결 방법

Add and Remove 시 에러

There are no resources that can be added or removed from the server.

위 팝업이 나오면, 추가하거나 삭제할 프로젝트 리소스가 없다는 뜻입니다.

<Context docBase="프로젝트폴더명" path="URL시작경로" reloadable="true" source="org.eclipse.jst.jee.server:프로젝트명"/>

톰캣 server.xml 최하단 </Host> 위에 위와 같이 프로젝트 Context를 직접 추가하고 이클립스 workspace 폴더의 .metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps 폴더 안에 프로젝트명\src\main\webapp 폴더와 유사한 폴더를 넣으면 실행은 되는데, jsp 수정 반영이 안됩니다.
이클립스와 톰캣을 아예 새로 설치하고 다시 Add 해주니까 잘 됩니다.

톰캣 실행 시 에러

Context 정보가 프로젝트 폴더와 매핑이 안되는 에러
server.xml에서 Context 태그의 docBase, source 정보가 맞는지 확인합니다.

DB 연결이 안되는 에러

SEVERE: 자식 컨테이너를 시작 중 실패했습니다.
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 구성요소 [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]을(를) 시작하지 못했습니다.
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:873)
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:794)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:921)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478)

server.xml에서 Resource 태그의 DB 정보와 context.xml의 ResourceLink 정보가 맞는지 확인합니다.
DB 정보가 맞는데도 에러가 나서 Maven update 후 다시 시도했더니 톰캣 실행이 잘 되었습니다.

톰캣 시작 시간 초과 에러

Server Tomcat v9.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.

프로젝트 톰캣 실행 시 DB에서 많은 정보를 불러오거나 읽을 라이브러리가 많은 경우 시간 초과가 날 수 있습니다.
Servers 탭 > 톰캣 더블 클릭 > Overview > Timeouts > Start 시간을 180초로 변경하면 됩니다.

Leave a comment