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