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와 서블릿 공부를 하면서 헷갈렸던 내용이다.
.jsp파일 or .html파일에서 폼 태그에 입력한 값을 전송한다고 칩시다.
폼 태그에서 입력한 값을 전송할 때는 GET방식과 POST방식으로 나뉘는데 POST방식으로 보내는 값이 '한글'일 경우 깨지지 않게 전달하기 위해 사용하는 것이 request.setCharacterEncoding("UTF-8");
POST방식으로 보낼때 사용함.
GET방식으로 보낸다면?
한글을 GET방식으로 보낼때는 톰캣에 기본적으로 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");
(get, post 방식 둘다)
->서블릿에서 직접 브라우저에 출력해줄 경우 쓴다
브라우저에게 '우리는 utf-8 문자코드로 사용할거다. utf-8로 사용해줘' 라는 메세지를 전달해야 한다. 이러한 메세지를 전달하는 문장이 response.setContentType("text/html;charset=utf-8"); 이다.
이걸 사용하지 않고, response.setCharacterEncoding("UTF-8"); 만 사용하면 '하이'라고 나오지 않고 '뀖땖'과 같이 처음보는 이상한 문자가 출력이 된다.