JSP(Buffer/autoFlush 속성)

    반응형

    0. JSP 파일 실행 과정

    1. 서블릿 코드로 변환된 후
    2. 컴파일 되어 class 파일로 만들어진다.
    3. 이를 실행한 결과물을 HTML 형태로 웹 브라우저에 보내 최종적으로 화면에 출력한다.
    • JSP가 생성한 결과는 웹 브라우저로 즉시 전송되는 것이 아니라,
      우선 버퍼에 저장되었다가 일정량이 되었을 때 전송한다.
    • 만약 실행 중 에러가 발생하면 버퍼에 저장된 내용을 삭제하고 에러화면을 표시한다.
    • JSP에서는 버퍼를 사용함으로써
      • 페이지 전달(포워드)
      • 에러 페이지 처리

           를 할 수 있다.

     

    더보기

    * 버퍼 (Buffer)

    버퍼라는 개념은 매우 다양하게 사용된다.

    가장 쉽게 접할 수 있는 곳은 스트리밍 서비스이다.

    네트워크로 데이터를 전송할 때, 작은 단위로 여러번 전송하는 것보다 큰 단위로 한 번에 보내는 것이 효율적이다.

    이를 위해 버퍼라는 임시 저장소를 두어 데이터들이 충분히 쌓일 때까지 기다렸다가 보낸다.

    -> 입력 시 버퍼에 먼저 저장하고, 버퍼가 가득 차면 전송한다.


    1. buffer 속성

    • page 지시어의 buffer 속성으로 버퍼의 크기를 설정할 수 있다.
      default는 8kb이다.
    <%@ page ... buffer="1kb" ...%>

     

    버퍼를 사용하고 싶지 않다면 (이런 경우는 거의 없다)

    <%@ page ... buffer="none" ...%>
    • 버퍼를 사용하지 않으면 포워드나 에러 페이지 기능을 사용할 수 없다.
    • 또한 버퍼 크기를 줄이면 JSP의 기능을 온전히 사용할 수 없게 되므로 거의 사용하지 않는다.

    2. autoFlush 속성

    • 버퍼가 모두 채워졌을 때 처리 방법을 정하는 데에 쓰인다.
    • true(default): 버퍼가 채워지면 자동으로 flush(데이터를 목적지로 전송하고 버퍼 비우기)
    • false: 버퍼가 채워지면 예외를 발생시킨다.

    3. buffer/autoFlush 속성 예제

    <%@ page ... buffer="1kb" autoFlush="false" ... %>

    파일 내에 위와 같은 속성을 지닌 페이지 태그가 있을 때,

    ...
    <%
    for (int i = 1; i <= 100; i++) {
      out.println("abcde12345");
    }
    %>
    ...

    를 통해 10글자 * 100번 (1kb)를 출력하면,

    파일 내 다른 태그들의 크기가 모두 포함되면서 결론적으로 1kb를 넘는다.


    위에서 buffer를 1kb로, autoFlush를 false로 설정했으니

    이 상황에서는 예외가 발생될 것이다.

     


    [Must Have 성낙현의 JSP 자바 웹 프로그래밍] 을 보고 정리한 내용입니다.

    반응형

    댓글