처음부터 차근차근
servlet 한글 깨짐과 쿼리스트링 본문
웹서버 -> 웹 브라우저(클라이언트)로 데이터 보낼 때 한글이 깨지는 유형
1. ???
2. 궯뚧뺧꺓쓁
한글이 깨지는 이유
1번의 경우
: ???
웹서버에서 클라이언트(웹 브라우저)로 데이터를 보낼 때 기본 인코딩 방식은 ISO-8859-1(주로 유럽에서 사용)이다.
ISO-8859-1방식은 데이터를 1byte씩 나눠서 보낸다.
한글자당 2byte인 한글이 1byte로 나눠져서 보내지니 웹 브라우저에서 아예 무슨 문자인지 인식을 못하는 것이다.
해결
response.setCharacterEncoding("UTF-8");
웹 서버에서 웹 브라우저로 데이터를 보낼 때의 방식을 utf-8 방식(한번에 2byte씩 보냄)으로 설정한다.
2번의 경우
: 궯뚧뺧꺓쓁
서버에서 UTF-8 인코딩 방식으로 클라이언트에 잘 보냈지만 웹 브라우저에서 다른 코드로 인식하는 상황이다.
해결
response.setContentType("text/html; charset=UTF-8");
웹 브라우저에게 데이터를 받은 후 어떻게 해석해야 하는가를 알린다.
이 문서는 html 문서이고, character들은 UTF-8로 읽으라는 뜻이다.
그리고 위의 코드를 입력해주지 않으면 브라우저마다 웹문서를 자의적으로 해석하여 브라우저마다 결과물이 다를 수 있다.
예를 들어 internet explore은 읽어야할 문서 형식이 정해지지 않으면 기본값으로 html로 읽고, chrome은 기본값으로 text로 읽는다.
그래서 chrome에서 <br>을 출력하면 text로 인식해서 화면에 '<br>'그대로 나오고, internet explore에다 <br>을 치면 <br>이 줄바꿈으로 인식되어 화면에 출력되지 않는다.
웹 브라우저(클라이언트) -> 웹서버로 데이터가 보내질 때 한글깨지는 이유
대표적인 모양 : □□□
tomcat의 기본적인 인코딩 방식은 ISO-8859-1이다.
즉, 웹 브라우저에서 UTF-8방식으로 2byte씩 웹서버로 전달했는데 웹 서버에선 1바이트씩 해석하기 때문에 출력했을 때 한글이 깨지는 것이다.
해결
request.setCharacterEncoding("UTF-8");
클라이언트(웹 브라우저)에서 받아온 데이터를 utf-8로 읽어들이겠다는 뜻이다.
쿼리스트링
get 방식으로 데이터가 보내질 때 url에 보내지는 파라미터을 쿼리스트링이라 한다.
get 방식으로 온 데이터를 받는 방법
int id = Integer.parseInt(request.getParameter("id"));
id란 이름으로 온 값을 받아오고, 그 값을 int형으로 변환한다.
여기서 int형으로 변환해야하는 이유는 쿼리스트링은 무조건 문자열로 전달되기 때문이다.
쿼리스트링 값
?id=1 1
?id= ""
?id null
? null
예외 처리
int id = 0;
String id_ = request.getParameter("id");
if (id_ != null && !id_.equals("")) {
id = Integer.parseInt(request.getParameter("id"));
}
출처 : https://www.youtube.com/playlist?list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd 변형 및 요약
'프로그래밍 > JSP' 카테고리의 다른 글
상태유지 방법 (0) | 2022.01.02 |
---|---|
Servlet Filter (0) | 2022.01.01 |
tomcat server 에서 url을 통해 웹문서를 보는 방법과 context 사이트 추가 (0) | 2021.12.24 |
Servlet (0) | 2021.12.21 |
과거 cs 프로그램의 문제점 (0) | 2021.12.18 |