JSP에서 한글 UTF-8로 출력되게 하기 위한 설정들에 대한 글입니다.
출처 : 인프런 실전 JSP(rene2w ver.)
한글처리 (https://www.inflearn.com/course/%EC%8B%A4%EC%A0%84-jsp_renew/lecture/13668)
01. Filter 인터페이스를 구현하여 사용하는 경우
다음과 같이 Filter 인터페이스를 구현한 클래스 파일을 만듭니다. doFilter 안에 들어있는 3줄이 핵심으로 request는 UTF-8로 변경하고, response는 text/html;charset=UTF-8을 적용합니다. 아쉽게도 response에서 request처럼 캐릭터셋만 바꾸게 하면 한글이 깨졌습니다. ContentType으로 지정해주어야 합니다.
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class TempFilter implements Filter {
@Override
public void destroy() {
System.out.println("----filter destroy() ----");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
System.out.println("----filter doFilter() ----");
req.setCharacterEncoding("UTF-8");
res.setContentType("text/html; charset=UTF-8");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("----filter init() ----");
}
}
그리고 다음과 같이 web.xml 에 위에서 만든 필터 클래스 설정을 추가합니다. (패키지가 있다면 filter-class에 패키지명도 포함해서 넣어주세요). 필터 매핑의 url-pattern을 통해서 특정 부분에만 필터가 동작하도록 할 수 있습니다. 서버를 건들지 않기 때문에 깔끔(?)합니다.
<filter>
<filter-name>tempFilter</filter-name>
<filter-class>TempFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>tempFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
02. 기존 옛날 방법(모든 파일마다 세팅해줘야 함)
GET
Tomcat 서버의 server.xml 에 <Connector> 태그에 URIEncoding="UTF-8" 속성을 추가합니다.
<Connector URIEncoding="UTF-8" connectionTimeout ... >
POST
JSP 파일 내에서는 page 지시어 속성 및 meta 태그 charset 속성을 변경합니다. 그리고 만약 넘어온 get/post 파라미터를 가져다 쓸 경우 request의 캐릭터인코딩 속성도 같이 변경해줍니다. 각각의 파일마다 모두 들어가야 합니다.
<% request.setCharacterEncoding("UTF-8"); %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
Servlet에서는 아래와 같이 인코딩들을 세팅해줍니다. 각각의 서블릿 파일이 모두 이 코드를 추가해야 합니다.
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");