서블릿 출력 형식을 지정해야 하는 이유
@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 |