참고: http://www.ibm.com/developerworks/kr/library/j-jstl0318/#N10528 [image, js, css의 경로 이슈]
일반적으로 웹 리소스에 대한 경로를 기재할 경우 context 명이 개발 시점이 아닌 배포 시점에 재정의 가능하다는 점을 감안하여 동적으로 결정되도록 하는 방법이 사용된다.
그 중 하나가 c:url 태그인데 url 태그는 context 명을 동적으로 가져올 뿐만 아니라 session tracking을 위한 정보도 동적으로 생성한다.
그래서 session tracking이 필요한 경우 (cookie에 session 정보가 없을 때) 아래와 같은 현상이 발생한다.
[소스 코드] <c:url value="/content/search.jsp">
[session 정보가 cookie에 있는 경우] /blog/content/search.jsp?keyword=foo+bar&month=02%2F2003 [session 정보가 cookie에 없는 경우] /blog/content/search.jsp;jsessionid=233379C7CD2D0ED2E9F3963906DB4290
의도한 내용이었다면 문제가 없지만 image나 js, css의 경로로 이 태그를 사용하고 web server로 하여금 이들 파일을 핸들링하게 할 경우, 뒤에 달라붙는 jsessionid를 파일명의 일부로 간주하여 not found가 나온다.
EL로 대체하기
이를 해결할 여러가지 방법이 있겠지만 'context명을 동적으로 가져와야한다'라는 목적에 집중한다면 EL 사용을 고려할 수 있다.
${pageContext.serveltContext.contextPath} ${pageContext.request.contextPath}
뭘로 해도 동일한 값을 얻을 수 있다.
정규 표현식으로 치환하기 대략 아래와 같은 패턴이면 c:url을 사용한 것을 EL로 교체할 수 있다. 가정하고 있는 것은 이미지 경로 및 파일명에 사용되는 문자열은 알파벳 대소문자, 숫자와 파일 경로 구분자로 /, \, 그리고 파일 확장자 앞에 붙는 구분자 .를 패턴으로 잡았다.
Image 검색 패턴 src="<c:url value='([a-zA-Z0-9\.\/\\\-\_]*).gif'\s*\/>"
Image 치환 패턴 src="\$\{pageContext.request.contextPath\}$1.gif"
CSS 검색 패턴 href="<c:url value='([a-zA-Z0-9\.\/\\\-\_]*).css'\s*\/>"
CSS 치환 패턴 href="\$\{pageContext.request.contextPath\}$1.css"
JavaScript 검색 패턴 src="<c:url value='([a-zA-Z0-9\\\/\.\-\_]*).js'\s*\/>"
JavaScript 치환 패턴
Eclipse의 search에서 정규 표현식 사용을 체크한 후, 치환하면 된다. |
'Information Technology' 카테고리의 다른 글
자바스크립트에서 ContextPath 구하기 javascript (0) | 2011.08.26 |
---|---|
윈도우 XP 폴더 동시 접속자 늘리기 (0) | 2011.08.22 |
Windows XP 메모리 최적화 가이드 (0) | 2010.08.06 |