[JSP] ${pageContext.request.contextPath}가 가리키는 것

dondonee·2024년 1월 20일
0
post-thumbnail

Context Path

박매일 님의 스프1탄 강의를 들으며 게시판을 만들고 있다. JSP 페이지에서 다음과 같이 ContextPath 변수에 컨텍스트패스 경로를 동적으로 할당하는 방법을 배웠다.


<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}"/>

이렇게 <c:set>을 이용하면 추후에 경로가 변경되어도 코드를 수정하지 않아도 된다는 장점이 있다.


컨텍스트 패스

웹 애플리케이션은 $CATALINA_HOME\webapps 아래에 배치되며, 여기서 $CATALINA_HOME은 톰캣의 설치 디렉터리이다.

컨텍스트 패스는 서버의 주소를 기준으로 하며 애플리케이션의 이름이기도 하다. 톰캣은 애플리케이션 이름(컨텍스트 패스)으로 자신이 실행할 애플리케이션을 구분한다.

톰캣은 기본적으로 WAR 파일의 이름을 컨텍스트 패스로 사용한다. 만약 파일의 이름이 ExampleApp.war라면 http://localhost:8080/ExampleApp로 접근할 수 있고 여기서 컨텍스트 패스는 /ExampleApp이다.


컨텍스트 패스 변경

컨텍스트 패스는 변경 가능하며, 보통 server.xml에서 변경한다. 이 XML 파일은 $CATALINA_HOME\conf에 위치한다.

인텔리제이 IDE를 이용하면 서버 설정(Run - Edit Configurations...)에서 쉽게 변경할 수 있다.

컨텍스트 패스 이름을 변경하더라도 WAR 파일의 이름은 변경되지 않는다.


자세한 사항은 톰캣 공식 문서 참조(링크).



변수 활용

활용 1 - RequestMapping

위와 같이 Application Context를 설정한 경우 ContextPath/controller가 된다.


<li><a href="${contextPath}/">Home</a></li>
<li><a href="${contextPath}/memLoginForm.do">로그인</a></li>

위 코드는 네비게이션 바의 일부이다.

버튼을 클릭했을 때 실행되는 요청 URL은 다음과 같다 :

  • Home 버튼 => http://localhost:8088/controller/
  • 로그인 버튼 => http://localhost:8088/controller/memLoginForm.do


활용2 - file

 <img src="${contextPath}/resources/">

위와 같이 파일의 경로에서도 컨텍스트 패스를 사용할 수 있다.

배포시 WAR 파일의 위치는 톰캣 인스턴스의 $CATALINA_HOME\webapps이다. 따라서 애플리케이션 이름이 controller라면 ${contextPath}$CATALINA_HOME\webapps\controller가 된다.



참고) 톰캣의 배포

Apache Tomcat

아파치 톰캣은 자바에서 가장 인기있는 서버 중 하나이다. WAR 방식을 통해 웹 애플리케이션을 제공하는 서블릿 컨테이너로서 사용된다.

WAR

WAR이란 Web Archive의 줄임말이다. 계층형 디렉토리 구조로 된 웹 애플리케이션을 ZIP 포맷으로 패키징하는 파일의 확장자이다. 자바 웹 애플리케이션은 배포를 위해 일반적으로 WAR 파일로 패키징된다.

  • 인텔리제이 등 IDE에서는 WAR 패키징 및 배포를 자동화 해 준다.

WAR 배포

WAR 파일을 배포하면 톰캣은 파일의 압축을 풀고 webapp 디렉토리에 프로젝트 이름(컨텍스트 패스)을 딴 디렉토리를 만들고 거기에 모든 프로젝트 파일을 저장한다.

.
├── ROOT
├── controller
│   ├── META-INF
│   ├── WEB-INF
│   │   ├── classes
│   │   │   └── kr
│   │   │       └── board
│   │   │           ├── controller
│   │   │           ├── entity
│   │   │           └── mapper
│   │   ├── lib
│   │   ├── spring
│   │   │   └── appServlet
│   │   └── views
│   │       ├── board
│   │       ├── common
│   │       └── member
│   └── resources
│       └── images

애플리케이션 이름(컨텍스트 패스)을 /controller로 지정했다면 webapp 디렉토리 내에 controller 디렉토리가 생성된다.

만약 컨텍스트 패스가 /라면 ROOT 디렉토리 내에 프로젝트 파일이 위치한다.





🔗 References

0개의 댓글