JSP

request 기본 객체 04_파라미터 값의 인코딩 처리

yayeun 2016. 5. 31. 15:14

파라미터 값의 인코딩 처리

웹 브라우저 : 웹 서버에 파라미터를 전송할 때 알맞은 캐릭터 셋을 이용해서 파라미터 값을 인코딩

웹 서버 : 알맞은 캐릭터 셋을 이용해 웹 브라우저가 전송한 파라미터 데이터를 디코딩

- 웹 브라우저가 'UTF-8' 을 이용해 인코딩 했다면 웹서버는 'UTF-8' 을 이용해 파라미터 값을 디코딩해야 올바른 파라미터 값을 사용할 수 있다.

- 웹 브라우저가 인코딩 할 때 사용할 캐릭터 셋과 웹 서버가 디코딩할 때 사용한 캐릭터 셋이 다를 경우 웹 서버가 잘못된 파라미터 값을 사용한다.


GET & POST 방식에 따라 사용하는 캐릭터 셋이 달라진다.

▣ POST : 입력 폼을 보여주는 응답 화면이 사용하는 캐릭터 셋을 사용

 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

* 서버에서 파라미터 값을 알맞게 사용하려면 웹 브라우저가 파라미터 값을 인코딩할 때 사용한 캐릭터 셋을 이용하여 디코딩(decoding) 해준다.

- setCharacterEncoding() 메서드 : 파라미터 값을 디코딩할 때 사용할 캐릭터 셋을 지정할 수 있다.

1
2
3
4
5
<!--  요청 파라미터의 캐릭터 인코딩을 utf-8로 지정 -->
    <%
        request.setCharacterEncoding("utf-8");
    %>
 
cs

- request.setCharacterEncoding() 메서드를 이용해 파라미터 값을 디코딩할 때 사용할 캐릭터 셋을 지정하면 request.getParameter() 메서드나 request.getParameterValues() 메서드를 이용해 파라미터 값을 알맞게 읽어올 수 있다.

- request.setCharacterEncoding() 메서드는 파라미터 값을 사용하기 전에 실행해 주어야한다.

- 캐릭터 셋을 지정하지 않을 경우 기본 캐릭텃 셋 : ISO-8859-1


▣ GET : 파라미터 전송은 3가지의 방법이 있으며 각 방법에 따라 캐릭터 셋이 달라질 수 있다.

 GET 방식 이용시 파라미터 전송 방법

인코드 결정 

 <a> 태그의 링크에 쿼리 문자열 추가

 웹 페이지 인코딩 사용 

 HTML 폼(FORM) 의 method 속성 값을 "GET"으로 지정해서 폼을 전송 

 웹 페이지 인코딩 사용 

 웹 브라우저에 주소에 직접 쿼리 문자열 포함한 URL 입력

 웹 브라우저 마다 다름 


방법 1 : <a> 태그의 링크에 쿼리 문자열을 추가

<a href="viewParameter.jsp?name=yayeun&address=seoul">링크</a> 

- 웹 브라우저는 사용자가 링크를 클릭하면 POST 방식의 경우와 같이 웹 페이지의 캐릭터 셋을 이ㅇ해서 파라미터를 인코딩 한다.


방법 2 : HTML 폼을 이용해서 GET 방식으로 파라미터를 전송하는 경우에도 웹 페이지의 인코딩을 이용해서 파라미터 값을 인코딩

1
2
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
cs

- 생성된 웹 페이지에서 폼을 전송하면 웹 브라우저는 UTF-8 캐릭터 셋을 이용해 파라미터 값을 인코딩


방법 3 : 웹 브라우저의 주소에 직접 쿼리 문자열을 입력하는 경우

- 웹 브라우저에 따라서 선택하는 캐릭터 셋이 달라질 수 있다.

 http://localhost/test/viewParameter.jsp?name=조예은 

- 인터넷 익스플로러 구 버전은 EUC-KR 캐릭터 셋을 이용해 파라미터 값을 인코딩한 URL을 웹 서버에 요청한다.

- 크롬의 경우 파라미털 값을 UTF-8 캐릭터 셋을 이용해 인코딩한 URL 을 웹 서버에 요청한다. 



▣ GET 방식으로 전달되는 파라미터 값에 대한 표준 인코딩 규칙이 정해져 있지 않기 때문에 WAS 마다 GET 방식의 파라미터 값을 읽어 올 때   사용하는 기본 캐릭터 셋도 다르다.

▣ GET 방식으로 전송된 파라미터에 대해서는 request.setCharacterEncoding() 메서드로 지정한 캐릭터 셋이 적용되지 않는다.