본문 바로가기
☕ Java 웹 프로그래밍/Servlet & JSP

[Servlet&JSP] 한글이 깨지는 문제 해결방법 최종 정리

by 일단연 2023. 5. 26.

* 본 글은 [뉴렉처]의 Servlet&JSP 프로그래밍 강의를 듣고 정리한 글입니다.

 

2020 Servlet&JSP 프로그래밍

 

www.youtube.com

 

 한글이 깨지는 문제 해결방법 최종 정리 

한글이 깨지는 문제의 원인

  1. [GET] 서버가 클라이언트에 response할 때 (서버 문제)
  2. [GET] 서버가 response한 컨텐츠를 클라이언트가 해석할 때 (클라이언트 문제)
  3. [POST] 클라이언트가 서버에 POST 요청을 보낼 때 (클라이언트 문제)

한글이 깨지는 문제 해결

1. [GET] 서버가 클라이언트에 response할 때

  • 서버가 클라이언트에 보내는 response의 인코딩 방식을 결정하는 코드 작성
    • response.setCharacterEncoding("UTF-8");
    • 서블릿을 저장하거나 네트워크를 통해 보낼 땐, 출력도구를 통해 출력 형식이 UTF-8임을 지정
@WebServlet("/매핑주소")
public class 클래스명 extends HttpServlet {
  protected void service(HttpServletRequest request
                        , HttpServletResponse response)
                        throws ServletException, IOException
  {
    response.setCharacterEncoding("UTF-8");
  }
}

 

2. [GET] 서버가 response한 컨텐츠를 클라이언트가 해석할 때

  • 서버로부터 받은 컨텐츠를 클라이언트가 해석하는 인코딩 방식을 결정하는 코드 작성
    • response.setContentType("text/html; charset=UTF-8");
    • 해당 컨텐츠가 HTML 문서이며, 컨텐츠 타입은 UTF-8임을 지정
@WebServlet("/매핑주소")
public class 클래스명 extends HttpServlet {
  protected void service(HttpServletRequest request
                        , HttpServletResponse response)
                        throws ServletException, IOException
  {
    response.setContentType("text/html; charset=UTF-8");
  }
}

 

3. [POST] 클라이언트가 서버에 POST 요청을 보낼 때 (멀티 바이트 문자 전송 문제)

  • 클라이언트가 POST 요청으로 서버에 전달한 값의 인코딩 방식을 지정하는 코드 작성
    • request.setCharacterEncoding("UTF-8");
    • POST 요청으로 전달한 값의 형식이 UTF-8임을 지정
  • 서블릿에 일일이 지정할 필요 없이 필터를 생성해 필터가 작동되기 전에 UTF-8로 지정하는 코드를 작성하면 됨
    • @WebFilter(”/*”)
      • /*: 어떤 요청이 와도 모든 URL 패턴에 필터를 적용
@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request
			, ServletResponse response
			, FilterChain chain)
			throws IOException, ServletException {
		
		request.setCharacterEncoding("UTF-8");
		
		chain.doFilter(request, response);
	}

}