1. 개요

이클립스에서 JSP 개발을 완료 한 후 실제 톰캣 서비스에 배포하는 경우, class로 작성한 java 파일의 경로를 찾지 못하는 문제가 간혼 발생한다.

 

보통 웹 파일의 경우 [Tomcat 설치 경로]\webapps\ROOT\ 폴더가 웹 서비스의 최상위 루트 폴더가 되기 때문에 해당 경로 안에 웹 파일들을 집어 넣으면(ROOT\test.jsp -> http://localhost:8080/test.jsp) 익스플로러를 통해 접근이 가능하다.

 

하지만 대부분은 ROOT 폴더 하위에 서비스하고자 하는 폴더 명(ex: ROOT\project\ -> http://localhost:8080/project/home.jsp) 을 지정하여 해당 폴더 안에 웹 파일들을 배치하는 경우가 대부분 일 것이다.

 

이렇게 서비스 할 시, 흔히 Database 연동을 위해 따로 Class로 선언하여 JSP에서 호출하여 사용하는 경우가 많은데 실제 톰캣에 올려서 서비스 해 보면 DB 연동을 위한 Class 파일을 찾지 못하는 경우가 발생한다.

 

 

이를 해결 해 보도록 하자.

 

2. 원인

 

sun.boot.class.path :
<%=System.getProperty("sun.boot.class.path")%>

sun.boot.library.path :
<%=System.getProperty("sun.boot.library.path")%>

java.library.path :
<%=System.getProperty("java.library.path")%>

java.class.path :
<%=System.getProperty("java.class.path")%>

getClassLoader() :
<%=this.getClass().getClassLoader()%>

DocumentBuilderFactory :
<%=javax.xml.parsers.DocumentBuilderFactory.newInstance()%>

/javax/xml.parsers/DocumentBuilderFactory.class :
<%=this.getClass().getResource("/javax/xml.parsers/DocumentBuilderFactory.class")%>

SAXParserFactory :
<%=javax.xml.parsers.SAXParserFactory.newInstance()%>

/javax/xml/parsers/SAXParserFactory.class :
<%=this.getClass().getResource("/javax/xml/parsers/SAXParserFactory.class")%>

TransformerFactory :
<%=javax.xml.transform.TransformerFactory.newInstance()%>

/javax/xml/transform/TransformerFactory.class :
<%=this.getClass().getResource(	"/javax/xml/transform/TransformerFactory.class")%>

Servlet :
<%=application.getMajorVersion()%>.<%=application.getMinorVersion()%>

JSP :
<%=javax.servlet.jsp.JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion()%>

ServerInfo :
<%=application.getServerInfo()%>

RealPath :
<%=application.getRealPath("/")%>

ContextPath :
<%=request.getContextPath()%>

totalMemory :
<%=Runtime.getRuntime().totalMemory()%>

maxMemory :
<%=Runtime.getRuntime().maxMemory()%>

freeMemory :
<%=Runtime.getRuntime().freeMemory()%>

 

 

 

위 소스코드를 복사하여 info.jsp 에 저장하고 서비스 하고자 하는 폴더 안(ROOT\project\info.jsp)에 넣은 뒤 익스플로러에서 호출(http://localhost:8080/project/info.jsp) 해 보도록 하자.

 

페이지가 열리면서 경로들이 나열되게 되는데 여기서 핵심은 RealPathContextPath 이다.

 

필자가 의도하기로는 root 하위에 project 폴더에서 웹 서비스가 실행되기를 기대하지만 실제 경로를 확인해 보면 root 폴더 상에서 서비스가 되도록 설정 되어 있다. 웹 파일들(image, jsp, html)은 root\project 폴더에 등록되어 있기 때문에 호출하면 표시는 되지만 실제 뒷단에서 동작하는 class 들을 ContextPath가 root 폴더로 설정되어 있기 때문에 jsp에서 class 파일들을 호출하지 못 한 것이다.

 

3. 해결

그렇다면 톰캣 서버가 내가 원하는 경로로 설정되도록 맞춰 주기만 하면 되지 않을까?

이를 위해서는 [Tomcat 설치 경로]\conf\server.xml 파일을 주목하자.

 

우리가 주목해야 할 부분은 <Host ...> 로 시작하는 테그의 안쪽이다.

<Host ...>

<Context docBase="실제 서비스 할 폴더의 절대경로(ex: C:/Tomcat/webapps/ROOT/project/)" path="웹에서 호출 할 경로(ex: /project)" reloadable="true" />

</Host>

 

위와 같이 Context 태그를 설정하여 주고 톰캣 서버를 재시작 한 뒤 아까의 info.jsp 를 호출하여 보자.

RealPath, ContextPath가 본인이 설정한 경로로 되어 있는가? 그렇다면 이제 익스플로러에서 웹을 호출해 보도록 하자.

 

정상적으로 서비스가 동작할 것이다(아마도?)

+ Recent posts