블로그 이미지
progh2
지루한 것에서 벗어나 재미난 것 속으로 풍덩~☆

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

Notice

Recent Post

Recent Comment

Archive

2020. 3. 10. 04:02 기술문서창고

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");

 

posted by progh2