SOCO

서블릿 출력 형식의 이해 : 문서형태지정&한글출력 본문

백/Servlet,JSP(잠시 pause)

서블릿 출력 형식의 이해 : 문서형태지정&한글출력

ssooda 2021. 7. 1. 09:44

1. ctrl + F11

2. server 뷰에서 우클릭 restart 후 웹에서 F5

 

서블릿은 어떻게 출력되고 클라이언트는 어떻게 이해하는가

 

문제점 1. 브라우저의 자의적 해석

웹은 html 마크업 언어를 통해 랜더링 되어야하므로

 println을 썼다고 하더라도

<br />태그가 없으면 줄바꿈이 되면 안 됨

 

BUT, 크롬에 컨텐츠 형식을 알려주지 않은 경우에는

<br />없이도 줄바꿈이 되고 <br />태그를 넣으면

<br />을 태그로 인식하지 않고 문자로 인식해서 출력함

 

컨텐츠 형식을 알려주지 않으면

브라우저가 엣지인 경우에는  html로 해석하지만

브라우저가 크롬인 경우에는 text로 해석하는 게 기본이기 때문임

 

=> 문서를 보낼 때 어떠한 형태의 문서를 보내는지 설정해서 보내야함 :  response.setContentType("text/html")

 

 

문제점2. 한글 출력 

 

이유1. 서버에서 한글을 지원하지 않는 문자코드로 인코딩한 경우 : 한글 부분이 ?로 바껴서 출력됨

웹 서버에서 클라이언트로 보내는 단위가

유럽에서 사용하는 인코딩 방식(ISO-8859-1)을 이용함

 

이 경우 서버가 클라이언트로 1바이트씩 보내기 때문에 한글이 깨짐

=> 인코딩방식을 지정해줘야함 : response.setCharacterEnconding("UTF-8")

 

이유 2. 서버에서는 UTF-8로 인코딩해서 보냈지만 브라우저가 다른 코드로 잘못 해석한 경우 : 삑뺵뽁

이 경우에는 서버가 클라이언트로 2바이트씩 보냄 (1바이트씩 보내는 문제는 해석)

그런데 클라이언트가 다른 인코딩 방식(ex. EUC-KR)으로 해석하는 경우에 깨짐

=>브라우저에서 어떻게 인코딩 해야하는지를 설정해줘야함 : response.setContentType("charset=UTF-8")

 

@WebServlet("/hello")
public class Nana extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8"); //인코딩 방식 지정 (문제2 이유1 해결)
		response.setContentType("text/html; charset=UTF-8"); //문제1,문제2 이유2 해결
		PrintWriter out = response.getWriter();
		
		for(int i=0; i<100 ; i++) 
			out.println((i+1)+ ": 안녕 Servlet!<br />") ;
	
		
	}

}

 

 

F12 -> network -> headers -> response headers -> content type확인 가능