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로 바뀌니
수정할 필요가 없어진다.
'FRONT > JSP' 카테고리의 다른 글
<c:out>을 사용하는 이유 (0) | 2021.07.31 |
---|