처음부터 차근차근

servlet 한글 깨짐과 쿼리스트링 본문

프로그래밍/JSP

servlet 한글 깨짐과 쿼리스트링

_soyoung 2021. 12. 31. 20:25
반응형

웹서버 -> 웹 브라우저(클라이언트)로 데이터 보낼 때 한글이 깨지는 유형

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
Comments