프로젝트를 하다보면 간간히 만나는 녀석 ${pageContext.request.contextPath}
보통 .js나 .css등 정적파일을 import할 때 경로에 붙여서 사용하는데 ( URL 호출에도 사용함. ~.do 와 같이.. )
왜 쓰는걸까? 결론만 말하면 "유지보수의 용이성" 때문이다.
이 녀석이 하는 일은 아래와 같다.
프로젝트의 context-path를 가져오는데..
만약 개발하는 중간에 path값이 바뀐다? 그러면 하나하나 다 찾아내서 바꿔줘야 하는 불상사가 일어난다.
그렇기 때문에 기본 path는 ${pageContext.request.contextPath}로 대체하고, 뒤의 경로만 적어주는
방식으로 사용한다.
아래 예제를 보면서 익혀보자.
testJSP.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
<script src="/test/js/testJs1.js"></script>
<script src="${pageContext.request.contextPath}/js/testJs2.js"></script>
</html>
testJs1.js
let script = document.createElement('h1');
let txt = document.createTextNode('testJs1을 호출하였습니다.');
script.appendChild(txt);
document.body.appendChild(script);
testJs2.js
let script2 = document.createElement('h1');
let txt2 = document.createTextNode('testJs2를 호출하였습니다.');
script2.appendChild(txt2);
document.body.appendChild(script2);
이렇게 하고 URL을 호출하면?
<네트워크 상태>
요청URL을 확인해보니 . ${pageContext.request.contextPath}를 쓴 녀석도 제대로 test를 가져온다.
근데 만약 누군가가 필요에 의해서 path값을 바꿨다면?
이렇게 path값이 변경이 됬는데, 팀에 있는 다른 개발자들은 이 사실을 모른다고 하면 아마 그대로
.js나 .css 경로를 바꾸지 않고 호출할 것이다. 그럼 아래와 같은 결과가 나온다.
testJs1.js를 제대로 호출하지 못하였다..
네트워크 상태를 한번 보도록 하자.
${pageContext.request.contextPath}를 안쓴 경우
${pageContext.request.contextPath}를 쓴 경우
이렇게 변경되는 path값을 자동으로 할당하여 넣어주기 때문에 path값이 바뀌더라도 따로 수정작업을
안해주어도 된다. 정말 편리하다.
이 외에도 EL태그를 통해 쓸 수 있는 몇가지 표현식을 정리해두록 할테니, 쓸 사람은 갖다 쓰도록 하자.
${pageContext.request.requestURL} : 전체 URL
${pageContext.request.scheme} : http
${pageContext.request.serverName} : localhost
${pageContext.request.serverPort} : 포트번호
${pageContext.request.requestURI} : 요청 URI
${pageContext.request.servletPath} : 파일명
샘플코드 및 실행결과
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div>${pageContext.request.contextPath}</div>
<div>${pageContext.request.requestURL}</div>
<div>${pageContext.request.scheme}</div>
<div>${pageContext.request.serverName}</div>
<div>${pageContext.request.serverPort}</div>
<div>${pageContext.request.requestURI}</div>
<div>${pageContext.request.servletPath}</div>
</body>
</html>
'JSP' 카테고리의 다른 글
[JSP] The method isEmpty(String) is undefined for the type StringUtils 에러 해결방법 (0) | 2022.08.24 |
---|---|
[JSP] .jsp파일 include 하는 방법 ( <jsp:include>, <%@ include %> ) (0) | 2022.05.14 |
[JSP] 상대경로와 절대경로에 대한 정리 (0) | 2022.05.14 |
[JSP] WEB-INF 폴더에 관한 정리 ( 웹브라우저에서 WEB-INF 하위 파일(jsp, html, js, css 에 접근이 가능한가? ) (0) | 2022.05.10 |
[JSP] Include한 js파일의 한글이 깨지는 현상 ( <%@include file = ".js" %> ) (0) | 2022.05.10 |