Development/JSP

[Encoding(Response)] 웹 서버 구축하기 (4)

Go0G 2021. 11. 22. 15:16

개요

서블릿 프로그래밍 연습

  • 인코딩 설정: 한글 형식 출력

환경

  • WAS Server: CentOS Linux release 7.9 - Tomcat 7.0 - JDK 1.8.0_312

관련 경로

servlet-api 라이브러리 /[Tomcat Directory]/java/tomcat-servlet-api.jar
ROOT Directory /[Tomcat Directory]/tomcat/webapps/ROOT/

실습

예제코드 작성

nana.java

import javax.servlet.annotation.WebServlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

@WebServlet("/hi")
public class nana extends HttpServlet
{
    @Override
    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
        PrintWriter out = response.getWriter();
        for(int i=0; i<100;i++)
            out.println((i+1)+": 안녕 Servlet!!");
    }
}

컴파일

#javac -classpath /[Tomcat Directory]/java/tomcat-servlet-api.jar nana.java
#mv ./nana.class./WEB-INF/classes
#systemctl restart tomcat

결과: *ISO-8859-1로 인코딩 되어 한글이 깨짐

*ISO-8859-1: MIME 유형으로 HTTP를 통해 전달되는 문서의 기본 인코딩 형식


서버측 인코딩 추가

setCharacterEncoding("UTF-8"); 구문을 추가하여 서버측에서 "UTF-8"로 인코딩

import javax.servlet.annotation.WebServlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

@WebServlet("/hi")
public class nana extends HttpServlet
{
    @Override
    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
        response.setCharacterEncoding("UTF-8");

        PrintWriter out = response.getWriter();
        for(int i=0; i<100;i++)
            out.println((i+1)+": 안녕 Servlet!!");
    }
}

결과: 브라우저단에서 인코딩이 적절하게 수행되지 않아서 한글이 깨짐


서버측 인코딩 및 컨텐츠 타입 정의

클라이언트 측에서 text/html 타입으로 요청할 경우 브라우저에서 UTF-8로 인코딩할 것을 정의

import javax.servlet.annotation.WebServlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

@WebServlet("/hi")
public class nana extends HttpServlet
{
    @Override
    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");

        PrintWriter out = response.getWriter();
        for(int i=0; i<100;i++)
            out.println((i+1)+": 안녕 Servlet!!");
    }
}

결과: 한글이 적절하게 출력

컨텐츠 타입을 지정하였기 때문에 줄바꿈  미적용이 Chrome 브라우저에도 적용

이전 ISO-8859-1 인코딩 방식에서는 Chrome는 줄바꿈되어 출력


Reference

더보기

[1] https://www.youtube.com/watch?v=u6-D8CJbsmo&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=14