FRONT/JSP

(스프링)pageContext.request.contextPath의 사용

간펴니 2021. 7. 20. 19:53
728x90

pageContext.request.contextPath는 웹에서 상대적인 경로를 나타낸다.

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

 

http를 이용한 url요청 방법은

 

1. <a href="test/List/ListOpen.do">

컨텍스트의 이름을 직접입력하는 방법이다.

 

2.<a href="<%=reqeust.getContextPath() %>/List/ListOpen.do>

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

 

첫번째 방법은 컨택스트 이름이 바뀔 시 페이지들의 컨텍스트 이름을 일일이 다 찾아서 수정해줘야만 한다.

두번째 방법은 자바코드가 사용되어 화면작업이 복잡해지고 가독성이 떨어진다.

 

3.<a href="${pageContext.request.contextPath}/List/ListOpen.do">

pageContext는 상대경로이다. 상대경로라는건 내 현재 위치의 문서를 기준으로 경로를 인식하는 방법이다.

절대경로는 위의 1번과 같이 모든 경로가 완전히 적혀진 것을 의미한다.

 

현재 내 위치를 기준이라는 것은 예시로 설명하겠다.

 

localhost:8080/web/board/getBoardContent?bid=4

4번째로 올려진 게시물의 내용을 확인하는 페이지의 url이다.

컨트롤러에서 받으면 boardContent.jsp를 리턴한다

페이지의 경로는 /WEB-INF/views/board/boardContent.jsp 이다. 

<button type="button" class="btn btn-sm btn-primary" id="btnDelete">삭제</button>

 

삭제버튼을 만들고



<script>
$(document).on('click', '#btnDelete', function(){

    var url = "${pageContext.request.contextPath}/board/deleteBoard";

    url = url + "?bid=" + ${boardContent.bid};

location.href = url;

});
</script>

위의 스크립트 부분에 삭제버튼 이벤트를 생성했다.

삭제버튼을 누르면 url을 전송한다.

그럼 전송되는 url은

localhost:8080/web/board/delete?bid=4 가 되겠다.

 

!! 주의 ./은 현재위치의 상위폴더를 의미하기 때문에

localhost:8080/web/board/getBoardContent?bid=4/board/deleteBoard가 되지않는다

 

그 후 컨트롤러에서 board/deleteBoard를 맵핑으로 잡아서

 

public String deleteBoard(@RequestParam("bid")int bid)throws Exception{
boardService.deleteBoard(bid);
return "redirect:/board/getBoardList";

 

삭제메소드를 실행한다. 게시글primary-key(bid)는 RequestParam으로 받는다.

그 다음 Service - DAO - Moel 처리의 설명은 생략하고

리턴하며 게시글메인페이지를 보여주며 삭제가 완료된다.

 

결론 :

상대경로를 사용함으로써 

1번 <a href="test/List/ListOpen.do">(절대경로)가 west/List/OpenList로 바뀌면 모든 jsp(뷰)단의 url을 수정해야하지만

3번 <a href="${pageContext.request.contextPath}/List/ListOpen.do">(상대경로)을 사용하면 앞이 알아서 west로 바뀌니

수정할 필요가 없어진다.

 

 

 

 

 

 

728x90