tomcat 기동 완료 후 ROOT(/)로 자동 호출되는 현상이 있어 정리한다.
ROOT(/)로 호출한다는 의미는 localhost:8080/ 와 같이 호출한다는 의미이다.
web.xml 파일에 다음과 같이 error-page 설정을 추가해 줬다.
<servlet>
<servlet-name>errorDocument</servlet-name>
<servlet-class>servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>errorDocument</servlet-name>
<url-pattern>/errorHandle</url-pattern>
</servlet-mapping>
<error-page>
<error-code>404</error-code>
<location>/errorHandle</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/errorHandle</location>
</error-page>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
TestServlet 코드는 다음과 같다.
@Override
public void init() throws ServletException {
System.out.println("called init!!");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String uri = req.getRequestURI();
System.out.println("called service!! uri=" + uri);
}
위와 같은 환경에서 Tomcat을 기동하게 되면 console 로그에 다음과 같은 메세지가 출력된다.
INFO: Starting Servlet Engine: Apache Tomcat/6.0.37
called init!!
6월 16, 2014 3:23:39 오후 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
6월 16, 2014 3:23:39 오후 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
6월 16, 2014 3:23:39 오후 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/15 config=null
6월 16, 2014 3:23:39 오후 org.apache.catalina.startup.Catalina start
INFO: Server startup in 320 ms
called service!! uri=/errorHandle
아무런 호출을 하지 않았는데도 "called service!! uri=/errorHandle" 메세지가 출력된 것을 확인할 수 있다. 브라우저로 localhost:8080 URL을 호출하지도 않았거니와 혹시나 하는 생각에 모든 브라우저를 종료해 보았지만 동일한 증상이 발생했다.
왜 이런 현상이 발생되는지에 대해서 차근차근 분석해 보았다.
1.
먼저 web.xml 파일에 정의되어 있는 404 error-code 선언부를 주석 처리했다.
주석 처리를 하니 / 로의 호출이 더이상 이뤄지지 않았다.
2.
이번엔 404를 풀고 505 error-code 선언부를 주석 처리했다.
/ 를 자동으로 호출하는 현상이 재발했다.
범인은 404 error-code 선언부로 인하여 발생하는 것으로 좁혀졌다.
3.
혹시 welcome-file-list에 정의되어 있는 index.jsp 로 인하여 발생하는 문제일까하는 의문에 해당 영역도 주석 처리해 봤다.
하지만 동일한 증상이 발생했다.
4.
$CATALINA_HOME/conf/web.xml 파일에 정의되어 있는 welcome-file-list도 주석 처리해봤다.
이 또한 동일한 증상이 발생한다.
5.
현재 사용중인 Tomcat 버전이 7인데 혹시 6으로 하면 이런 현상이 발생하지 않을까라는 생각에 6으로 시도를 해봤지만 동일한 증상이 발생한다.
6.
멘붕에 빠져있는 상황에서 혹시나 하는 마음에 웹 애플리케이션 ROOT 디렉토리에 index.jsp 파일을 생성한 후 Tomcat을 재기동하였다.
/ 로의 호출 증상이 더이상 발생되지 않는다.
정리하면 web.xml에 404 에러 코드를 선언하게 될 경우 웹 ROOT에 존재하는 index.jsp를 호출하게 되고, 만약 해당 디렉토리에 index.jsp 파일이 없다면 web.xml에 정의되어 있는 404로 요청이 forward된다.
어떤 원인으로 인하여 이런 예외 케이스가 발생했는지에 대해서는 파악했지만 정작 왜? index.jsp 파일을 호출하는지는 알아내지 못하였다.
웹 애플리케이션에 큰 영향을 주는 요소는 아니지만 왜 error-code 404를 정의하면 이와 같은 현상이 발생되는지 궁금하다.
Please answer to me~~
'서버' 카테고리의 다른 글
Apache worker 파일에 template 적용하기 (0) | 2016.01.22 |
---|---|
tomcat7 소스 빌드 (0) | 2015.09.07 |
Tomcat Parallel deployment (0) | 2015.09.02 |
CentOS 5 버전에 Redis 설치 (0) | 2014.10.10 |
리눅스 PATH또는 export 설정 (0) | 2014.06.13 |
centOS에 Git 설치 (0) | 2014.01.13 |
tomcat comet 정리 (2) | 2013.07.04 |
클러스터드 인덱스와 넌 클러스터드 인덱스 (12) | 2013.06.24 |