아메리카노가 그렇게 맛있답니다 여러분


자바로 웹페이지를 만들기 위해 톰캣을 사용하게 되는데 가끔씩 톰캣이 정상 실행되지 않을 때가 있다.


톰캣이 실행되지 않을 때는 사실 여러 이유가 있는데 자주 발생하는 오류들에 대해서 정리해보았다.



1. 포트 문제


이미 톰캣을 터미널이나 cmd에서 실행시킨 상태에서 이클립스로 톰캣을 실행시키는 경우, 또는 톰캣과 동일한 포트를 쓰는 프로그램이 동시에 작동되는 경우이다. 이 경우는 비교적 간단하게 서로 포트가 겹치지 않게 변경하거나 다른 톰캣을 끄면 해결할 수 있다.



2. web.xml 문제


Servlet을 쓰게 되는 경우라면 @WebServlet을 사용하거나 web.xml에 추가하는 방법을 쓰게 된다. 여기서 web.xml 안에 입력할 때 잘못 기입할 경우 톰캣이 작동하지 않는 경우가 있다. 이 경우라면 매우 귀찮지만 일일이 찾아야 해결할 수 있을 것이다. (이 문제인지 확인하고 싶다면 web.xml을 기본 파일 지정하는 태그 제외하고 모두 지워보면 된다.)


web.xml에서 잘못된 기입이 발생할 수 있는 경우는 크게 3가지가 있다.


1) 태그가 닫히지 않았다. <Servlet>으로 열고 </Servlet>을 닫지 않은 경우가 이에 해당한다.


2) 태그를 잘못 썼다. <SErvlet>이라던가, 태그를 닫을 때 </Servlet>이 아닌 <Servlet>으로 쓰는 경우가 이에 해당한다.


3) 맵핑(mapping)이 올바르게 되지 않은 경우다.

<Servlet-Name>Hello</Servlet-Name>으로 해놓고 <Servlet-mapping>에서 존재하지도 않는 <Servlet-Name>Bye</Servlet-Name>을 지정하는 경우가 이에 해당한다.




3. Servlet에서 form이 틀렸을 경우


.java로 된 서블릿에서 어떻게 이클립스도 피해가는, 톰캣을 멈추는 오류가 발생할 수 있는지 의아하게 여길 수 있으나 충분히 가능하다.

대표적인 예로 @WebServlet()과 같은 어노테이션을 이용할 경우인데, 이 어노테이션은 위치 지정을 ("./Location")같은 ./ 경로를 인정하지 않는다. 


Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> [./index] in servlet mapping


이런 식으로 정확한 오류를 진단해주기 때문에 해결하기 쉬운 오류지만 워낙 한번에 출력되는 Exception이 많기 때문에 쉽게 놓치는 경향이 크다.




4. 라이브러리가 포함되어 있지 않은 경우


라이브러리가 포함되어 있지 않은 경우는 드물지만 존재할 수 있다. 대부분 Maven처럼 관리해주는 툴이 있지 않을 경우 발생하는 문제인데 라이브러리를 사용해서 의심이 간다면 web.xml에서, 또는 src에서 라이브러리를 쓰는 것들을 제거해보시는 것이 좋은 방법이 될 것이다.

해당 문제는 아래의 에러 메세지의 경우이다.

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component



이외의 경우에는 사실 문제가 일어날 일이 별로 없기 때문에 위 두 가지만 살펴도 충분히 문제를 해결할 수 있을 것이라 생각된다.