- 들어가기 전에
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 |
댓글