JSTL에서 <fmt:requestEncoding> 태그는 웹 애플리케이션으로 데이터를 다시 전송(post)하는 폼이 사용하는 인코딩 방식을 지정할 때 사용됩니다.
<fmt:requestEncoding> 태그의 속성
<fmt:requestEncoding> 태그는 다음과 같은 속성을 가집니다.
| 속성 | 설명 | 필수 여부 | 기본값 |
|---|---|---|---|
| key | 요청 파라미터를 디코딩할 때 적용하려는 문자 인코딩의 이름입니다. | 예 | 없음 |
사용 시점과 필요성
<fmt:requestEncoding> 태그는 폼에서 전송된 데이터를 디코딩하기 위한 문자 인코딩을 지정하고자 할 때 사용합니다. 이 태그는 ISO-8859-1과 다른 문자 인코딩을 사용할 때 반드시 필요하며, 대부분의 브라우저가 요청에 Content-Type 헤더를 포함하지 않기 때문에 이 태그가 필수적입니다.
이 태그의 목적은 요청(request)의 콘텐츠 타입(content type)을 지정하는 것입니다. 응답 페이지의 인코딩이 page 디렉티브의 contentType 속성으로 이미 지정되어 있더라도 콘텐츠 타입을 명시해야 합니다. 그 이유는 실제 응답의 로케일(그리고 따라서 문자 인코딩)이 page 디렉티브에 지정된 값과 다를 수 있기 때문입니다.
만약 페이지에 I18N 지원 포매팅 액션(예: <fmt:setLocale>)이 포함되어 있어 ServletResponse.setLocale() 메서드를 호출함으로써 응답의 로케일(및 문자 인코딩)을 설정한다면, page 디렉티브에 지정된 인코딩은 무시되고 덮어쓰여집니다.
사용 예제
다음은 <fmt:requestEncoding> 태그를 활용하여 UTF-8 인코딩을 지정하는 예제 코드입니다.
<%@ taglib uri = "https://java.sun.com/jsp/jstl/core" prefix = "c" %>
<%@ taglib uri = "https://java.sun.com/jsp/jstl/fmt" prefix = "fmt" %>
<html>
<head>
<title>JSTL fmt:message Tag</title>
</head>
<body>
<fmt:requestEncoding value = "UTF-8" />
<fmt:setLocale value = "es_ES"/>
<fmt:setBundle basename = "com.tutorialspoint.Example" var = "lang"/>
<fmt:message key = "count.one" bundle = "${lang}"/><br/>
<fmt:message key = "count.two" bundle = "${lang}"/><br/>
<fmt:message key = "count.three" bundle = "${lang}"/><br/>
</body>
</html>위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Uno Dos Tres
이처럼 <fmt:requestEncoding> 태그는 한글이나 기타 비 ASCII 문자가 폼 데이터에 포함될 때 문자가 깨지는 문제를 방지하는 데 유용하게 활용됩니다. 특히 UTF-8 환경에서 다국어 입력을 처리하는 JSP 애플리케이션이라면 요청 인코딩을 일관되게 지정하는 것이 좋습니다.