JSP 인코딩
인코딩 요약
❗pageEncoding=”utf-8”%
💡 문서를 어떤 캐릭터 셋으로 작성할지 정하는 것❗response.setContentType(“text/html;charset=utf-8”)
💡 contenttype 이 메소드는 브라우저에 표현할 때 어떤 캐릭터 셋을 사용할지 정하는 것❗request.setCharacterEncoding
💡 이 메소드는 서블릿에 사용된다. 서버측으로 데이터를 ‘요청’하게 되는데 이 때문에 request 객체를 사용하게 된다.❗response.setCharacterEncoding
💡 이 메소드는 jsp출력에 사용된다. 즉 서버에서 브라우저로 데이터를 ‘응답’할 때 사용하는데 이 때문에 response 객체를 사용한다.
JSP 페이지 상단의 지시자
코드
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="ms949"%>
<!DOCTYPE html>
<html><head><meta charset="UTF-8"></head>
<body></body>
</html>
❗JSP 페이지 상단의 지시자
💡 jsp파일은 MS949로 작성되었으며 브라우저는 UTF-8로 받게될 것이다.❗pageEncoding
💡 jsp파일의 캐릭터셋을 담당.
💡 jsp소스파일을 다른 환경에서 열람 등 할 때 소스의 상태를 관리하는 문장이다.❗charset
💡 charset이 utf-8로 해야 정상출력되는걸 보아 크롬은 캐릭터셋이 UTF-8로 default세팅 되어있는걸 알 수 있다.
💡 charset=EUC-KR을 contentType 속성에 설정하면, 브라우저는 서버로부터 받은 데이터를 EUC-KR로 인코딩된 데이터로 해석하려고 시도한다.
💡 클라이언트가 서버로 데이터를 보낼 때도 해당 charset으로 데이터를 인코딩하여 전송한다.❗html의 페이징 캐릭터 셋
다음으로 jsp파일 지시어 다음에 헤드에 들어오는 이 UTF-8은 html의 페이징 캐릭터 셋이다.<meta charset="UTF-8">
💡 이미 위에서 <%@ pageEncoding%> 인코딩을 주었는데, 본문의 소스를 굳이 2번씩이나 인코딩해주어야 하나 싶다.
💡 찾아보니 jsp파일은 서블릿 변환되어 소스파일을 읽으므로 html 캐릭터셋보다 jsp캐릭터셋을 더 우선한다.
그러므로 상단 지시자에 charset이 선언되어 있으면 html부문의 meta charset은 무시된다.
소스파일 body에 사용되는 charset
이하 내용부터 설명한다.
CASE1. request.setCharacterEncoding(“UTF-8”);
❗request.setCharacterEncoding(“UTF-8”)
💡 jsp 혹은 html에서 작성된 폼 데이터를 전송할 때 UTF-8방식으로 전송하겠다는 뜻이다.
코드
<form name="form" action="test.jsp" method="post">
이름 : <input type ="text" name="name"/>
<input type ="submit" value="전송"/>
</form>
GET 방식 전송
❗GET 전송
<form name="form" action="test.jsp" method="get">
💡 GET방식은 URL을 통해( UTF-8 세팅이 되어있는 톰캣을 거침) 캐릭터 셋 처리를 하기 때문에 톰캣이 세팅된 대로 처리된다.
✅해결방법1
wasadm@cddawso1:/ $ vi [WAS서버]/conf/server.xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
POST 방식 전송
❗POST 전송
<form name="form" action="test.jsp" method="post">
💡 글자가 깨진다면 데이터를 전송할 때 인코딩을 확인해야한다.
💡 문제의 원인은 서버로 전송된 데이터의 문자 인코딩과 서버에서 데이터를 처리할 때의 인코딩이 일치하지 않는 것이다.
💡 폼 데이터는 브라우저에서 기본적으로 UTF-8로 인코딩되어 서버로 전송된다.
💡 그러나 서버에서는 별도의 인코딩 설정이 없어서 서버에서 기본 인코딩으로 처리하게 된다.
💡 이 경우에는 서버의 기본 인코딩 설정에 따라 한글이 깨질 수 있다.✅해결방법1
⭐ request.setCharacterEncoding(“UTF-8”); 코드 추가
⭐ 코드를 추가하여 서버로 전송된 데이터의 인코딩을 명시적으로 UTF-8로 설정
⭐ WAS서버측에 설정된 인코딩과 똑같이 셋팅하고 수행하면 된다.<body> <% request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); %> 이름은 <%= name %> 이다. </body>
✅해결방법2
⭐ web.xml에서 필터 설정
⭐ web.xml 파일에 필터를 추가하여 서버로 전송된 모든 요청의 인코딩을 UTF-8로 설정<filter> <filter-name>encodingFilter</filter-name> 중략...
CASE2. response.setContentType(“text/html;charset=utf-8”)
❗response.setContentType(“text/html;charset=utf-8”)
💡 브라우저에 전송되는 데이터를 인코딩하는것
💡 브라우저에게 출력형식을 UTF-8로 표현하겠다고 선언하는 문장이다.
Leave a comment