본문 바로가기

자바스프링웹공부(2024)/JSP

2024.09.03. response

반응형

* response 객체(HttpServletResponse)

 : JSP 내장객체 중 response 객체(HttpServletResponse)는 HTTP 응답 정보를 관리하는 객체이며
- response 객체의 sendRedirect() 메서드를 호출하여 파라미터로 전달받은 페이지(URL)로 이동 가능
  => 리다이렉트는 일반적인 페이지 이동과 개념이 조금 다르지만 일단 이동한다는 점에서 동일함
  => 기본 문법 : response.sendRedirect("이동할 URL 또는 파일명");

 

- 클라이언트 요청에 대해 서버가 응답하는 데이터에 리다이렉트가 포함될 경우
  응답데이터에 HTTP 상태코드 302를 포함하여 클라이언트 측으로 응답데이터를 전송한다. 
  다만, response.sendRedirect(); 메서드 호출 시점에 즉시 응답데이터를 전송하는 것이 아니라

  다른 데이터까지 모두  응답 데이터로 포함시킨 후에 응답 정보 전체를 클라이언트 측으로 전송함. 
  <-> a href는 바로 가버린다.
  => 응답데이터(상태코드 302)를 수신한 클라이언트는 리다이렉트 UTL에 해당하는 주소를

       요청정보(HTTP요청메시지)에 포함하여 다시 서버측으로 전송한다.
  즉, 클라이언트가 새로운 주소로 새로운 요청을 발생시킨다.
   => 따라서, 302 응답 데이터를 클라이어언트가 수신하는 즉시 새로운 요청을 발생시키므로

       클라이언트측에서는 responseTest1.jsp 페이지의 내용을 확인할 수 없고 리다이렉트된 responseTest2.jsp 페이지의 내용을 최종적으로 보게된다.
- 콘솔창에 System.out.println("리다이렉트 수행"); 출력하면??
  : 리다이렉트 코드(sendRedirect())를 수행하더라도 나머지 다른 자바 코드들까지 서버상에서 모두 실행된 후\

    응답데이터가 전송되므로 이 출력문에 포함된 메세지도 이클립스 콘솔에 출력되어 확인이 가능하다.
- 단, 리다이렉트가포함된 페이지의 HTML 태그 및 자바스크립트 코드들은 클라이언트 측에서 확인 및 실행이 불가능하다.

 

- 또다른 내장객체인 pageContext 객체의 forward() 메서드 호출하여 pageContextTest2.jsp로 이동
  pageContext.forward("pageContextTest2.jsp");
  client : test1.jsp보여줘
  server : 서버가 응답하지 않고 바로 실행 = 화면을 바로 응답함. 중간과정 자체를 서버가 처리하고 결과를 보여줌.
  => 이 때, 최종 클라이언트(웹브라우저)의 주소표시줄 주소는 다음과 같다.
        http://localhost:8080/StudyJSP/jsp04_pageContext/pageContextTest1.jsp (이전 요청 주소가 유지됨)
        대신, 주소는 유지되지만 표시되는 내용은 포워딩 된 새 페이지의 내용이 출력됨
  => 이처럼, 새로운 주소 요청 시 기존 요청 주소가 그대로 유지(변경되지 않음)되고
       새로운 주소에 대한 내용만 응답 데이터로 전달받는 방식을 포워딩(Forwarding) 이라고 함
       (정확히는 디스패치(Dispatch) 방식의 포워딩(Forwarding) 이라고 함)
- pageContext 객체의 include() 메서드는 파라미터로 지정된 페이지의 내용을 현재페이지에 삽입(포함)하는 기능을 수행한다.
       ex) pageContext.include("pageContextTest3.jsp"); // 현재 위치에 pageContextTest3.jsp 페이지 내용 삽입

반응형