jsp, 서블릿, 데이타베이스 한글문제 총정리
한글문제를 해결하기 위해서는 기본 개념을 아셔야 합니다.
자 기본개념 들어갑니다.
ms949 는 윈도우에서 돌아가는 캐릭터 셋입니다. 아�d�d은 표시가 가능합니다만, 유닉스 환경에서는 지원불가입니다.
euc-kr 은 윈도우 리눅스에서 돌아가지만 [ �� , 아�d�d ] 등의 글 사용시 한글깨짐 현상이 나타납니다.
그럼 utf-8 은 어떨까요? 이것은 모든문자를 지원합니다. 글자가 깨지지 않죠. 하지만 3byte를
차지합니다. 오라클의 최신버전인 10G XE V 10.2.0.1.0 을 보시면 기본 default 로
UTF 로 설정되어 있습니다.
자 이제 강좌 시작합니다.
한글 처리에는 JSP 와 서블릿 한글처리 두 가지가 있습니다.
---------- JSP 에서 한글 처리 ----------------
jsp 의 한글을 컨테이너가 웹에 [표현 or 뿌려줄때] 할 때는 다음과 같이 사용합니다.
1. <%@ page contentType="text/html;charset=euc-kr" %>
위에는 pageEncoding 속성이 없습니다. 그렇다면 pageEncoding="euc-kr" 을 사용하게 됩니다.
만약 다음과 같이 pageEncoding 가 들어있다면 utf-8 로 읽어들이고 euc-kr 로 웹에 뿌려주죠.
2. <%@ page contentType="text/html;charset=euc-kr" pageEncoding="utf-8" %>
현제 jsp 페이지 안에 �� 라는 글자가 있다면 어떨까요?
1번일 경우 [��] 를 읽기 위해 pageEncoding 을 읽어야 하지만 없으므로 charset의
euc-kr 을 이용합니다. 그럼 euc-kr 은 이 글자를 인식못하겠죠?
그렇다면 원하는 문자를 출력하기 어렵습니다.
2번일 경우는 어떨까요. 글을 읽기 위해 utf-8 을 사용하므로 컨테이너에 잘 들어갈 것입니다.
하지만 뿌려줄때는 euc-kr 을 사용하므로 다시 글이 깨지겠죠....
만약 jsp1 --> jsp2 로 <input type=text value='값'>으로 처리하면 어떨까요?
[학교]라는 글자라면 jsp2 에서 euc-kr 로 표현하면 됩니다.
[��] 라는 글자라면 캐릭터셋으로 읽고 jsp2 에서 utf-8 또는 ms949로 표현하면 됩니다
jsp1 에서는 어떻게 처리해야 될까요?
jsp2 의 내부처리를 자세히 보시면
1단계 --> jsp2 에서는 <%request.setCharacterEncoding("utf-8"); %> 을 해야 됩니다.
이 뜻은 보낸(jsp1) 페이지가 utf-8 로 되어 있다라는 뜻입니다. 즉 utf-8 로 인식하겠다는 뜻입니다.
2단계 --> pageEncoding 을 합니다. 이때 pageEncoding 할 때 euc-kr 로 되있다면 글자깨짐..
3단게 --> charset 를 사용하여 표현. 이때도 euc-kr 로 되있으면 깨지겠죠?
자 jsp 에서 jsp 로 넘겨줄때 <%request.setCharacterEncoding("utf-8"); %> 을 사용했듯이
jsp 에서 서블릿으로 넘겨줄때도 마찬가지로 인코딩을 하셔야 한다는 것입니다.
------- 서블릿의 한글 처리 -------------
서블릿의 한글 인코딩에는 post 한글 인코딩, get 방식 한글 인코딩이 있습니다.
서블릿 내부에서 변환한다면 모든 서블릿마다 처리를 해줘야 하므로 불편합니다.
따라서 필터를 이용하여 설정해주시면 되겠습니다.
다음은 post 값에 대하여 다음과 같이 인코딩 시키는 방법입니다.
web.xml 의 webapp 엘리먼트 안에 다음과 같이 넣습니다.
SetCharacterEncodingFilter.java 를 만든다. package는 편의를 위해 filters 로 하겠습니다.
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>EUC-KR</param-value> <!-- 원하는 문자셋 설정(주석은 한글 안됩니다) -->
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2. get 방식으로 서블릿에 전달하신다면 다음과 같이 처리하셔야 합니다.
server.xml 의 connector 엘리먼트를 찾아서 URLEncoding 를 다음과 같이 추가한다.
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URLEncoding="UTF-8" />
'Web > JSP_SERVLET' 카테고리의 다른 글
execute / executeQuery / executeUpdate 차이 (0) | 2016.02.26 |
---|---|
리다이렉트 방식의 종류. (0) | 2016.02.26 |
jsp 페이지 및 ajax 사용시 공백 제거 (0) | 2016.01.29 |
페이징 , paging 처리 jsp 코드 (0) | 2016.01.26 |
JSP 쿠키(Cookie) (0) | 2016.01.20 |
댓글