Client 로 부터 요청이 들어온 경우 해당 서블릿의 JspWriter 객체에 write() 혹은 print() 하는 내용이 응답으로 전송.
JspWriter out 을 생성한 경우
out 객체에 출력하기 전 미리 저장하기 위해 buffer 를 사용.
이렇게 저장된 버퍼가 비워지는 경우는 다음 두가지다. ( autoFlush 속성이 true 인 경우에 )
1. 버퍼가 다 찼을 때
2. 해당 페이지의 서블릿의 실행을 마쳤을 때
buffer 속성이 none 인 경우 모든 출력은 바로 Client 에게 전송된다.
그럼에도 buffer 를 이용하는 이유!
요청에 대한 결과로 Client 가 받는 응답은 웹 서버가 전송한 HTTP 헤더와 HTTP 본문으로 구성되어 있다.
브라우저는 HTTP 헤더에 근거하여 HTTP 본문 내용을 출력하기 때문에 서버는 HTTP 본문 보다
HTTP 헤더를 먼저 전송해 주어야 한다.
HTTP 헤더를 먼저 전송해 주어야 한다.
응답 내용을 buffer 에 담지 않고 바로 전송하는 경우 전송 도중 Client 에 쿠키를 저장하도록 쿠키
설정 헤더를 포함할 때 Client 가 HTTP 헤더 보다 HTTP 본문을 먼저 받게 되는 문제가 발생하게 된다.
설정 헤더를 포함할 때 Client 가 HTTP 헤더 보다 HTTP 본문을 먼저 받게 되는 문제가 발생하게 된다.
뿐만 아니라 서블릿 실행 도중 run time 오류나 예외가 발생한 경우 이러한 에러 메세지가 그대로
출력된다.
출력된다.
이러한 이유로 JSP 스펙에서는 모든 JSP 컨테이너는 Client 로 응답을 위한 출력 버퍼를 지원하도록 하고 있다.
autoFlush 속성이 false 인 경우 실제 출력 내용이 buffer 속성에서 지정한 크기보다 큰 경우 buffer 내용을
출력하지 않고 예외를 발생시킨다. 그러므로 출력 버퍼의 크기를 예측하기 힘든 경우 autoFlush 속성은
true 로 해야 한다.
출력하지 않고 예외를 발생시킨다. 그러므로 출력 버퍼의 크기를 예측하기 힘든 경우 autoFlush 속성은
true 로 해야 한다.