[JSP] JSP에서 sendRedirect를 사용못하는이유

Java Webserver에서는 sendRedirect를 사용해서 다른 페이지를 로드할 수 없습니다.

그 이유는 SSI(server side includes)에 제한이 있기 때문입니다.

다음과 같은 이유 때문에 이러한 제한이 있습니다.

일반적으로 servlet은 http 헤더 정보(예: 오류, 상태 등)을 설정하고 데이터를 반환하는 두 가지 방법으로 응답할 수 있습니다.

헤더 정보가 먼저 전송된 후에 내용(예: html 또는 이미지)이 전송됩니다.

SSI의 작동 방식 때문에 SSI에서 사용되는 servlet은 헤더 정보를 설정할 수 없고 내용을 반환하는 기능만 합니다.

ssi에서 ...
브라우저가 .shtml 페이지를 요청합니다.
servlet까지의 html은 전송되는 프로세스입니다.
(여기서 헤더 정보와 html 데이터의
첫 번째 부분이 전송됩니다.)
그 다음, servlet은 내용 정보를 반환하는 프로세스입니다.
(초기 html이 전송되었으면
http 헤더가 이미 브라우저로 전송되었기 때문에
여기서 설정하는 헤드는 사용되지 않습니다.)
끝으로 나머지 html이 전송됩니다.
서버 연결이 종료됩니다.

응답 http 헤더를 설정해서(302 "moved temporarily"의 상태 설정 및 새 위치 설정) sendRedirect를 호출하는 경우에는 http 헤더 설정이 필요하므로 작동되지 않습니다.

servlet을 사용해서 브라우저에 redirect를 전송하려면, redirect를 수행하는 servlet을 직접 호출하거나(그리고 html 페이지에 있는 모든 정보를 작성) jhtml 또는 jsp(jsp가 포함된 JWS 버전이 있지만 jsp는 아직 지원되지 않음)를 사용해야 합니다.

댓글

이 블로그의 인기 게시물

[LINUX] CentOS 부팅시 오류 : UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

[MSSQL] 데이터베이스가 사용 중이어서 배타적으로 액서스할 수 없습니다

구글코랩) 안전Dream 실종아동 등 검색 오픈API 소스를 공유합니다. (구글드라이브연동, 이미지 수집 소스)