본문 바로가기

JSP/2. JSP 페이지 구성 요소

2. JSP - page 디렉티브 <%@ page %>

 

 

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

현재 페이지가 에러 발생 시 보여주는 페이지 인지
여부를 지정한다.
true : 에러 페이지, false : 에러 페이지가 아님

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