톰캣을 웹서버로 사용시 jsp not found

2015년 8월 28일 추가

아래 내용은 우분투에서 디플로이 장소가 CATALINA_HOME 이 아닌 CATALINA_BASE 인 것을 몰라서 생긴 문제이다.
CATALINA_BASE 에 디플로이 했을 경우에는 문제가 생기지 않을 것이다.
CATALINA_HOME 과 CATALINA_BASE 에 대한 내용은 새로운 글 톰캣 CATALINA_HOME vs. CATALINA_BASE 에서 읽을 수 있다.

톰캣을 아파치 연동하지 않고 단독 웹서버로 사용하려다 생긴 삽질을 기록.

환경
Ubuntu Server 14.04 LTS
Tomcat 7.0
Spring MVC

아파치 + 톰캣 설정을 했을때는 별 문제가 없었던거 같은데 아파치 연동 설정이 귀찮아서 톰캣을 웹서버로 사용하려던 곳에서 모든 문제가 시작됐다.
우분투에 톰캣7을 설치하고 JSP 기동까지는 문제가 없었다.
이클립스로 Spring MVC의 샘플 프로젝트를 test.war로 익스포트 하고 톰캣 webapp 디렉토리에 올려서 디플로이.
브라우저로 localhost/test 접속해 보면 404 not found.

로그 내용

INFO : com.elmitash.test.HomeController - Welcome home! The client locale is ko.
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/test/WEB-INF/views/home.jsp] in DispatcherServlet with name 'appServlet'

컨트롤러까지는 접속이 되는데 결과가 표시되는 뷰인 home.jsp를 찾지 못하는 문제가 발생했다.

결론적으로 문제는 톰캣의 CATALINA_HOME/conf 디렉토리에 web.xml이 기본적으로는 들어있지 않아서, jsp 요청에 대한 처리를 못하는 것에 있었다.

web.xml은 /etc/tomcat7 아래에 있고, 디폴트 CATALINA_HOME인 /usr/share/tomcat7/conf 에 넣어주고 톰캣을 재기동 해 주면 문제 해결.
스프링 컨텍스트 xml에서 defaultServletName을 설정하라는 답이 많이 있었는데, 설정을 해도 web.xml이 없으면 톰캣의 default 서블릿 설정이 읽혀지지 않아서 소용 없다.
web.xml이 있으면 스프링에서 처리 못한건 자동으로 톰캣에게 넘어가기 때문에 defaultServletName 설정은 필요 없다.
저 결론에 이르기까지 여러가지 삽질을 많이 했다.

댓글 남기기