이번엔 내장변수 중 out 내장변수에 대해 알아보겠습니다.

서블릿클래스에서 화면에 출력을 하기 위해서는 println, print 등의 메소드를 호출해야 했습니다.

그러나 JSP페이지는 HTML코드와 익스프레션( <%= .. %> )을 가지고 출력이 가능합니다.

그리고 실제로 HTML코드와 일반 텍스트들은 out객체에 그대로 전달이 됩니다.


outDemo.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>out내장객체(내장변수) 사용해보기</title>
</head>
<body>
<%
    out.println("안녕하세요~");
%>
<br>
out객체를 이용하여서
<%
    out.println("출력해보았습니다.");
%>
</body>
</html>
cs



솔직히 이런식이면 out객체를 사용할 일이 없습니다.

그러면 대체 이 out객체는 언제 사용되는지 궁금합니다.


out객체는 코드가 복잡해질 경우 간단히 표시 할 수가 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>out객체는 이럴때 사용하면 좋아요~</title>
</head>
<body>
<h2>1부터 10까지 출력하기</h2><br>
<% for(int cnt = 1; cnt <=10; cnt++){%>
    <%=cnt%>
<%}%>
</body>
</html>
cs

위와 같이 for문을 사용하는데 for문이 100개가 있다고 가정합시다.

계속 해서 스크립틀릿(<% %>)과 익스프레션(<%= %>) 를 열고 닫아야 됩니다.

아.. 너무 귀찮고 보기에도 복잡해 보일것 같습니다.

이럴때 out객체를 사용해주면 코드가 보기가 편해 집니다.


useOut.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>out객체는 이럴때 사용하면 좋아요~</title>
</head>
<body>
<h2>1부터 10까지 출력하기</h2><br>
<% for(int cnt = 1; cnt <=10; cnt++){
    out.print(cnt+"\t");
}
%>
</body>
</html>
cs

out객체를 사용해 스크립틀릿 내에서 한번에 해결 했습니다.


JSP페이지에서 출력하는 데이터들은 모두 out내장변수를 통하여 출력이 됩니다.

이때 출력할 데이터들을 잠시 버퍼에 저장했다가 한번에 전송을 하는데요.

이 버퍼의 크기는 컨테이너에 따라 다릅니다.

현재 버퍼의 크기를 알아보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>현재 버퍼의 크기</title>
</head>
<body>
<%=out.getBufferSize()%>
</body>
</html>
cs

out객체의 getBufferSize()메소드를 사용하면 현재 버퍼의 크기를 알 수 있습니다

저는 8192라고 나왔습니다. 출력은 byte단위로 해주기 때문에 8kb입니다.


버퍼의 크기는 바꿀 수도 있습니다.

page지시자의 buffer 속성을 이용해서 바꿀 수 있습니다.

버퍼의 크기는 kb단위의 정수로 적어야 하며, 숫자 뒤에는 kb 단위를 붙여주어야 합니다.

저는 2kb로 바꾸어 보도록 하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page buffer="2kb"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>현재 버퍼의 크기</title>
</head>
<body>
<%=out.getBufferSize()%>
</body>
</html>
cs

3번라인을 추가 했습니다


버퍼를 사용하지 않으려면 buffer속성값에 "none"이라고 지정해 주시면 됩니다.


다음 포스팅은 Response 내장변수~