본문 바로가기
JAVA/JSP, Servlet

<Servlet>redirec와 forward개념

Redirect와 Foward는 JSP환경에서 현재 작업중인 페이지에서 다른페이지로 이동하는 방식이다.

그렇다면 결과적으로 같은 기능을 하는 이 두가지는 어떠한 차이점이 있을까??

 

​1. redirect의 개념

 

 

 

1. 리다이렉트는 HTTP프로토콜로 정해진 규칙이다.

 

2. 서버는 클라이언트의 요청에 대해 특정 URL로 이동을 요청할 수 있다. 이를 리다이렉트라고 한다.

 

3. 서버는 클라이언트에게 HTTP 상태코드 302로 응답하는데 이때 헤더 내 Location 값에 이동할 URL 을 추가한다. 클라이언트는 리다이렉션 응답을 받게 되면 헤더(Location)에 포함된 URL로 재요청을 보내게 된다. 이때 브라우저의 주소창은 새 URL로 바뀌게 된다.

4. 클라이언트는 서버로부터 받은 상태 값이 302이면 Location헤더값으로 재요청을 보내게 된다. 이때 브라우저의 주소창은 전송받은 URL로 바뀌게 된다.

5. 서블릿이나 JSP는 리다이렉트하기 위해 HttpServletResponse 클래스의 sendRedirect() 메소드를 사용한다.

 

 

 

Redircet를 사용하면서 한번쯤 생각해 봐야 하는 것은 우선 웹브라우저 상에 URL주소가 변경된다는 것과

두번의 요청/응답 과정에서 요청객체와 응답객체가 각각 생성되면서 객체가 2개씩 생긴다는 점이다.

Redirect의 경우 최초 요청을 받은 URL1에서 클라이언트에 Redirect할 URL2를 리턴하고

클라이언트에게 새로운 요청을 생성하여 URL2에 다시 요청을 보낸다.

따라서 처음 보냈던 최초의 요청정보는 더이상 유효하지 않게 된다.

 

 

 

 

 

 

2. forward의 개념

 

1. 웹브라우저에서 Servlet1에게 요청을 보냄

2. Servlet1은 요청을 처리한 후, 그 결과를 HttpServletRequest에 저장

3. Servlet1은 결과가 저장된 HttpServletRequest와 응답을 위한 HttpServletResponse를

같은 웹 어플리케이션 안에 있는 Servlet2에게 전송(Forward)

4. Servlet2는 Servlet1으로 부터 받은 HttpServletRequest와 HttpServletResponse를 이용하여 요청을 처리한 후 브라우저에게 결과를 전송

 

 

 

 

 

 

3. redirect와 forward의 사용처

지금까지 Redirect와 Forward에 대해서 알아보았다.

내용을 정리해 보는 차원에서 비유를 들어 전화상담을 통한 예시로 설명을 해보고자 한다.

Redirect

1) 고객이 고객센터 123번으로 전화를 건다.

2) 상담원은 고객에게 다음과 같이 이야기를 한다. '고객님 해당 문의사항은 124번으로 다시 문의해주세요'

3) 고객은 다시 124번으로 문의하여 문제를 해결한다.

Forward

1) 고객이 고객센터 123번으로 전화를 건다.

2) 상담원은 해당 문의사항에 대해 잘 알지 못해서 다른 상담원에게 해당 문의사항에 대한 답을 얻는다.

3) 상담원은 고객에게 문의사항을 처리해준다.

위의 내용을 바탕으로 우리는 다음과 같은 사실을 알 수 있다.

Redirect는 URL의 주소가 변하며, Request/Response객체를 새로 생성하기에 재사용 할 수 없다.

Forward는 URL주소가 변하지 않으며 Request/Response객체를 재사용 할 수 있다.

이러한 차이점 때문에 서로 비슷한 Redirect와 Forward는 상황에 맞게 사용해야 하는데

예를들어 게시판을 작성한다고 가정한다면 글쓰기 기능을 수행하는 도중에 사용자가 새로고침을 누른다면

Forward를 사용할 경우 요청정보가 그대로 살아 있기 때문에 똑같은 글이 여러번 등록될 수 있다.

하지만 Redirect의 경우 처음 글을 작성할 때 보냈던 요청정보는 존재하지 않는다.

또한 글쓰기 기능을 하는 URL1이 아닌 URL2로 요청을 보내기 때문에 글쓰기가 여러번 수행되지 않는다.

즉, 시스템(Session, DB)의 변화가 생기는 요청인 로그인, 회원가입, 글쓰기등의 작업은 Redirect가 적합하며

시스템의 변화가 생기지 않는 단순조회작업인 검색이나 게시글리스트보기와 같은 작업은 Forward방식이 적합하다.

또한 다른 관점으로 생각해보자면

Servlet은 자바를 사용하기 용이하기 때문에 프로그램 관련 로직작성이 편한 반면 HTML을 사용하기는 어렵다.

반면 JSP는 HTML을 사용하기는 쉽지만 Java를 사용한 로직작성은 어렵다.

Forward를 사용하면 이러한 문제점을 해결할 수 있다.

request객체에 값을 담아 서블릿으로 포워드하여 서블릿상에서 Java로 작업을 하게되면 JSP와 Severlet의 장단점을 서로 상호보안할 수 있다.

'JAVA > JSP, Servlet' 카테고리의 다른 글

<Servlet>이란 무엇일까? 서블릿 개념정리  (0) 2019.05.18
[JSTL]이란? JSTL CORE태그 사용법  (0) 2019.05.18

댓글