Hello,

kok nae-ga ha-myun an-dweneun MAGIC...🧚

웹 프로그래밍

[ JSP ] redirect + forward + include 파헤치기

✿도담도담 2018. 5. 22. 02:12

블로그에는 뜬끔없이 올리는 JSP지만 6개월전에 학교에서 수업을 들었는데 다 까먹어서 다시 공부하고 있다. 😅

중요한 부분이지만 항상 햇갈려하는 페이지 이동 부분이다.

총 redirect,  forward, include 이렇게 3가지의 방법이 있다. 이들의 차이점을 살펴보자!


우선 3명의 친구들을 살펴보기 전에 우리는 내장 객체에 대한 부분을 알고 있어야한다.

세 친구들이 jsp의 내장 객체 메소드로 있기 때문이다.

짤막하게 설명하자면 redirect는 클라이언트의 요청에 대한 HTTP 응답을 나타내는 객체인 reponse의 메소드이고,

forward와 include는 다른 내장 객체를 얻어내거나 현재 페이지의 요청과 응답의 제어권을 

다른 페이지로 넘겨주는데 사용하는 pageContext객체의 메소드다.

위의 내장 객체의 설명만 봐도 조금은 세 친구들의 역할을 추리할 수 있다. 👍


본격적으로 redirect 방법부터 알아보자 !

책에 적힌 설명으로는 "지정된 URL로 요청을 재전송한다" 라고 적혀 있다.

<% response.sendRedirect("이동할 페이지.jsp"); %>

redirect 방법으로 이동한 페이지는 이전 페이지와 전혀 데이터를 공유하거나 주고받는 것이 없다.

실제로 데이터를 공유할 수도 없다. 리다이렉트 하게 되면 이동할 페이지로 요청과 응답 객체를 새로 생성하여 전송하기 때문이다.

리다이렉트는 페이지를 재요청하는 것이며, URL을 보면 리다이렉트 시 해당 jsp 파일의 이름으로 변경되어 있을 것이다

.

.


데이터의 이동이 없다면 위와 같은 방법을 사용하면 되지만 우리는 분명 이전의 페이지에 작성 된 데이터를

이동할 페이지로 보내야 할 때가 있을 것이다.

이런 경우에는 pageContext객체의  forword와 include 메소드를 사용한다.

<% pageContext.forward("이동할 페이지.jsp"); %>

<% pageContext.include("이동할 페이지.jsp"); %>


forward는 현재 페이지의 요청과 응답에 관한 제어권을 URL로 지정된 주소( 매개변수 )로 영구적으로 넘긴다.

포워드된 페이지의 요청 처리가 종료 되면 응답도 종료 된다.

리다이렉트처럼 페이지 재요청이 아닌 메소드를 호출하는 것과 같다.

그리고 서버가 자동으로 이동 시켜줌으로써 URL이 그대로이며 데이터만 옮겨진다. (= 데이터 공유, 유지 )

포워드의 사용 방법으로 또 3가지 방법이 있다.

1) jsp 액션 태그 사용 : <jsp:forward page = " 페이지명 ">

2) 내장 객체 사용 : <% pageContext.forward("페이지명"); %>

3) 서블릿 RequestDispatcher 사용

RequestDispatcher dispatcher = request.getRequestDispatcher(forward.getPath());

dispatcher.forward(request, response);


마지막으로 include는 영어로 '포함하다' 뜻을 가지고 있는데 jsp에서도 영어뜻과 비슷한 역할을 하고 있다.

include는 해당 URL로 포워드처럼 제어권을 넘기지만 영구적으로 넘기는 것이 아니라

include된 페이지의 처리가 끝나면 다시 제어권은 원래의 페이지로 돌아온다.

include된 페이지의 내용을 원래 페이지에 삽입하는 것과 같다.