[JSP] 페이지 이동 Forword와 Redirect의 차이점에 대해 알아보기
JSP에서는 페이지를 이동하는 방식이 크게 2가지로 분류된다.
Forward 와 Redirect가 있는데 둘은 요청한 페이지로 이동하여 뛰운다는 것은 동일하나
차이점이 확연히 존재한다.
이 차이점과 각 저장소에 담긴 데이터가 이동방식에 따라 어떻게 되는지 알아보겠다.
1️⃣ Forward
❓ Forward란
서버 내에서 하나의 페이지 내부에서 다른 페이지로 요청처리를 전달하는 것을 뜻한다.
예를 들어 로그인이 된 직후 로그인된 유저의 정보를 가지고 마이페이지로 이동하는 경우
❓Forward의 특징
웹 브라우저의 주소창이 바뀌지 않으며 , 클라이언트는 내부의 동작을 알수 없다.
요청을 전달하는 페이지 내부에서 다른 페이지로 이동한것이기 때문에
request 객체의 값이 그대로 유지된다,
🔍 Forward 예제
<aside>
◾ 처음 요청 받은 Get 메서드
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); }
◾ RequestDispatcher 객체 생성
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); String url = "hello"; //getRequestDispatcher //forward를 지원해주는 웹 용 객체 RequestDispatcher dis = request.getRequestDispatcher(url); }
👉 forward를 지원해주는 객체에 hello를 담은 문자열이 저장되며 생성
◾ RequestDispatcher 를 통해 forward
dis.forward(request, response);
✔️ 결과 넘긴 url 의 hello 경로를 따라서
flow페이지가 요청되지만 hello로 이동하여 hello페이지가 출력된다.
그리고 클라이언트는 flow에서 hello로 이동하는것이 보이지않고 hello만 바로 보게된다.
</aside>
2️⃣ Redirect
❓ Redirect 란
현재의 요청에 대한 응답을 재요청으로 하는것이다.
즉 요청 받은 페이지가 직접 요청을 처리하는 것이 아닌 클라이언트가 요청한 URL을
또 다시 호출하는 방법이다.
예를 들어 로그아웃을 할 경우 전부다 리셋하고 메인 페이지를 뛰우는 경우
🔍 Redirect 예제
//flow
//요청되어 doGet 메서드 실행
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
String url = "hello";
// hello페이지를 다시 요청해달라고 응답한다.
response.sendRedirect(url);
}
👉응답을 받으면 그렇다면 처음 요청을 했던 페이지로 다시 되돌아간 뒤
hello로 바로 다이렉트로 요청을 한다.
다시 말해서 주소창이 한번 리셋된 다음 새 주소가 생기게된다.
🔥 forward와 redirect 차이점
주소 이동
ex) first.jsp에게 second.jsp을 요청한다.
Redirect : 웹 브라우저 → first.jsp → 웹 브라우저 → second.jsp (너가 대신 이동해)
forward : 웹 브라우저 → first.jsp → second.jsp (내가 이동할게)
새로 고침
Redirect : url은 second 👉 second 페이지를 유지한다.
forward : url은 first 👉 first 페이지로 돌아간다.