본문 바로가기
서블릿 JSP

Servlet 출력 형식의 이해

by 영카이브 2024. 2. 20.

서블릿 출력 형식을 지정해야 하는 이유 

@WebServlet("/hi")
public class Nana extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		PrintWriter out = resp.getWriter();
		for( int i=0; i<10; i++ ) {
			out.println((i+1)+": Hello Servlet!");
		}
	}
}

 

해당 코드 실행시 

1.

2.

 

 

out.println((i+1)+": Hello Servlet!<br>"); 로 변경 시 

1.

2.

 

브라우저마 차이가 있는 이유

브라우저가 자의적으로 해석했기 때문이다.

1번은 text로 해석하고 2번은 html로 해석했다. 

따라서 클라이언트에게 보낼 때 그 문서의 형식을 꼭 알려주어야한다.

 

 

한글과 콘텐츠 형식 출력

@WebServlet("/hi")
public class Nana extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		PrintWriter out = resp.getWriter();
		for( int i=0; i<10; i++ ) {
			out.println((i+1)+": 안녕 Servlet <br>");
		}
	}
}

 

1.

2.

한글이 깨져서 ??로 나온다. 

 

한글이 깨진 이유

웹서버에서 클라이언트로 보내질때 기본적으로 ISO-8859-1 1바이트씩 보내는 인코딩 방식을 이용한다. 한글은 2바이트씩 보내야 하므로  한글이 깨진다. 따라서 인코딩 방식을 먼저 지정해야한다. 

resp.setCharacterEncoding("UTF-8");

 

수정

@WebServlet("/hi")
public class Nana extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 사용자 본연의 코딩인코딩방식 설정(파일을 UTF-8로 보냄)
		resp.setCharacterEncoding("UTF-8");
		// 사용자가 어떻게 읽어야할지 알려줌
		// 브라우저에게 charset=UTF-8로 해석하라고 알려줌 
		resp.setContentType("text/html; charset=UTF-8");
		PrintWriter out = resp.getWriter();
		for( int i=0; i<10; i++ ) {
			out.println((i+1)+": 안녕 Servlet <br>");
		}
	}
}

 

resp.setCharacterEncoding("UTF-8");

실제 내용이 어떤 문자 인코딩으로 인코딩되어 있는지를 설정

resp.setContentType("text/html; charset=UTF-8");

Content-Type 헤더를 설정(F12-네트워크에서 확인) 

해당 텍스트가 html문서이고 클라이언트에게 UTFF-8로 해석할 것을 설정

 

따라서 1번과 2번 상관없고 한글깨짐없이 출력된다. 

 

 

 

참고 자료 출처 : https://www.youtube.com/watch?v=u6-D8CJbsmo&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=15

'서블릿 JSP' 카테고리의 다른 글

입력 데이터 배열로 받기  (0) 2024.02.21
GET요청 & POST요청 & 서블릿 필터  (0) 2024.02.20
Annotation을 이용한 Servlet과 URL 매핑  (0) 2024.02.20
Servlet 웹 입/출력  (0) 2024.02.20
Servlet 프로그램 만들기  (0) 2024.02.20