JSP와 서블릿 공부를 하면서 헷갈렸던 내용이다.
- 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"); (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"); 만 사용하면 '하이'라고 나오지 않고 '뀖땖'과 같이 처음보는 이상한 문자가 출력이 됩니다. 이는 브라우저마다 기본적으로 문자코드를 해석하는 default가 다르기 때문입니다. 그래서 우리는 브라우저에게 '우리는 utf-8 문자코드로 사용할거다. utf-8로 사용해줘'라는 response.setContentType("text/html;charset=utf-8"); 를 써주어야 합니다.
'Servlet.JSP' 카테고리의 다른 글
[Servlet/JSP] request.getParameter() 와 request.getAttribute()의 차이점 (0) | 2022.01.13 |
---|---|
[표현식] 표현식(<%= %>) (0) | 2022.01.13 |
[Servlet/JSP] 20220105 셤준비 (0) | 2022.01.04 |