SOCO
서블릿 출력 형식의 이해 : 문서형태지정&한글출력 본문
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확인 가능
'백 > Servlet,JSP(잠시 pause)' 카테고리의 다른 글
입력(요청)할 내용이 많은 경우 : post 요청 (0) | 2021.07.01 |
---|---|
get요청(쿼리스트링, 사용자 입력을 통한 get요청) (0) | 2021.07.01 |
매핑 (0) | 2021.07.01 |
이클립스 IDE 준비하기 (0) | 2021.07.01 |
컴파일, 클래스 생성, 실행, 출력(2) (0) | 2021.06.30 |