반응형
<%@ page contentType = "text/html; charset=UTF-8" %>
<%@ page buffer="8kb" autoFlush="false" %>
<%-- 8kb 가 default 값 , autoFlush가 false면 다 꽉차면 에러가 난다 default 값은 True
out 객체는 일단 버퍼에 저장후에 출력된다.
--%>
<html>
<head><title>버퍼 정보</title></head>
<body>
버퍼 크기: <%= out.getBufferSize() %> <br>
남은 크기: <%= out.getRemaining() %> <br>
auto flush: <%= out.isAutoFlush() %> <br>
</body>
</html>
JSP페이지는 결과를 곧바로 웹 브라우저에 전송하지 않고, 출력 버퍼에 임시로 출력 결과를 저장했다가
한번에 웹브라우저에 전송합니다.
그에 따른 여러 장점이 있습니다. 그 중 하나가 성능이 향상되는데,
그 이유는 한번에 큰 단위로 데이터를 전송하는 것이 가능하기 때문에
네트워크를 비롯한 모든 데이터 교환에서는 작은 단위를 여러 차례 보내는 것보다
큰단위로 한번에 묶어서 보내는 것이 더 높은 성능을 내기 때문입니다.
지시문으로 Buffer를 설정할 수 있는데요
<%@ page buffer="8kb" autoFlush="false" %>
page지시어의 속성 buffer로 크기를 설정할 수 있고 defualt는 8kb입니다.
autoFlush로 그 만큼 차게 되면 자동으로 출력하면서 내보내줄 수 있습니다.
하지만 위에는 JSP 페이지의 결과를 한 번에 출력할 수 있다고 이야기 했는데 왜 이런짓을 하나요?
만약 웹툰을 본다고 하면 웹툰 전체페이지가 다 전송될 때까지 기다렸다가 볼 수 있으면 그 시간동안 기다려야해요
근데 실질적으로 한번에가 아니라 순차적으로 보여지면서 계속 업로드되면서 우리는 앞에 있는 만화장면을 보잖아요
또한 영상도 한번에 다 전송시킬때까지 기다리는게 아니라 보면서 전송되는 형식이잖아요
이게 버퍼를 채우면 그걸 웹브라우저에 보이게 하는 겁니다.
out.getBufferSize()
버퍼의 크기가 얼마인지
out.getRemaining()
버퍼의 얼마나 찼는지 알 수 있습니다.
out.isAutoFlush()
자동적으로 비워주는지 알 수 있습니다.
<%@ page contentType = "text/html; charset=UTF-8" %>
<%@ page buffer="1kb" autoFlush="false" %>
<html>
<head><title>autoFlush 속성값 false 예제</title></head>
<body>
<% for (int i = 0 ; i < 1000 ; i++) { %>
1234
<% } %>
</body>
</html>
만약 buffer가 꽉찼는데 자동적으로 안 비워주게 되면 버퍼 오버플로우라는 오류가 나옵니다.
<%@ page contentType = "text/html; charset=UTF-8" %>
<%@ page buffer="1kb" autoFlush="True" %>
<html>
<head><title>autoFlush 속성값 true 예제</title></head>
<body>
<% for (int i = 0 ; i < 1000 ; i++) { %>
1234
<% } %>
</body>
</html>
반응형
'[Java] > [JSP, Servlet]' 카테고리의 다른 글
[JSP, Servlet] include file, <jsp:include page> (0) | 2021.07.29 |
---|---|
[JSP, Servlet] forward, sendRedirect (0) | 2021.07.28 |
[JSP, Servlet] getParameter, getParameterValues (0) | 2021.07.28 |
[JSP, Servlet] out.println() (0) | 2021.07.28 |
[JSP, Servlet] 스크립트 태그 (0) | 2021.07.27 |