Forward와 Redirect
Redirect와 forward는 JSP 환경에서 현재 작업 중인 페이지에서 다른 페이지로 이동하는 페이지 전환 기능을 말한다.
Forward와 Redirect의 차이점
- 클라이언트 → 고객
- URL → URL
- 서버 → 상담원
forward() : 요청 정보가 그대로 유지
예시 2)
- 고객이 고객센터로 상담원에게 123번으로 전화를 건다.
- 상담원은 해당 문의사항에 대해 잘 알지 못해 옆의 다른 상담원에게 해당 문의사항에 대한 답을 얻는다.
- 상담원은 고객의 문의사항을 처리해준다.
- 웹 컨테이너 차원에서의 페이지 이동이기 때문에 실제로 웹 브라우저는 다른 페이지로 이동했는지 알 수 없다.
(고객은 상담원이 누구한테 물어봤는지 알 수 없다.) - 웹 브라우저에서는 최초 호출한 URL만 표시되고 이동한 페이지의 URL 정보는 볼 수 없다.
(고객은 123번으로만 전화했기 때문에 알 수 없다.) - 동일한 웹 컨테이너에 있는 페이지로만 이동이 가능하다.
- 현재 실행중인 페이지와 forward에 의해 호출될 페이지는 request, response 객체를 공유한다.
(고객이 요청한 문의사항은 고객이 전화를 끊을 때까지 유효하다.)
ex) 시스템 변화가 생기지 않는 단순 조회 요청(글 목록보기 또는 검색하기)
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("InputController에서 doGet 메소드를 실행함");
// 서블릿을 사용한 보안 구역 간접 호출
RequestDispatcher dispacher = request.getRequestDispatcher("/WEB-INF/calc/input.jsp");
dispacher.forward(request, response);
}
sendRedirect() : 새로운 요청이 수행
예시 1)
1. 고객이 고객센터로 상담원에게 123번으로 전화를 건다.
2. 상담원은 고객에게 다음과 같이 이야기한다.
"고객님 해당 문의사항은 124번으로 다시 문의 해주시겠습니까?"
3. 고객은 다시 124번으로 문의를 처리한다.
JSP 파일이 WEB-INF 즉, 보안 구역에 있기 때문에 직접 요청할 수 없어 서블릿 등에 전달된 요청을 다른 쪽으로
전달 혹은 배포를 하기 위해서 사용하는 RequestDispatcher 인터페이스의 메서드 중 하나를 말한다.
- 웹 컨테이너는 redirect 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라는 명령을 내린다.
(고객은 전화를 끊고 124번으로 다시 전화를 건다.) - 웹 브라우저의 URL이 지시된 주소로 바뀌고 해당 주소로 이동한다.
- 다른 웹 컨테이너에 있는 주소로 이동한다.
(123번에서 124번으로 이동한다.) - 새로운 페이지에서는 request, response 객체가 새롭게 생성된다.
(123번에서 고객이 요청했던 문의사항은 사라지고 124번으로 다시 전화를 걸어서 요청한 문의사항을
다시 말해야 한다.)
ex) 시스템 변화가 생기는 요청(회원 가입 또는 글쓰기)
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 두 수를 입력받아 두 수의 합을 구하고 각 변수 출력하기
String num1 = request.getParameter("num1");
String num2 = request.getParameter("num2");
System.out.printf("num1 : %s", num1);
System.out.printf("num2 : %s", num2);
// 빠른 응답 후 다른 페이지로 보낸다.
response.sendRedirect("/index");
}
Forward와 Redirect의 공통점과 차이점
공통점
자신에게 요청이 왔을 때 자신이 처리할 수 없기 때문에 다른 URL에게 요청 처리를 위임
차이점
요청 처리를 위임하는 과정
PRG 패턴(Post - Redirect - Get)
웹 개발 시에 권장되는 디자인 패턴으로 HTTP POST 요청에 대한 응답이
GET 요청을 위한 URI로 Redirect되는 것을 말한다.
- 사용자는 컨트롤러에 원하는 작업을 POST 방식으로 처리하기를 요청한다.
- POST 방식을 컨트롤러에서 처리하고 브라우저는 다른 경로로 이동(GET)하라는 응답(Redirect)한다.
- 브라우저는 GET 방식으로 이동한다.
- ex) 게시판
PRG 패턴을 사용하는 이유
- POST 방식의 처리 후에 바로 다른 주소로 브라우저가 이동하기 때문에
반복적으로 POST 호출이 되는 상황을 막을 수 있다.
(예를 들어서 새로고침으로 인해 동일한 요청을 연속적으로 보내지는 경우) - 사용자의 입장에서도 처리가 끝나고 다시 처음 단계로 돌아간다는 느낌을 준다.
- POST 요청은 URL을 공유하더라도 다른 사람과 공유할 수 없다.
Reference : 아래의 주소를 보면서 공부해서 정리함
https://doublesprogramming.tistory.com/63
Redirect VS, Forward (Redirect와 forward의 차이)
Redirect VS, Forward (Redirect와 forward의 차이) JSP환경에서 현재 작업중인 페이지에서 다른페이지로 이동하는 두가지 방식의 페이지 전환기능 사례를 통해 redirect와 forward의 차이점에 대해 감을 잡아보
doublesprogramming.tistory.com
'국비 지원 > JSP와 Servlet' 카테고리의 다른 글
[JSP/Servlet] EL과 JSTL (0) | 2023.07.22 |
---|---|
[JSP/Servlet] Request와 Response, GET 방식과 POST 방식 (0) | 2023.06.14 |
[JSP/Servlet] JSP와 Servlet은 무엇일까? (0) | 2023.06.12 |