1. 웹 브라우저에서 Servlet1에게 요청을 보냄
2. Servlet1은 요청을 처리한 후, 그 결과값을 HttpServletRequest에 저장. (Servlet1이 모든 일을 혼자 처리하지 않는다)
3. Servlet1은 결과가 저장된 HttpServletRequest와, 응답을 위한 HttpServletResponse를 같은 웹 어플리케이션 안에 있는 Servlet2에게 넘겨준다 (⇒ forward)
4. Servlet2는 Servlet1으로 부터 받은 HttpServletRequest와 HttpServletResponse를 이용하여 요청을 처리한 후, 웹 브라우저에게 결과를 전송
물론 여기서 forward를 꼭 Servlet과 Servlet 사이에서만 할 수 있는 것은 아니다! 뒤에서 Servlet과 JSP 사이의 forward도 살펴보자.
redirect는 서버가 클라이언트에게 요청을 받아 어떤 일을 처리한 뒤, 클라이언트에게 다시 요청할 곳을 알려주고 클라이언트에 의해 새로운 요청이 발생한다.
반면 forward는 다른 Servlet에게 추가적인 처리를 맡기는 것이다. 클라이언트 입장에서는, Servlet1이 모든 것을 다 처리했는지, 아니면 일부분을 Servlet2에게 위임했는지 여부는 알 필요가 없다. 그래서 forward가 처리된 다음에도 url은 바뀌지 않고 초기 요청한 그대로 유지된다.
클라이언트가 서버에 요청하게 되면, WAS는 HttpServletRequest 객체와 HttpServletResponse 객체를 만든다.
Redirect는 요청이 여러 번 왔다갔다 하므로, 한번 요청할 때마다 새로운 Request와 Response 객체가 만들어진다.
반면 Forward는 새로운 요청이 추가되는 것이 아니므로, 각각의 객체가 한번만 만들어진다. 즉, 요청이 들어와서 응답을 할 때까지 Request와 Response 객체는 계속 유지되고 있는 상태다.
결국 가장 큰 차이점은, "Request가 하나인지, 서로 다른 여러가지인지"가 다르다는 것이다.
그럼 이제 예제 코드를 살펴 보자.
Servlet과 JSP의 연동
Servlet은 프로그램 로직을 구현하기에는 편리하지만, HTML 태그를 출력하기엔 불편하다.
반면 JSP는 프로그램 로직을 구현하기에는 좀 불편하지만, HTML 태그를 출력하기엔 편리하다.
즉 서로의 장단점이 완전히 반대다.
이러한 점을 forward를 이용해 개선할 수 있다.
프로그램 로직이 필요한 부분은 Servlet에서 수행하고, 그 결과를 HTML 페이지를 구현한 JSP로 forwarding하면 된다. (Servlet과 JSP의 연동)
출처: https://starkying.tistory.com/entry/Forward-그리고-Servlet-JSP의-연동 [Random Access Memories]
XML이란 (0) | 2020.09.01 |
---|---|
SVN 이란?(정의) SVN 사용 이유 (0) | 2020.09.01 |
[JAVA] MVC패턴 (1) | 2020.08.16 |
[JAVA] 스택(Stack)란 (0) | 2020.08.13 |
Servlet[서블릿] Request / Response출 (0) | 2020.08.04 |