page 디렉티브는 JSP 페이지에 대한 정보를 입력하기 위해 사용된다.
JSP 페이지가 어떤 문서를 생성하는지, 어떤 자바 클래스를 사용하는지, 세션에 참여하는지,
출력 버퍼의 존재 여부 등 JSP 페이지를 실행하는 데 필요한 정보를 입력할 수 있다.
예)
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.Date" %>
page 디렉티브의 주요 속성
속성 |
설명 |
기본값 |
contentType |
JSP가 생성할 문서의 MIME 타입과 캐릭터 인코딩을 |
text/html |
import |
JSP 페이지에서 사용할 자바 클래스 지정한다. |
|
session |
JSP 페이지가 세션을 사용할 지 여부 지정한다. false 일 경우 세션을 사용하지 않는다. |
true |
buffer |
JSP 페이지의 출력 버퍼 크기를 지정한다. none 일 경우 출력 버퍼를 사용하지 않는다. 8kb 일 경우 8kb 크기의 출력 버퍼를 사용한다. |
최소 8kb |
autoFlush |
출력 버퍼가 다 찼을 경우 자동으로 버퍼 내용을 출력 스트림에 보내고 비울지 여부를 지정한다. true 인 경우 버퍼 내용을 브라우저에 보낸 후 버퍼를 비운다 false 인 경우 에러를 발생시킨다. |
true |
info |
JSP 페이지에 대한 설명을 입력한다. |
|
errorPage |
JSP 페이지 실행 도중 에러 발생 시 보여줄 페이지를 지정한다. |
|
isErrorPage |
현재 페이지가 에러 발생 시 보여주는 페이지 인지 |
false |
pageEncoding |
JSP 페이지 소스 코드의 캐릭터 인코딩을 지정한다. |
|
isELIgnored |
true : 표현 언어를 해석하지 않고 문자열로 처리 false : 표현 언어를 지원한다. |
false |
deferredSyntaxAllowedAsLiteral |
#{ 문자가 문자열 값으로 사용되는 것을 허용할 지 여부 결정 |
false |
trimDirectiveWhitespaces |
출력 결과에서 템플릿 텍스트의 공백 문자를 제거할 지 여부 결정 |
false |
1. contentType 속성
JSP 페이지가 생성할 문서의 타입을 지정한다.
contentType 속성의 값 구성
TYPE 또는 TYPE; charset=캐릭터 셋
- TYPE 의 값으로는 MIME 타입의 값을 사용한다.
"text/html", "text/xml", "application/json" 등..
* MIME (Multipurpose Internet Mail Extensions)
메일 뿐만 아니라 HTTP 에서 응답 데이터의 내용을 설명하기 위해 사용된다.
- ; charset="캐릭터셋" 부분은 생략할 수 있다.
생략 시 기본 캐릭터 셋 값인 ISO-8859-1 을 사용하게 된다.
만약 한글을 표현하려면 euc-kr 또는 utf-8 을 사용해야 한다.
(캐릭터 셋은 대소문자를 구분하지 않는다. utf-8 = UTF-8)
- 캐릭터 셋을 올바르게 입력하지 않으면 응답 결과에서 글자가 깨질 수 있다.
소스 코드 저장 시 사용한 캐릭터 인코딩 (UTF-8) 과, page 디렉티브의 contentType 속성에 지정한
캐릭터 셋(ISO-8859-1) 이 다르면 글자가 깨질 수 있다.
따라서 소스 코드를 저장 시 사용하는 캐릭터 인코딩과 contentType 의 캐릭터 셋은 동일해야 한다.
2. import 속성
자바 클래스의 완전한 이름 대신 단순 이름을 사용하기 위해 import 구문을 사용한다.
완전한 이름 (패키지 명 까지 기술) : java.util.Calendar
단순한 이름 (클래스 명만 기술) : Calendar
예)
<%@ page import="java.util.Calendar" %>
<%@ page import="java.util.Date" %>
- import 속성의 값으로 여러 타입을 지정할 수도 있다. ( , 콤마로 구분한다.)
<%@ page import="java.util.Calendar, java.util.Date" %>
- 패키지 이름 뒤에 별표( * ) 를 사용하면 해당 패키지의 모든 타입(클래스)을 단순 이름으로 사용할 수 있다.
<%@ page import="java.util.*" %>
3. trimDirectiveWhitespaces 속성 (공백 처리)
디렉티브나 스크립트 코드로 인해서 만들어진 줄바꿈 공백 문자를 제거하는 기능이다.
JSP 페이지를 소스 보기 하면 첫 줄에 공백이 생기는 걸 볼 수 있다.
<!-- 공백 생김!! -->
<!doctype html>
<head><title>현재 시간</title></head>
<body>
현재 시간 : ~~~
</body>
</html>
공백의 자리는 아래 page 디렉티브가 있던 위치에서 만들어진다.
<%@ page contentType="text/html; charset=utf-8" %>
trimDirectiveWhitespaces 속성 값을 true 로 지정하면 디렉티브로 인해 발생한 공백 문자가 응답 결과에
포함되지 않는다.
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page trimDirectiveWhitespaces="true" %>
<!doctype html>
<head><title>현재 시간</title></head>
<body>
현재 시각 : <%= new java.util.Date() %>
</body>
</html>
4. JSP 페이지 인코딩, pageEncoding 속성
톰캣과 같은 웹 컨테이너는 JSP 코드를 분석하는 과정에서 어떤 인코딩을 이용해서 코드를 작성했는지 검사하며,
그 결과로 선택한 캐릭터 셋을 이용해서 JSP 페이지의 문자를 읽어온다.
- 웹 컨테이너가 JSP 페이지를 읽어올 때 캐릭터 셋 결정 과정
① 파일이 BOM 으로 시작하지 않을 경우 ( pageEncoding - contentType - ISO-8859-1 순서 )
-1. 기본 인코딩으로 파일을 처음부터 읽고, page 디렉티브의 pageEncoding 속성을 검색한다.
(단, pageEncoding 속성을 찾기 이전에 ASCII 문자 이외의 글자가 포함되어 있지 않아야 적용된다.)
-2. pageEncoding 속성이 값을 가지고 있다면, 파일을 읽을 때 해당 속성 값을 캐릭터 셋으로 사용한다.
-3. pageEncoding 속성이 없다면, contentType 속성을 검색한다.
contentType 속성이 존재하고, charset 을 통해 지정되어 있다면, charset의 캐릭터 셋 값을 사용한다.
(단, contentType 속성을 찾기 이전에 ASCII 문자 이외의 글자가 포함되어 있지 않아야 적용된다.)
-4. 모두 해당되지 않을 경우 ( pageEncoding X, contentType X )
ISO-8859-1 을 캐릭터 셋으로 사용한다.
② 파일이 BOM 으로 시작할 경우 ( pageEncoding )
-1. BOM을 이용해서 결정된 인코딩을 이용해서 파일을 읽고, page 디렉티브 pageEncoding 속성을 검색한다.
-2. pageEncoding 속성의 값과 BOM 을 이용해서 결정된 인코딩이 다르면 에러가 발생한다.
* BOM (Byte Order Mark)
UTF-8, UTF-16 등 유니코드 인코딩에서 바이트의 순서가 리틀 엔디언 / 빅 엔디언 인지 여부를 알려주는
16비트(2byte) 값이다.
따라서 pageEncoding 속성을 지정하지 않은 상태에서 contentType 속성의 charset 값을 잘못 지정한다면,
잘못된 인코딩을 이용해서 파일을 읽어올 수 있게 되고 문자가 깨져서 출력될 수 있다.
- pageEncoding 속성에 지정한 인코딩과 contentType 속성에 지정한 인코딩이 서로 다를 수 있다.
만약 JSP 파일은 UTF-8로 작성하고, 응답 결과는 EUC-KR 로 생성하고 싶다면,
pageEncoding="utf-8", contentType="text/html; charset="euc-kr" 로 지정하면 된다.
따라서 JSP 파일 자체에서는 pageEncoding 이 우선순위가 높고,
응답 결과로 받을 시의 인코딩은 contentType 으로 지정하게 된다.
'JSP > 2. JSP 페이지 구성 요소' 카테고리의 다른 글
3. JSP - 스크립트 요소 (0) | 2020.09.17 |
---|---|
1. JSP - 페이지 구성 요소 (0) | 2020.09.16 |