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

[Servlet&JSP] 한글로 된 문서의 컨텐츠 형식 지정하기

by 일단연 2023. 5. 24.

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

 

2020 Servlet&JSP 프로그래밍

 

www.youtube.com

 

Servlet의 출력 형식에 대해 알고 싶다면, 아래의 글을 참고하세요.

[Servlet&JSP] 4일차 | Servlet 출력 형식의 이해

 

한글로 된 문서의 컨텐츠 형식 지정하기 

서블릿 내부에 한글 코드를 작성해 실행하면 깨지는 문제

  • 서블릿 내부에 한글 코드를 작성해 실행하면 깨지는 이유
    • 1) 서버에서 한글을 지원하지 않는 문자코드로 인코딩한 경우
      • 예: 서버에서 ISO-8859-1 단위로 보내면 1byte씩 쪼개서 보내는데 UTF-8은 2byte 단위로 보내짐
    • 2) 서버에서는 UTF-8로 인코딩해서 보냈지만 브라우저가 다른 코드로 잘못 해석한 경우

서블릿 내부에 한글 코드를 작성해 실행하면 깨지는 문제 해결 방법

  • 1) 클라이언트에 보내는 인코딩 방식을 결정하는 코드 작성
    • 서블릿을 저장하거나 네트워크를 통해 보낼 땐, 출력도구를 통해 출력 형식이 UTF-8임을 지정
    //사용자에 보내는 인코딩 방식을 결정
    response.setCharacterEncoding("UTF-8");
    
    • 수정 후 실행 결과

  • 서버의 오류를 해결했으니 클라이언트의 오류를 해결해야 함
    • Response Headers에 컨텐츠가 UTF-8로 읽어저야 함을 심어줘야 함

  • 2) 서버로부터 받은 컨텐츠를 클라이언트가 해석하는 인코딩 방식을 결정하는 코드 작성
    • 해당 컨텐츠가 HTML 문서이며, 컨텐츠 타입은 UTF-8임을 지정
    response.setContentType("text/html; charset=UTF-8");
    
    • 수정 후 실행 결과: 정상적

  • HTML 문서로 인식하기 때문에 <br> 태그를 없애면 줄바꿈도 되지 않음

  •  다시 Network에서 Response Headers를 확인하면 Content-Type이 지정된 걸 확인할 수 있음

  • 최종 코드
@WebServlet("/hi")
public class Nana extends HttpServlet {
  @Override
	protected void service(HttpServletRequest request
                        , HttpServletResponse response)
                        throws ServletException, IOException
  {
    response.setContentType("text/html; charset=UTF-8");
    response.setCharacterEncoding("UTF-8");
    PrintWriter out = response.getWriter();
		
    for(int i = 0; i < 10; i++) {
    out.println((i+1) + ": 안녕 Servlet<br />");
    }
  }
}