본문 바로가기
Progamming/BoostCourse

forward

by 동그란 혜주 2019. 1. 21.
  • 들어가기 전에

WAS의 서블릿이나 JSP가 요청을 받은 후, 그 요청을 처리하다가 추가적인 처리를 같은 웹 어플리케이션 안에 포함된 다른 서블릿이나 JSP에게 위임하는 경우가 있다. 이렇게 위임하는 것을 포워드(forward)라고 한다. 이번 시간에는 이러한 포워드에 대해서 좀 더 자세히 알아보도록 하겠다.




  • 학습 목표

1. forward를 이해한다.

2. forward를 사용할 수 있다.




  • 핵심 개념

- RequestDispatcher

- forward()




  • forward란?

1. 웹 브라우저에서 Servlet1에게 요청을 보낸다.

2. Servlet1은 일정한 부분의 요청을 처리한 후, 그 결과를 HttpServletRequest에 저장

3. Servlet1은 결과가 저장된 HttpServletRequest와 응답을 위한 HttpServletResponse를 같은 웹 어플리케이션 안에 있는 Servlet2에게 전송(forward)

4. Servlet2는 Servlet1로부터 받은 HttpServletRequest와 HttpServletResponse를 이용하여 요청을 처리한 후 웹 브라우저에게 결과 전송 


- redirect : 클라이언트가 서버에게 요청을 보내고, 그러면 이 서버는 어떤 일들을 처리하고 다시 클라이언트에게 새로운 요청을 할 곳을 알려주면서 다시 요청하는 것. 그래서 리다이렉트의 결과는 실제 실행한 다음에 url 주소가 바뀜

- forward : 클라이언트는 요청을 보냈다. 그런데 서버쪽에서 그 요청에 대해서 혼자 처리하는 것이 아니라 다른 누군가, back한테 처리를 맡기는 것. 이때 클라이언트는 요청받은 Servlet1이 혼자서 다 처리해서 응답을 했는지, 아니면 다른 누군가에게 부탁해서 처리를 했는지 여기까지는 전혀 알 필요가 없다. 그래서 포워드가 실행된 다음에는 url이 바뀌지 않는다.

· 이 차이점이 중요한 이유 : 실제 클라이언트가 서버에게 요청을 하게 되면 반드시 생성되는 request, response라는 객체가 존재한다. 클라이언트가 서버에게 요청을 보내면 이 WAS는 요청을 담당하고 있는 request 객체와 응답을 담당해줄 response라는 객체를 만든다. 이 요청이 응답할 때까지 request와 response라는 객체는 계속 유지가 되고있는 상태이다. 포워드 같은 경우에는 요청이 한 번이기 때문에 request와 response 객체가 한 번 만들어지는 것이다. 그런데 리다이렉트 같은 경우에는 요청이 여러번 왔다갔다 하기 때문에 각각의 요청은 서로 다른 요청이다. 따라서 새로운 request, response 객체가 만들어지는 것이다.

- forward에서 Servlet1에서 처리한 결과를 Servlet2에서 또 사용해야 된다면 이 결과를 request 객체에 저장을 해야한다. forward에서는 응답이 나갈때까지 request 객체가 사라지지 않기 때문에 필요한 정보를 담아서 보낼 수 있음.


* forward에서 RequestDispatcher로 보낼 때에는 반드시 /로 시작하는 경로, 같은 웹 어플리케이션 안에서만 가능함.




  • Forward 실습

- 다음의 2개의 서블릿을 작성 : FrontSerlvet, NextServlet

- http://localhost:8080/firstweb/front

· 위의 URL이 호출되면 FrontServlet이 실행된다. FrontServlet에서는 랜덤한 주사위 값을 구하고, 그 값을 NextServlet에게 forward. NextServlet에서는 FrontSerlvet으로부터 전달받은 주사위 값만큼 "hello"를 출력하는 프로그램


'Progamming > BoostCourse' 카테고리의 다른 글

scope란?  (0) 2019.01.21
servlet & jsp 연동  (0) 2019.01.21
redirect  (0) 2019.01.21
JSP 내장객체  (0) 2019.01.21
JSP 문법  (0) 2019.01.21

댓글