pageContext.request.contextPath란 웹 애플리케이션의 상대적인 경로를 나타낸다.

 

pageContext 객체는 javax.servlet.jsp.PageContext 클래스를 상속해 웹 컨테이너가 JSP 실행시 자동으로 생성해서 제공하는 내장 객체이다.

 

<a> 태그를 이용해 다른 서블릿이나 JSP를 요청하는 방법은 두가지다.

1. 첫번쨰는 컨텍스트 이름(test or /(root))를 직접 입력하는 방법이다.

<a href="/test/test01/memberForm.jsp">

 

2. 두번째는 getContext() 메서드를 이용해 컨텍스트 이름을 가져오는 방법이다.

<a href="<%=reqeust.getContextPath() %>/test01/memberForm.jsp>

 

그런데 첫번째 방법은 컨텍스트 이름(test)를 일일이 찾아서 수정해야 하는 단점이 있고 두번째 방법은 자바코드가 사용되어 화면 작업이 복잡해진다는 단점이 있다.

 

그러나 이러한 문제는 PageContext 객체의 속성인 request의 contextPath 속성을 이용하면 쉽게 컨텍스트 이름을 가져올 수 있다.

 

3. 세번째 방법은 pageContext.requet.contextPath를 사용해 컨텍스트 이름을 가져오는 방법이다.

<a href="${pageContext.request.contextPath}/test01/memberForm.jsp">

 

그럼 아래 예제를 보면서 얘기를 진행하도록하자.

필자는 다음과 같이 index.jsp > test01 > memberForm.jsp를 실행하려고한다.

우선 index.jsp의 코드를 보도록하자

다음과 같이 구성되어 있다.

그럼 세개의 코드가 실제 페이지에서는 어떻게 표시되는지 보도록하자

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2><a href="/main/main.do">체인</a></h2>
<a href="http:///test01/memberForm.jsp">첫번째 방법</a><br>
<a href="<%=request.getContextPath()%>/test01/memberForm.jsp">두번째 방법</a><br>
<a href="${pageContext.request.contextPath}/test01/memberForm.jsp">세번째 방법</a><br>
</body>
</html>

  첫번째 방법은 다음과 같이 컨텍스트르 정보를 직접입려하지않으면 불러오지않는다.

그렇기 때문에 프로젝트를 변경할 경우 매번 해당 프로젝트의 컨텍스트 정보를 입력해줘야한다.

또한 한 서버에 다수의 프로젝트를 진행할 경우에는 이것 역시 매번 변경해줘야한다.

두번째 방법의 경우 컨텍스트 경로를 잘 가져오는 것을 확인할 수 있다.

그러나 자바 코드가 사용되다보니 화면이 다소 지저분하게 보일 수 있다.

세번째 방법의 경우 자바코드도 사용하지않고 컨텍스트 경로를 잘 가져오고 있다.

그렇기 때문에 가급적 세번째 방법으로 컨텍스트 경로를 가져오기를 권유한다.

이제 아래 코드가 어떤 것을 의미하는지 알 수 있다.

만약 contextPath 변수(pageContext.request.contextPath)가 없었다면 첫번째 방법의 경우 일일이 하나하나 입력을 했어야하고 두번째 방법의 해당 컨텍스트 경로들이 모두 자바 코드들로 구성되어 보기가 좋지 않았을 것이다. 

그런데 다음과 같이 pageContex.request.contextPath를 사용함으로써 이러한 문제를 해결할 수 있다.

+ Recent posts