본문 바로가기

study/jsp, servlet ...

redirect, forward + servlet, jsp

먼저 서블릿과 JSP에 대한 글을 읽고 오면 이해하기 쉽다

servlet : jang-sn.tistory.com/49

jsp : jang-sn.tistory.com/50

 

redirect

  • 리다이렉트는 HTTP로 정해진 규칙이다.
  • 클라이언트가 서버에게 요청을 하면, 응답으로 새롭게 요청할 특정 URL을 전달해서 새로운 요청을 하게 한다. 이것을 리다이렉트라고 한다.
  • 이때 서버의 응답에는 상태 코드 302와 헤더 내 Location 값에 리다이렉트 할 URL을 추가한다.
  • 클라이언트는 상태코드가 302인 리다이렉트 응답을 받으면 Location의 값으로 재요청을 한다. -> 새로운 요청을 하게 된다. 그래서 URL 주소가 바뀌게 된다.
  • 리다이렉트 하는 서블릿(JSP)는 리다이렉트를 하기 위해 HttpServletResponse 클래스의 sendRedirect() 메소드를 실행한다. 메소드의 인자 값에는 리다이렉트 할 서블릿(JSP)의 경로를 넣는다.
  • 리다이렉트의 특징은 클라이언트가 서버에게 요청을 여러번 하게 된다. 그래서 WAS에서도 요청, 응답 객체가 여러 번 생긴다.

redirect

 

forward의 과정

  1. 클라이언트가 서블릿A 에게 요청을 보낸다.
  2. 서블릿A는 요청을 처리한 후 , 그 결과를 HttpServletRequest 객체에 저장한다. -> request.setAttribute() 메소드를 통해 객체에 결괏값을 저장한다. 인자 값으로는 데이터의 이름(String), 데이터(Object)를 전달한다. 데이터는 Object 타입으로 형변환되어 전달된다. -> 이런 과정 때문에 동일한 데이터를 다른 서블릿에서 처리할 수 있다.
  3. 결과가 저장된 request 객체와 응답 결과를 위한 response 객체를 같은 웹 어플리케이션 안에 있는 다른 서블릿B(JSP)에게 전달한다. 이것이 forward이다. -> request.getRequestDispatcher() 메소드로 RequestDispathcer 객체를 얻어낸다. 인자 값으로는 이 객체들을 넘겨줄 서블릿(JSP)의 경로를 넘긴다. 그리고 생성된 RequestDispatcher의 forward(request, response) 메소드로 요청, 응답 객체를 전달한다. -> 클라이언트는 WAS에게 한 번의 요청을 했기 때문에, 요청, 응답 객체는 한 번만 생성된다. 그래서 다른 서블릿(JSP)에게 처리를 맡기려면 생성된 객체를 전달해야 한다. -> 클라이언트의 URL 주소가 바뀌지 않는다.
  4. 서블릿B는 서블릿A로부터 받은 HttpServletRequest, HttpServletResponse 객체를 이용하여 요청을 처리하고, 클라이언트에게 결과를 전송한다. -> 받은 응답 객체로는 request.getAttribute(데이터 이름) 메소드를 통해 저장된 값을 가져올 수 있다. Object 타입으로 전달받기 때문에 형변환이 필요하다.

forward

 

redirect는 클라이언트가 WAS에게 여러번 요청을 한다. 따라서 요청, 응답 객체가 여러 개가 생긴다.

forward는 클라이언트가 WAS에게 1번 요청한다. 따라서 요청, 응답 객체는 1개가 생긴다.

 

 

forward는 서블릿과 JSP를 연동할 때 사용된다.

  • 서블릿은 프로그램 로직을 작성하기 유리하다. 자바 파일이기 때문에 편집이 더 쉽다.
  • JSP는 HTML 코드를 작성하는데 유리하다. 바로 결과가 출력되기 때문에
  • 따라서 프로그램 로직은 서블릿, HTML 결과 출력은 JSP에서 하는 것이 유리하다.
  • 서로 유리한 점을 이용하기 위해 클라이언트의 처리, 프로그램 수행은 서블릿에서 하고 그 결과를 JSP에게 forward해서 결과를 출력한다.

Servlet과 JSP의 연동

'study > jsp, servlet ...' 카테고리의 다른 글

표현 언어 - EL(Expession Language)  (0) 2021.03.16
scope  (0) 2021.03.09
JSP  (0) 2021.03.02
Servlet  (0) 2021.02.26
WAS  (0) 2021.02.24