JSP와 서블릿 공부를 하면서 항상 헷갈렸던 내용이 있다.
- request.setCharacterEncoding("UTF-8");
- response.setCharacterEncoding("UTF-8");
- response.setContentType("text/html; charset=utf-8");
이번 포스팅에서는 위 세 개의 문장을 알아보겠습니다.
request.setCharacterEncoding("UTF-8")
우리가 어떤 .jsp파일이나 .html파일에서 폼 태그에 입력한 값을 전송한다고 가정하겠습니다.
폼 태그에서 입력한 값을 전송할 때는 GET방식과 POST방식으로 나뉘는데 POST방식으로 보내는 값이 '한글'일 경우 깨지지 않게 전달하기 위해 사용하는 것이 request.setCharacterEncoding("UTF-8"); 입니다.Q. 그럼 GET방식으로 보내면 어떻게 되나요?
GET방식으로 보내진 한글은 톰캣이 기본적으로 UTF-8 문자코드가 적용이 되어 있어서 자동으로 한글처리를 해주기 때문에 한글이 깨지지 않습니다.
GET, POST 방식을 모두 사용하니 request.setCharacterEncoding("UTF-8");은 꼭 필요합니다.
그래도 한글처리가 안된다면 아래와 같이 해보자.
이클립스 server.xml 에서 port=8080과 port=8009 두 개의 connector에 URIEncoding="UTF-8"을 추가한다.
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URLEncoding="UTF-8"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URLEncoding="UTF-8"/>
response.setCharacterEncoding("UTF-8")
서블릿에서 화면에 데이터를 출력하기 위해서는 out.println을 사용을 하는데 위의 코드없이 out.print("안녕");를 한다면 '안녕'이 출력되는 것이 아니라 ????과 같은 물음표가 출력이 됩니다.
이러한 문제점을 해결하기 위한 방법은 response.setCharacterEncoding("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"); 이다.
'Programming > Servlet' 카테고리의 다른 글
서블릿(Servlet) url 매핑기법 2가지(web.xml 방식, 어노테이션 방식) (0) | 2020.07.30 |
---|---|
[JSP] JSTL(Jsp Standard Tag Library) 정리 - <c:set>,<c:out>,<c:remove>,<c:if>,<c:choose>,<c:when>,<c:otherwise>,<c:forEach>,<c:forTokens> 등 (1) | 2019.10.27 |
[JSP] JSP Beans(빈즈)에 대해 알아보자 (0) | 2019.10.09 |
[JSP] 표현언어(Expression Language)란? (0) | 2019.10.09 |
JSP 내장객체를 활용한 간단한 twitter 구현하기 (0) | 2019.10.01 |