pageEncoding 속성
JSP page 디렉티브의 속성 중 pageEncoding 속성이 있습니다.
이 속성은 JSP 소스 파일이 저장될 시 사용될 인코딩을 지정하며 JSP 컨테이너는 JSP 를 Servlet으로 파싱하는 과정에서 분석을 하게 되는데, 이 때 어떤 인코딩을 통해 작성했는지 검사하고 해당 캐릭터 셋을 이용하여 JSP 페이지의 소스를 읽어 들여 파싱합니다.
당연히 잘못된 pageEncoding 값이 사용되는 경우 JSP 페이지에서 사용되는 일부 문자열들이 깨질 수 있습니다.
JSP 스펙에는 컨테이너가 JSP 페이지를 읽어들이는 과정을 다음과 같이 설명하고 있습니다.
1. 파일이 BOM으로 시작하는 경우
- 파일의 BOM을 이용해서 인코딩을 판단하고, 해당 인코딩을 이용하여 JSP 페이지를 읽어 들입니다.
- 이후 page 디렉티브의 pageEncoding 속성을 검사하는데 만약 BOM의 인코딩과 pageEncoding 속성의 인코딩이 다른 경우 에러가 발생합니다.
2. 파일이 BOM으로 시작하지 않는 경우
- 먼저 파일을 읽어야 하기 때문에 기본 인코딩으로 파일을 처음부터 읽습니다.
- pageEncoding 속성을 검사하고 인코딩 속성 값이 있다면 해당 속성값의 캐릭터셋으로 파일을 읽습니다.
- pageEncoding 속성값이 없는 경우 contentType 속성을 검사하고 contentType 속성값의 캐릭터셋으로 파일을 읽습니다.
- 파일이 ASCII 문자로만 작성된 경우 pageEncoding, contentType 속성이 아닌 ISO-8859-1 캐릭터 셋으로만 파일을 읽습니다.
pageEncoding 속성이 없는 경우 contentType 속성값을 사용하므로 두 속성중 하나라도 인코딩 값을 제대로 설정해 주어야 합니다.
한글을 사용하는 경우 한글은 UTF-8, EUC-KR 등의 인코딩에서 모두 사용 가능하므로, 다음과 같이 JSP 소스는 EUC-KR로 작성 후 응답 결과는 UTF-8로 보내도록 설정할 수 있습니다.
1
2
3
4
5
6
7
8
9
10 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="EUC-KR"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
안녕 월드!
</body>
</html> |
cs |
BOM
주의할점
JSP 페이지를 작성할 때 page 디렉티브의 인코딩 설정 이외에도 이클립스 등의 IDE 기본 파일 저장 인코딩 설정 및 클라이언트인 브라우저의 인코딩 설정 또한 주의해야 합니다.
'Servlet&Jsp' 카테고리의 다른 글
[서블릿/JSP] JSP가 Servlet으로 변환되는 과정 및 규칙 (0) | 2018.02.07 |
---|---|
[서블릿/JSP] page 디렉티브 사용법 및 속성 설명 (0) | 2018.02.06 |
[서블릿/JSP] 이클립스 JSP 페이지 소스 저장시 인코딩 설정으로 인해 저장 안되는 문제 (0) | 2018.02.06 |
[서블릿/JSP] 톰캣 버전에 따른 JSP, Servlet 버전 (0) | 2018.02.05 |
[JAVAEE] 자바빈(JavaBean) 이란? 자바빈 규약에 대해 (2) | 2018.02.05 |