* 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 페이지 내용 삽입
'자바스프링웹공부(2024) > JSP' 카테고리의 다른 글
2024.09.04.영역객체의 속성과 범위(Scope) (1) | 2024.09.08 |
---|---|
2024.09.02. 주석, form 태그 (0) | 2024.09.08 |