본문 바로가기
Spring 프레임워크/메모

[ Spring ] redirect: 와 forward:

by Hwanii_ 2023. 8. 7.
728x90

1.
Spring은 뷰의 이름을 기반으로 (ViewName),
내부적으로 ViewResolver (VR) 을 사용 해서,
해당 뷰를 찾아내고 랜더링 한다.
 
2.
Redirect :
redirect: 를 사용 한다.
 
경로 앞에 redirect: 를 명시하면,
새로운 페이지로 이동하며, URL이 변경 된다.
따라서, 데이터를 유지 하지 않는다.
 
데이터를 URL의 매개변수나 세션을 통해 전달 할 수 있다.
 
3.
Forward :
redirect: 를 사용 하지 않는다.
(디폴트가 forward: 라서 굳이 forward: 를 명시해 주지 않아도 된다)
 
경로 앞에 아무것도 명시되어 있지 않으면,
디폴트가 forward 방식이라,
forward: 가 붙어 있는것과 동일 하다.
 
서버 내에서 다른 뷰로 포워딩 처리 해서 데이터를 유지 한다.
 
 
redirect: 를 붙힌 경우 ~
 

 

 
.do 에서
 

 
.jsp 로 변경 됨.
 
사용자는 insertBoard.do로 요청을 보냈지만,
redirect: 가 붙어 있기 때문에,
새로운 페이지를 열게 된다.
즉, 마지막 redirect: 뒤에 적혀 있는 경로가 URL에 나오게 된다.
 
 
 
forward: 인 경우 ~
 

 

 
.do 에서
 

 
계속 .do 인것을 확인 할 수 있다.
 
즉, redirect: 가 없어서, URL이 변경 되지 않고,
사용자의 요청이 insertBoard.do 였으니까,
insertBoard.do 로 URL이 유지 되어 있는 모습을 확인 할 수 있다.
 
4.
예시)
 

 
위의 코드는 main.jsp 내부에 작성된 코드 이다.
 
C으로부터 넘겨 받아야할 데이터가, 
 
1) searchMap
2) datas
 
가 있다.
 
Controller 파트 코드를 보자.
 

 
위의 코드는 MainController 내부에 작성된 코드 이며,
 
마지막 55번째 라인을 보면, 현재 redirect: 가 붙어져 있는 모습을 볼 수 있다.
 
이는, 위에서 아래와 같이 정리 했다.
 
경로 앞에 redirect: 를 명시하면,
새로운 페이지로 이동하며, URL이 변경 된다.
 
따라서, redirect: 가 붙으면, 데이터를 드랍하여 V로 가게 된다.
 

 
이렇게 HashMap 데이터도 드랍됬고,
 

 
게시글 데이터도 드랍 되어 버렸다.
 

 
경로에, redirect: 를 삭제 하고 재컴파일 하면 ~
 

 
데이터가 잘 넘어온 모습을 확인 할 수 있다.
 
5)
예시)
 

 
무언가 에러로 인해, 게시글 삭제가 안됬을 경우,
flag가 false 가 되므로,
else 문으로 들어오게 되고,
detailBoard.do 로 경로를 보내게 되면,
redirect: 가 없으니,
데이터를 유지한채로 페이지 이동을 하게 된다.
 
[ 참고 ]
 
View 에서 어느 경로로 사용자가 요청을 하면,
들고갈 데이터가 있던지 없던지 간에,
무조건 redirect 방식 이다.
그래서 데이터가 있다고 하면,
사용자의 요청에 따른 경로로 데이터가 1회성으로 전송되고 소멸 된다.
 

 


그리고, 헷갈리지 말자.
Controller 에서 View 로 데이터를 전송 할 때에는,
무조건 redirect: 를 사용 하지 않아야 한다.
 
 
 
 
 
 

반응형