간단하게 코드의 흐름을 생각해보자~

웹 어플리케이션은 브라우저가 서버에 요청을 하게되면 서버가 정보를 분석하고 응답 결과를 생성하여 브라우저로 전달하는 과정을 거친다.
여기에서 서버의 동작은 어떤 분야를 가지고 개발을 하느냐에 따라 달라지게 된다. JSP로 개발을 하면 브라우저의 요청정보를 파일이름으로 판단하고 Servlet으로 개발을 하면 서블릿의 이름으로 판단을 한다.

 

SpringMVC의 경우 요청이 발생하면 요청 주소를 분석하여 그와 매핑되어 있는 메서드를 호출하고 메서드가 반환하는 정보를 토대로 응답결과를 생성하여 클라이언트에게 전달한다.

 

Controller를 통해 요청 주소와 매핑되어 있는 메소드는 반드시 무언가를 반환해야 한다. 우리는 지금까지 문자열, Model, ModelAndView객체를 반환하였다. 

 

 

 

 

1. Redirect

Redirect는 서버가 클라이언트에게 응답결과로 JSP나 HTML같은 데이터가 아니라 요청할 주소를 응답결과로 전달하는 것을 의미한다. 클라이언트는 응답결과로 받은 요청주소를 직접 요청하게 된다. 브라우저가 요청하는 것이므로 주소창의 주소는 변경된다. Redirect는 새로운 요청이 발생하는 것이기 때문에 HttpServletRequest객체는 소멸후 새롭게 생성되며 HttpSession객체는 그대로 유지된다.

 

 

이렇게 반환문에 "redirect:/sub1"; 로 지정하면, 브라우저가 직접 요청하는 것이기 때문에 sub1.jsp가 실행되고 주소창의 주소도 변경된다. 

redirTest를 요청하게 되면 redirTest()메소드가 자동으로 호출되게 되는데 이때 응답결과로 redirTest1.jsp를 반환하는게 아니라, 'sub1을 요청하라'라는 정보를 브라우저에게 전달한다. sub1을 요청하라라는 응답결과를 받은 웹 브라우저는 스스로 sub1을 요청하기 위해서 웹 브라우저의 주소를 sub1으로 변경하게 된다. 이때, 새로운 요청이 발생한것이기 때문에 요청정보를 관리하는 Request객체가 새로 만들어진 것이라고 볼 수 있겠다.

 

 

 

 

2. Forward

Forward는 코드의 흐름을 서버상에서만 이동하는 것이다. 브라우저는 다른 곳으로 흐름이 이동되었다는 것을 알 수 없기 때문에 주소창의 주소는 변경 되지 않는다. HttpServletRequest, HttpSession모두 유지된다.

 

forward를 사용하면 이처럼 주소는 변경되지 않고 client의 요청주소였던 forwardTest에 머물게 되는 것을 알 수 있다.

+ Recent posts