Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Hello, Dino

Page 이동 방식 (Forward / Redirect) 본문

Web/JSP

Page 이동 방식 (Forward / Redirect)

초보디노 2020. 3. 10. 11:31

Page를 이동하는 방식에는 RedirectForward가 존재한다.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String id = request.getParameter("ID");
  String pw = request.getParameter("PW");

  // set request data
  request.setAttribute("ID", id);
  request.setAttribute("PW", pw);

  // forward
  request.getRequestDispatcher("main.jsp").forward(request, response);

  // redirect
  response.sendRedirect("main.jsp");
}

 

Forward와 Redirect의 차이👫

 

사례를 통한 Forward와 Redirect의 차이

case 고객(Client)가 114(URL) 상담원(Server)에게 문의 전화를 하는 경우

 

첫번째 Forward

1. 상담원은 옆자리 113번 담당 상담원을 통해 문의사항에 대한 답변을 얻는다.

2. 상담원은 고객의 문의사항을 처리해준다.

 

두번째 Redirect

1. 상담원은 고객에게 "해당 문의사항은 113번으로 다시 문의 해주시겠어요?"

2. 고객은 113번으로 문의하여 일을 처리한다

 

 



Forward

Web container 차원에서 실제로 웹 브라우저는 다른 페이지로 이동했는지 알 수 없다.

   -> 고객은 상담원이 다른 상담원을 통해 답변을 얻었는지 알 수 없다.

웹 브라우저에는 최초 호출한 URL만 표시되고, 이동한 페이지의 URL은 알 수 없다.

   -> 고객은 114에만 전화했기 때문이다.

현재 실행 중인 페이지와 forward에 의해 호출될 페이지는 request, response 객체를 공유한다.

    -> 고객이 요청한 문의사항은 114번 담당 상담원과 113번 담당 상담원 모두 알고있다.

 

따라서, forward 방식은 다음 이동한 URL로 요청정보를 그대로 전달한다. 때문에 사용자가 최초로 요청한 정보는 다음으로 호출된 URL에서도 유효하다.

 

Redirect

Web container는 웹 브라우저에게 다른 페이지로 이동하라는 명령을 내린다.

    -> "해당 문의사항은 113번으로 다시 문의 해주시겠어요?"

웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동한다.

    -> 고객은 113번으로 다시 전화를 건다.

새로운 페이지에서는 request, response 객체가 새롭게 생성된다.

    -> 고객은 113번에 전화하여 문의사항을 다시 말해야한다.

 

따라서 Redirect 방식은 최초 요청 받은 URL1에서 클라이언트에 redirect할 URL2를 리턴하고, 클라이언트에게 새로운 요청을 생성하여 URL2에 다시 요청을 보낸다. 때문에 사용자가 최초로 요청한 정보는 더이상 유효하지 않게괸다.

 

 

그렇다면, 언제 Forward를 사용하고 또  언제 Redirect를 사용해야 할까? 🤔

게시판에 글 쓰기 기능을 수행하는 CGI가 있다면, 이 CGI의 응답 페이지는 forward와 redirect 중 어떤 것을 사용해야할까? 

 

정답은 redirect이다.

 

왜냐하면, 사용자가 글쓰기 CGI 응답 페이지에서 새로고침을 누른 경우

forward는 요청정보가 유효하기 때문에 똑같은 글이 여러번 등록 될 수 있다.

하지만, redirect는 페이지 이동 후 요청정보가 더이상 유효하지 않기때문에 글쓰기가 여러번 수행되지 않는다.

 

시스템(Session, DB)에 변화가 생기는 요청(로그인, 회원가입, 글쓰기)같은 경우 redirect 방식으로 응답하는 것이 바람직하며

시스템에 변화가 생기지 않는 요청(단순조회)의 경우는 forward방식으로 응답하는 것이 바람직하다.

 

 

 

Reference

https://doublesprogramming.tistory.com/63

'Web > JSP' 카테고리의 다른 글

한글 처리 (encoding)  (0) 2020.03.10
Cookie / Session  (0) 2020.03.09
Servlet 생성부터 Servlet Mapping까지 🏃‍♀️  (0) 2020.01.10
JSP 개발 환경 설정  (0) 2020.01.07