-> 블로그 이전

[JSP] page 디렉티브

2022. 3. 13. 17:52Language`/JSP (Java Server Page)

Page 디렉티브

- JSP 페이지에 대한 설정 정보를 지정할 때 사용

  • 어떤 문서를 생성?
  • 어떤 자바 클래스를 사용?
  • 세션에 참여?
  • 출력 버퍼 존재?
  • ....
<%@ page 속성1="값" 속성2="값2" .... %>
-----------------------------------------------
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.*" %>

 

속성 설명 default 값
contentType JSP가 생성할 문서의 MIME 타입 & 캐릭터 인코딩 지정 text/html
import JSP 페이지에서 사용할 자바 클래스 지정  
session JSP 페이지가 세션을 사용할지 여부 지정 true
buffer JSP 페이지의 출력 버퍼 크기 지정
- "none" = 버퍼 사용 X
최소 8kb
autoFlush 출력 버퍼 가득차면 버퍼 내의 데이터들 자동으로 출력 스트림에 내보내고 비울지 결정
- "true" : 버퍼 내용 웹 브라우저로 내보내고 버퍼 비우기
- "false" : 버퍼 가득차면 에러 발생
true
info JSP 페이지에 대한 설명 입력  
errorPage JSP 페이지 실행 중 에러가 발생하면 그 때 보여지는 페이지 지정  
isErrorPage 현재 페이지가 에러가 발생되면 보여지는 페이지인지 여부
- "true" : 현재 페이지는 에러 페이지
false
pageEncoding JSP 페이지 소스 코드의 캐릭터 인코딩 지정  
isELIgnored "true" : 표현 언어를 그대로 문자열로 처리
"false" : 표현 언어를 지원
false
deferredSyntaxAllowedAsLiteral #{~} 문자가 문자열 값으로 사용되는 것을 허용할지 여부 지정 false
trimDirectiveWhitespaces 출력 결과에서 공백 문자를 제거할지 여부 지정 false

 

1) contentType

<%@ page contentType="~~~~" %>
OR
<%@ page contentType="~~~~; charset=~~~~" %>

- contentType을 지정하지 않을 경우 default 값은 "text/html"이다

- contentType은 JSP가 생성할 문자의 MIME 타입 기입

  • text/html
  • applicaton/json
  • image/jpeg

- charset을 생략할 경우 default 값은 "ISO-8859-1"이다

- 한글로 HTML문서를 구현할 경우 "ISO-8859-1"은 영어/서유럽 문자만 포함하기 때문에 제대로 구현이 안된다

>> 한글로 구현할 경우 charset을 "EUC-KR"/"UTF-8"로 설정해야 한다

 

<%@ page contentType="text/html;charset=iso-8859-1" language="java" %>
<html>
<head>
    <title>현재 시간 알아보기</title>
</head>
<body>
현재 시간 : <%= new java.util.Date() %>
</body>
</html>

- '"iso-8859-1"로 charset을 설정할 경우 한글이 제대로 구현이 안된다

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>현재 시간 알아보기</title>
</head>
<body>
현재 시간 : <%= new java.util.Date() %>
</body>
</html>

- "utf-8"로 지정해야 다국어가 제대로 처리된다

 

 

2) import

- 자바의 여러 클래스를 사용하기 위해서 import 구문을 사용

<%@ page import = "java.util.Calendar" %>
<%@ page import = "java.util.Date" %>
---------------------------------------------
<%@ page import = "java.util.Calendar, java.util.Date" %>
---------------------------------------------
<%@ page import = java.util.*" %>

- 여러개를 import하려면 콤마(,)로 구분해주면 된다

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
    <title>test</title>
</head>
<body>
<%
    Calendar cal = Calendar.getInstance();
%>
오늘 날짜 :
    <%= cal.get(Calendar.YEAR) %>년
    <%= cal.get(Calendar.MONTH) + 1 %>월
    <%= cal.get(Calendar.DATE) %>일
</body>
</html>

 

3) trimDirectiveWhitespaces

- 디렉티브/스크립트 코드로 인해 생성된 불필요한 줄바꿈 공백 문자를 제거할 수 있다

<%@ page trimDirectiveWhitespaces="true" %>

오른쪽이 trimDirectiveWhitespaces = "true"로 적용하고 실행한 결과이다

 

 

4) pageEncoding

Tomcat, Jetty와 같은 WAS 서블릿 컨테이너들은 JSP 코드를 분석하는 과정에서 "어떤 인코딩을 통해서 코드를 작성"하였는지 분석하고 분석을 다하면 해당 인코딩을 통해서 JSP 페이지의 문자들을 읽게된다

 

1. 파일이 BOM(Byte Order Mark)으로 시작할 경우

  1. 기본 인코딩을 사용해서 파일을 전체적으로 읽고, page 디렉티브의 "pageEncoding" 속성을 검색한다
  2. pageEncoding 속성이 값을 가지고 있으면 해당 속성값을 "charSet"으로 사용한다
  3. pageEncoding 속성이 값을 가지고 있지 않다면 "contentType" 속성을 검색하고 이 contentType 속성의 charset을 통해서 인코딩을 지정한다
  4. 위의 과정 모두 해당되지 않는다면 default값인 "ISO-8859-1"을 사용한다

 

2. 파일이 BOM으로 시작하지 않을 경우

  1. BOM을 통해서 결정된 인코딩을 이용해서 파일을 읽고, page 디렉티브의 pageEncoding 속성을 검색한다
  2. pageEncoding != 결정된 인코딩이라면 에러가 발생한다

3. (1) / (2)의 과정을 통해서 결정된 charset을 통해서 JSP 소스코드를 읽는다