이전글 에서는, JSP의 구성요소에 대해서 알아보았다.
먼저, JSP가 제공하는 디렉티브 중 page를 먼저 알아보자.
page 디렉티브는 JSP 페이지에 대한 정보를 입력하기 위해서 사용되는데 JSP페이지가 어떤 문서를 생성하는지, 어떤 자바 클래스를 생성하는지, 세션에 참여하는지, 출력 버퍼의 존재 여부와 같이 JSP 페이지를 실행하는 데 필요한 정보들을 입력할 수 있다.
아래의 코드는 page 디렉티브의 작성 예를 보여주고 있다.
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.Date" %>
page 디렉티브의 contentType 속성은 JSP 페이지가 생성할 문서의 타입을 지정한다. contentType 속성의 값은 다음과 같이 구성된다.
TYPE
또는
TYPE; charset=캐릭터 셋
TYPE은 생성할 응답 문서의 MINE 타입을 입력한다. JSP에서 주로 사용되는 MIME 타입으로는 "text/html", "text/xml", "text/plain"이 있다.
'; charset=캐릭터 셋'부분은 생략할 수 있다. 참고로 캐릭터 셋을 입력할 때에는 대소문자를 구분하지 않는다.
JSP 페이지에서 자바의 클래스를 사용하기 위해서는 어떤 자바 클래스를 사용할 것인지 미리 지정해 주어야 하는데, 이럴 때 사용하는 것이 바로 page 디렉티브의 import 속성이다.
<%@ page import="java.util.Date" %>
<%@ page import="java.util.Calendar" %>
<%@ page import="java.util.Calendar, java.util.Date" %>
또는 <%@ page import="java.util.* %>
웹 컨테이너는 JSP 페이지를 분석하는 과정에서 JSP 페이지가 어떤 인코딩을 이용해서 작성되었는지 검사하며, 그 결과로 선택된 캐릭터 셋을 이용해서 JSP 페이지의 문자를 읽어오게 된다.
파일이 BOM으로 시작하지 않을 경우,
a. 기본 인코딩을 이용해서 파일을 처음부터 읽고, page 디렉티브의 pageEncoding 속성을 검색한다.
b. pageEncoding 속성이 값을 갖고 있다면, 속성의 값을 파일을 읽어올 때 사용할 캐릭터 셋으로 사요한다.
c. pageEncoding 속성이 없다면, contentType 속성을 검색한다. contentType 속성이 존재하고 charset을 이용해서 캐릭터 셋을 지정했다면, 파일을 읽어올 때 사용할 캐릭터 셋으올 charset에 지정한 값을 사용한다.
파일이 BOM으로 시작할 경우,
a. BOM을 이용해서 결정된 인코딩을 이용하여 파일을 읽고, page 디렉티브의 pageEncoding 속성을 검색한다.
b. 만약 pageEncoding 속성의 값과 BOM을 이용해서 결정된 인코딩이 다르면 에러를 발생시킨다.
pageEncoding 속성에서 명시한 인코딩과 contentType 속성에서 명시한 인코딩이 서로 다를 수도 있다.