폼 형식의 문서를 작성 후에 서버로 보낸다고 가정해보자 (HTTP Form Post 방식). 폼 형식의 데이터를 서버에서 받으면 곧바로 다른 페이지로 리다이렉트 한다. 이 때 새로운 HTTP GET 요청을 시작하는 것이기 때문에 수행된 모델 데이터는 모두 소멸된다. 그렇다면 어떻게 리다이렉트를 할 때 데이터를 전달할 수 있을까?
GET의 파라미터 형식으로 정보를 전달한다는 특징을 이용하면 된다.
GET/servlet/helloServlet?userId=hello
하지만 중요한 정보가 URL에 그대로 노출된다는 문제점이 있고, 스프링은 이를 해결하기 위해 RedirectAttirbutes 클래스를 제공한다.
RedirectAttribute는 리다이렉트가 발생하기 전에 모든 없어질만한 속성을 세션에 복사한다. 리다이렉션 이후에는 복사된 정보들을 세션에서 모델로 이동시킨다. 헤더에 파라미터를 붙이지 않기 때문에 URL에 노출되지 않아 안정성이 더 보장된다.
[추가 설명]
새로운 요청이 발생할 때 HttpServletRequest 객체는 소멸 후 새롭게 생성되며, HttpSession 객체는 그대로 유지된다. 즉, HttpServletRequest는 웹 브라우저에서 정보를 요청할 때 생성되고, 객체 안에 정보들이 저장된다. 이 객체가 새로 생성되기 때문에 이전의 정보가 사라지는 것이고, HttpSession의 경우 유지가 되기 때문에 RedirectAttribute는 이를 이용하여 정보들을 임시 저장하고 모델에 다시 이동시킬 수 있는 것이다.