setContentType, setCharacterEncoding

지환·2023년 12월 5일
0

Jsp & Servlet

목록 보기
8/21
post-thumbnail

[JSP setContentType 메소드와 MIME 타입]

setContentType(String) : MIME 타입을 지정합니다. 캐릭터의 인코딩을 지정할 수도 있다.

예) response.setContentType("text/xml"); // MIME 타입만 지정
response.setContentType("text/xml;charset=utf-8"); // MIME 타입 지정, 캐릭터의 인코딩 지정

response 객체는 JSP의 실행 결과를 웹브라우저로 전송하고자 할때 사용하며 setContentType 메소드는 html의 표준 MIME 타입인 "text/html" 의 변경이나 캐릭터의 인코딩을 재 지정하고자 할때 사용한다.

쉽게 말해서 웹서버는 브라우저로 전송될 페이지가 html 인경우 text/html을 표준 MIME 타입으로 지정한다

그러나 필요에 의해서 이 MIME 타입을 변경하고자 할 경우나 또는 캐릭터의 인코딩셋을 변경하고자 할때 setContentType 메소드를 사용할 수 있다.

브라우져는 이 MIME 타입을 확인하고 어떤 파일의 스트림(stream)인 줄 알 수 있다.

정리

JSP와 서블릿 공부를 하면서 헷갈렸던 내용이다.

request.setCharacterEncoding("UTF-8");

  • request.setCharacterEncoding("UTF-8");
  • response.setCharacterEncoding("UTF-8");
  • response.setContentType("text/html;charset=utf-8");
  • request.setCharacterEncoding("UTF-8"); (post 방식만)
    ->서블릿에서 post방식으로 정보를 서버에 전달해줄 때

.jsp파일 or .html파일에서 폼 태그에 입력한 값을 전송한다고 칩시다.

폼 태그에서 입력한 값을 전송할 때는 GET방식과 POST방식으로 나뉘는데 POST방식으로 보내는 값이 '한글'일 경우 깨지지 않게 전달하기 위해 사용하는 것이 request.setCharacterEncoding("UTF-8");POST방식으로 보낼때 사용함.


GET방식으로 보낸다면?

한글을 GET방식으로 보낼때는 톰캣에 기본적으로 UTF-8문자코드가 적용이 되어있어서 자동으로 한글처리를 해주기때문에 한글이 깨지지 않는다.


response.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8"); (get, post 방식 둘다)
->서블릿에서 직접 브라우저에 출력해줄 경우 쓴다

서블릿에서 화면에 데이터를 출력하기 위해서는 out.print를 사용하는데 response.setCharacterEncoding("UTF-8"); 없이 out.print("하이");를 한다면 '하이'가 출력되는 것이 아니라 ???? 과 같은 물음표가 출력됩니다.

이러한 문제점을 해결하기 위한 방법으로 response.setCharacterEncoding("UTF-8"); 를 추가 합니다.

이는 post방식, get방식 모두 동일하게 사용됩니다.


response.setContentType("text/html;charset=utf-8");

response.setContentType("text/html;charset=utf-8"); (get, post 방식 둘다)
->서블릿에서 직접 브라우저에 출력해줄 경우 쓴다


브라우저에게 '우리는 utf-8 문자코드로 사용할거다. utf-8로 사용해줘' 라는 메세지를 전달해야 한다. 이러한 메세지를 전달하는 문장이 response.setContentType("text/html;charset=utf-8"); 이다.


이걸 사용하지 않고, response.setCharacterEncoding("UTF-8"); 만 사용하면 '하이'라고 나오지 않고 '뀖땖'과 같이 처음보는 이상한 문자가 출력이 된다.


이는 브라우저마다 기본적으로 문자코드를 해석하는 default가 다르기 때문이다. 그래서 우리는 브라우저에게 '우리는 utf-8 문자코드로 사용할거다. utf-8로 사용해줘'라는 response.setContentType("text/html;charset=utf-8"); 를 써주어야 한다.
profile
아는만큼보인다.

0개의 댓글