📕🐘 도로락 - 코끼리를 냉장고에 넣는 방법
Servlet&Jsp | 2018. 2. 6. 08:00

[서블릿/JSP] JSP pageEncoding 속성에 대하여

pageEncoding 속성

JSP page 디렉티브의 속성 중 pageEncoding 속성이 있습니다.

이 속성은 JSP 소스 파일이 저장될 시 사용될 인코딩을 지정하며 JSP 컨테이너는 JSP를 Servlet으로 파싱하는 과정에서 분석을 하게 되는데, 이 때 어떤 인코딩을 통해 작성했는지 검사하고 해당 캐릭터 셋을 이용하여 JSP 페이지의 소스를 읽어 들여 파싱합니다.

당연히 잘못된 pageEncoding 값이 사용되는 경우 JSP 페이지에서 사용되는 일부 문자열들이 깨질 수 있습니다.

JSP 스펙에는 컨테이너가 JSP 페이지를 읽어들이는 과정을 다음과 같이 설명하고 있습니다.

  1. 파일이 BOM으로 시작하는 경우
  2. 파일의 BOM을 이용해서 인코딩을 판단하고, 해당 인코딩을 이용하여 JSP 페이지를 읽어 들입니다.
  3. 이후 page 디렉티브의 pageEncoding 속성을 검사하는데 만약 BOM의 인코딩과 pageEncoding 속성의 인코딩이 다른 경우 에러가 발생합니다.

  4. 파일이 BOM으로 시작하지 않는 경우

  5. 먼저 파일을 읽어야 하기 때문에 기본 인코딩으로 파일을 처음부터 읽습니다.
  6. pageEncoding 속성을 검사하고 인코딩 속성 값이 있다면 해당 속성값의 캐릭터셋으로 파일을 읽습니다.
  7. pageEncoding 속성값이 없는 경우 contentType 속성을 검사하고 contentType 속성값의 캐릭터셋으로 파일을 읽습니다.
  8. 파일이 ASCII 문자로만 작성된 경우 pageEncoding, contentType 속성이 아닌 ISO-8859-1 캐릭터 셋으로만 파일을 읽습니다.

pageEncoding 속성이 없는 경우 contentType 속성값을 사용하므로 두 속성중 하나라도 인코딩 값을 제대로 설정해 주어야 합니다.

한글을 사용하는 경우 한글은 UTF-8, EUC-KR 등의 인코딩에서 모두 사용 가능하므로, 다음과 같이 JSP 소스는 EUC-KR로 작성 후 응답 결과는 UTF-8로 보내도록 설정할 수 있습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="EUC-KR"%>

<html>
<head>
<title>Insert title here</title>
</head>
<body>
안녕 월드!
</body>
</html>

BOM

https://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8_%EC%88%9C%EC%84%9C_%ED%91%9C%EC%8B%9D

주의할점

JSP 페이지를 작성할 때 page 디렉티브의 인코딩 설정 이외에도 이클립스 등의 IDE 기본 파일 저장 인코딩 설정 및 클라이언트인 브라우저의 인코딩 설정 또한 주의해야 합니다.

도로락

도로락

Writer

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그