Servlet & JSP/Servlet & JSP 공부

[자바웹을다루는기술] request.setCharacterEncoding 와 response.setContentType 차이

개발자하소서 2022. 2. 15. 17:34
728x90
반응형
SMALL

📌브라우저 => 서버 (Request)

- 요청에는 Get 방식, Post 방식 2가지가 있다.

 

- Post 방식의 경우, 이클립스로 서블릿을 개발하면서 JAVA 메소드로 인코딩을 할 수 있는데,

 request.setCharacterEncoding("UTF-8"); 로 간단히 인코딩 방식을 설정할 수 있다. 

 

- GET 방식으로 전달된 문자열들은 URI에 포함되어 전달되기 때문에 URI에 대해 인코딩 처리 작업을 해야한다.

서버마다 기본적으로 URI 인코딩 문자코드가 정해져 있는데, GET 방식으로 보내진 한글은 톰캣이 기본적으로 UTF-8이 적용되어 있어서 자동으로 처리를 해주기 때문에 글자가 깨지지 않는다.

 

-따라서 FORM 태그에서 POST 방식으로 한글 데이터를 전송하고, 서블릿에서 doPost() 메소드를 사용해야 하는 경우에 

request.setCharacterEncoding("UTF-8");을 작성해야 한다.

📌서버 => 브라우저 (Response)

- 서버에서 브라우저로 데이터를 보낼 때는 Response 객체를 사용한다.

- 인코딩시 필요한 Response 객체의 메소드는 두 가지다.

- response.setCharacterEncoding("utf-8");

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

 

📌request.setCharacterEncoding("utf-8");

- 들어오는 파라미터를 UTF-8로 해석한다

- 폼 태그에서 입력한 값을 전송할 때는 GET방식과 POST방식으로 나뉘는데'

  POST방식으로 보내는 값이 '한글'일 경우 깨지지 않게 전달하기 위해 사용하는 것이다. 

📌response.setCharacterEncoding("utf-8");

- 서블릿이 HTML 파일을 만들 때 UTF-8 로 쓰기

- 웹 브라우저에게 한글이 포함되어 있으니 잘 표시하라고 알려주는 역할을 한다.

- 서블릿에서 화면에 데이터를 출력하기 위해서는 out.println을 사용을 할경우,

   그냥 out.print("안녕하세요");를 한다면 '안녕하세요'가 출력되지 않고 ????과 같은 물음표가 출력된다.

- 해결하기 위한 방법은 response.setCharacterEncoding("UTF-8"); 를 추가하는 것이다.

 


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

- HTML이 UTF-8 형식이라는 것을 브라우저에게 알리는 것으로.

- 위의 response.setCharacterEncoding("UTF-8"); 이 문장만 사용하면 '안녕하세요'라고 나오지 않고

    '댊뀘'과 같은 처음보는 이상한 문자가 출력이 된다.

- 이는 브라우저마다 기본적으로 문자코드를 해석하는 default가 다르기 때문이다. 

그래서 브라우저한테 '우리는 utf-8 문자코드로 사용할거야. utf-8로 사용해줘'라는 메세지를 전달해야 한다.

- 이러한 메세지를 전달하는 문장이 바로 response.setContentType("text/html; charset=utf-8"); 이다.

728x90
반응형
LIST