JSP

페이지 이동 방식 | 리다이렉트 (redirect) 포워드 (forward)

보배 진 2025. 11. 18. 17:27

 

 

 

웹에서 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()