JSP / Servlet MVC, 인코딩
[ MVC 패턴 ]
- M (Model, 모델) : 로직(연산) 수행(데이터 작업 포함)을 담당
- V (View, 뷰) : 사용자 화면 출력 담당
- C (Controller, 컨트롤러) : Model과 View의 제어를 담당
[ JSP의 인코딩 ]
이클립스 환경설정에서 JSP 파일의 인코딩 타입을 바꿔주게되면 기본적으로 JSP 파일을 이클립스에서 생성할 때 인코딩 코드를 해당 타입으로 지정해서 생성해 줍니다.
1. pageEncoding 타입
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
어떤 타입으로 인코딩해서 저장할지, 읽을때도 어떤 타입으로 디코딩해서 읽을지를 지정해주는 설정
톰캣의 컨테이너가 JSP 파일을 로드할 때도 해당 코드에 설정된 인코딩 타입을 참조합니다
2. contentType 인코딩 타입
pageEncoding 설정이 정상적이어서 서블릿 파일이 생성되면,
이 서블릿 파일은 클라이언트(브라우저)에게 html 등의 코드와 문자열을 전송해줘야 합니다.
이 때 데이터를 전송하기 위해 해당 코드와 문자열을 인코딩하는 타입을 지정해주는 부분이 contentType 입니다.해당 인코딩 타입으로 데이터를 보내면서 http 프로토콜의 헤더에 이 타입을 명시에 주는데브라우저에서는 이 타입으로 데이터를 디코딩해서 브라우저에 출력해주게 됩니다.
HTML 코드 안에 보면태그에도 인코딩 타입이 또 있는데, 만약 헤더에 contentType으로 인코딩 타입이 지정돼 있다면태그에서 지정된 인코딩 타입은 그냥 무시합니다.태그의 인코딩 타입은 헤더에 타입이 명시돼 있지 않은 경우에 브라우저가 참조하는 타입입니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Hello
</body>
</html>
[ 서블릿 인코딩 ]
POST 방식의 요청에 대한 인코딩 타입
request.setCharacterEncoding("UTF-8")
GET 방식의 요청에 대한 인코딩 타입
1. POST 객체처럼 request.setCharacterEncoding("") 메소드를 사용
server.xml
<Connector useBodyEncodingForURI="true" connectionTimeout="10000"
port="80" protocol="HTTP/1.1" redirectPort="9090" />
<Connector> : 서버의 서비스 포트, 프로토콜 등에 대한 연결 정보를 설정하는 태그
URI가 서비스 포트로 데이터를 전송하는 순간 해당 정보를 지정된 타입으로 디코딩 하겠다는 의미입니다.
디코딩 된 데이터는 request 객체에 담아서 줍니다. 서비스 포트가 지정된 태그 안에서 사용하면 됩니다.
2. 기본 URI 인코딩, 디코딩 타입을 고정해서 지정
<Connector URIEncoding="UTF-8" port="80" protocol="HTTP/1.1" redirectPort="9090" />