context path가 소스내에 하드코딩 되어 있으면, context path 변경시 모든 파일에서 다 찾아서 변경해야 합니다.
요즘은 에디터가 잘 되어있어서 쉽게 찾을 수 있지만 잘못된 문구가 치환되지 않기 위해 주의를 기울여야 하는 것도 번거럽기도 하고, 하드코딩은 가능한 피햐해 하죠.
소스 내에 자바스크립트를 사용할 수 있는 곳은 아래 함수를 이용하면 됩니다.
javascript:
function getContextPath() {
var hostIndex = location.href.indexOf( location.host ) + location.host.length;
return location.href.substring( hostIndex, location.href.indexOf('/', hostIndex + 1) );
}
이미지 경로 설정과 같은 경로를 직접 써야 할 경우 아래 표현식을 써주면 좋습니다.
jsp : EL(Expression Language) 사용
servlet 2.4 이상 ${pageContext.request.contextPath}
servlet 2.3 이하 <c:out value='${pageContext.request.contextPath}' />
위 방식을 사용하기 위해선 JSTL 1.2 라이브러리가 필요합니다.
예) <img src="${pageContext.request.contextPath}/images/logo.png" />
<img src="<c:out value='${pageContext.request.contextPath}' />/images/logo.png" />
그런데 자바스크립트를 사용 못하는 css 파일 내 경로의 경우 톰캣에서 컨텍스트 주소를 별도로 잡아서 적어주는 방법이 있습니다.
톰캣의 server.xml :
<Context docBase="CTX" path="/ctx" reloadable="true" source="org.eclipse.jst.j2ee.server:CTX"/>
<Context docBase="CTX/images" path="/ctxImg" reloadable="true" source="org.eclipse.jst.j2ee.server:CTX"/>
위에서와 같이 이미지 경로를 포함하는 주소를 docBase에 설정하고 path를 잡아주면 됩니다. 일반적인 경우는 인터넷에 많이 나와 있어서 이클립스에서 잡은 예를 들었습니다.
예)
AS-IS : .pattern { background:url(/ctx/images/common/pattern.gif) repeat; }
TO-BE : .pattern { background:url(/ctxImg/common/pattern.gif) repeat; }
사실 톰캣에서 주소를 새로 설정해주었으면 모든 이미지 주소에 새로 설정한 값을 사용하는 것이 편할 수 있습니다. context path와 image path는 별개로 움직이니까요.
참고로 자바에서 컨텍스트 패스를 잡는 경우는 아래와 같이 하면 됩니다.
java : HttpServletRequest request
request.getContextPath()
'웹 개발' 카테고리의 다른 글
Tomcat 4.1, Java 1.4에서 JSTL 사용하기. (0) | 2018.09.04 |
---|---|
CVS commit시 sticky tag 에러, Eclipse에서 해결하기. (0) | 2018.09.03 |
Malformed fileattr.xml (0) | 2013.02.04 |
SCRIPT5009: 'JSON' is undefined (0) | 2013.02.01 |
prototype과 jquery 함께 사용하기. (0) | 2012.02.06 |