웹 브라우저는 웹서버에 파라미터를 전송할 때 알맞은 캐릭터 셋을 이용해서 파라미터 값을 인코딩하여 전달한다.
반대로 웹 서버는 알맞은 캐릭터 셋을 이용해서 웹브라우저가 보내온 파라미터를 디코딩한다.
어떤 캐릭터 셋을 이용할지의 여부는 GET방식과 POST방식에 따라 다르다.
1.POST방식
POST방식에서는 응답결과에 사용하는 캐릭터셋을 이용해서 파라미터를 인코딩한다.
<%@ page contentType="text/html; charset="EUC-KR" %>
위와 같이 응답결과에 사용할 캐릭터셋을 'EUC-KR'로 설정한 경우 웹브라우저는 해당 캐릭터셋을 이용해서 인코딩한 파라미터를 웹서버에 전달한다.
서버에서 인코딩된 파라미터 값을 사용하기 위해선 알맞은 캐릭터셋으로 디코딩 해주어야 하는데JSP에서는 request기본객체가 제공하는
setCharacterEncoding() 메서드를 이용해서 파라미터 값을 디코딩 할 때 사용할 캐릭터 셋을 지정해준다.
<% request. setCharacterEncoding("euc-kr"); %>
위 스크립트릿에서 request 기본객체를 이용해서 디코딩 할 때 사용할 캐릭터셋을 지정해 주었다.
위와같이 지정하지 않는경우 기본적으로 사용되는 캐릭터셋 기본값은 "ISO-8859-1"이다.
한가지 주의 할 점은 파라미터 값을 읽어오기 이전 최 상단에 디코딩 할 때 적용할 캐릭터셋을 지정해 주저야 한다는 것이다.
그렇지 않을 경우, 파라미터를 읽어온 이후에 설정하는 것은 소용없다. 그런경우 자동으로 "ISO-8859-1" 로 디코딩 된다.
<% String name = request.getParameter("name"); request. setCharacterEncoding("euc-kr"); String country = request.getParameter("country"); %>
- <a>태그의 링크 태그에 쿼리 문자열 추가 > 웹 페이지 인코딩 사용
- HTML 폼의 메서드 속성값을 "GET"으로 지정해서 폼을 전송 > 웹 페이지 인코딩 사용
- 웹 브라우저의 주소에 직접 쿼리 문자열 포함한 URL 입력 > 웹 브라우저마다 다름
- IE : 현재 웹 브라우저에 선택되어 있는 캐릭터 셋을 이용해서 파라미터 값을 인코딩.
- 사파리,크롬 : UTF-8 을 기본값으로 인코딩.
- server.xml 파일에서 <Connector>의 useBodyEncodingForURI 속성의 값을 true로 지정하는 방법
- server.xml 파일에서 <Connector>의 URIEncoding 속성으 ㅣ값으로 원하는 캐릭터 셋을 지정하는 방법
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true" />
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="euc-kr" />
위 경우 URIEncoding 에서 지정한대로 항상 "euc-kr" 로 캐릭터셋을 지정하여 인코딩 된 값을 디코딩하여 읽어오게 된다.
(1)번과 (2)번을 동시에 다 적용할 수 있는게 그런 경우 setCharacterEncoding()메서드를 통해 지정한 캐릭터셋을 이용한다.
'web > jsp' 카테고리의 다른 글
JSP response 기본객체의 응답 정보 (0) | 2014.09.08 |
---|---|
JSP 요청 헤더 정보의 처리 (0) | 2014.09.06 |
JSP request 기본 객체(내장 객체) (0) | 2014.09.06 |
JSP 스크립트 요소(스크립트릿, 표현식, 선언부) (0) | 2014.09.05 |
JSP pageEncoding속성, 케릭터셋(charset) 결정하는 과정 (0) | 2014.09.05 |