개발공작소
article thumbnail
728x90

 

 

 

 

프로젝트를 하다보면 간간히 만나는 녀석 ${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값이 변경됨

 

이렇게 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>

 

 

 

 

 

 

728x90
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!