웹에서 JSP/Servlet이 페이지를 이동시키는 방식은
리다이렉트와 포워드 두 가지
둘의 차이는 request 객체가 유지되느냐이다
🍐 리다이렉트 (redirect)
개념
새로운 요청을 보내는 것과 동일하다.
기존 request 객체는 버리고, 새 request가 만들어진다.
즉, 요청 정보(request 속성)가 유지되지 않는다.
URL이 바뀐다.
사용
전달할 데이터가 없을 때
저장 후 목록 페이지로 이동할 때처럼 다시 새로 요청해야 하는 상황
로그인 실패 후 다시 로그인 페이지로 보내기
보안적으로 새 요청을 보내야 하는 상황
response.sendRedirect("main.jsp");
리다이렉트 = 집을 나갔다가 다시 들어오는 것
기존 짐(request 정보)을 밖에 두고 새 짐으로 들어오는 느낌.
🍐 포워드 (forward)
개념
서버 내부에서 페이지를 옮겨주는 방식
기존의 request 객체를 그대로 유지하며 페이지를 제공
속성(request.setAttribute)으로 보낸 데이터가 잘 도착한다.
URL이 바뀌지 않는다.
사용
게시글 목록을 가져와 JSP에 넘길 때
로그인 성공 후 사용자 정보를 JSP에 넘길 때
데이터를 JSP에 전달해야 할 때 무조건 포워드
request.setAttribute("list", list);
RequestDispatcher rd = request.getRequestDispatcher("list.jsp");
rd.forward(request, response);
포워드 = 방 안에서 방으로 이동하는 느낌
집 안에서 이동하니 가방(request 정보)을 그대로 들고 이동한다.
컨트롤러 하단에 포워드가 있으면 전달할 데이터가 있구나 할 수 있음
RequestDispatcher rd = ...
rd.forward(request, response);
이런 코드가 있으면 아, 이 컨트롤러가 JSP로 데이터 넘기네! 하고 바로 알 수 있음.
반대로
java
코드 복사
response.sendRedirect("xxx");
이게 있으면 데이터 전달 없이 페이지 이동하는 중이구나! 하고 이해할 수 있음.
리다이렉트 (redirect) 포워드 (forward)
| request 유지 | ❌ 새로 생성 | ✔ 유지 |
| URL 변화 | ✔ 바뀜 | ❌ 그대로 |
| 속성 전달 | ❌ 전달 안 됨 | ✔ 가능 |
| 사용 상황 | 데이터 전달 필요 없음 | 데이터 전달 필요 |
| 코드 | sendRedirect() | forward() |
'JSP' 카테고리의 다른 글
| 🍍 JSTL | 리스너 | 에러페이지 설정 | 필터 Filter (0) | 2025.11.21 |
|---|---|
| requset | session | application | response (0) | 2025.11.20 |
| setAttribute( )!! request와 같이 사용하기 (0) | 2025.11.20 |
| Controller의 useBean과 setProperty 그리고 request (0) | 2025.11.19 |
| 이클립스 코드 JSP로 변경해보기 - 로그인 Controller 부분1 (0) | 2025.11.18 |