# 핵심요약
1 .get방식해결을위해 톰캣 server.xml에 URIEncoding="euc-kr" 추가해주고
사용하는 모든 jsp페이지에 charset과 pageEncoding을 같은 값으로 맞춰준다.
( euc-kr로 맞춰도되고 utf-8로 맞춰도 됨. 둘다 한글처리가능 !! )
2. post방식해결을위해 파라미터 받는부분앞에(디코딩부분) 젤먼저 아래를 해준다.
<% request.setCharacterEncoding("EUC-KR"); %>
# 자세히 알아보기
[ex] 파라미터 한글전송
- <a> 태그는 URL부분을보면 한글 그대로 인코딩안하고 전송되고( 맨밑에 인코딩해서보내는법 볼것)
- <form>태그에서 action에서는 URL부분에서 한글은 인코딩해서 전송됨
- 영문숫자등은 그대로 전송됨 오직 한글만!!!!
[ex] 아래 예제는 파라미터 한글 전송이 깨짐!
a.jsp
======
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="b.jsp">
<input type="text" name="a">
<input type="submit">
</form>
</body>
</html>
b.jsp
=========
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%=request.getParameter("a") %>
</body>
</html>
- a.jsp실행시에 한글 기입시 한글 깨져서 출력됨
[ 해결법 ]
[*]Post방식일경우
디코딩할부분앞에 추가해줌으로서 해결
<% request.setCharacterEncoding("EUC-KR"); %>
[*]Get방식일경우
< get방식으로 파라미터 전송시 인코딩 결정 규칙 >
1. <a> 태그일경우 웹페이지 인코딩사용
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
2. <form> 태그일경우 웹페이지 인코딩 사용
3. url직접입력일경우 웹 브라우저마다 다름
1. 첫번째방법( useBodyEncodingForURI )
1)톰캣/conf/server.xml파일에서 <Connector>태그에 다음과같이 추가해주고
2) post방식처럼 디코딩할소스부분에 request.setCharacterEncoding("euc-kr") 추가해줌
2. 두번째방법( URIEncoding ) - 주로 이방법 사용
1) 톰캣/conf/server.xml파일에서 <Connector>태그에 다음과같이 추가해주면됨
<Connector connectionTimeout="20000" port="8282" protocol="HTTP/1.1"
redirectPort="8443" URIEncoding="euc-kr" />
여기서 설정한 인코딩값( EUC-KR 을 JSP 페이지의 charset이랑 pageEncoding에도 똑같은 값으로 맞춰줘야함!!
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
- 첫번째방식과두번째방식을 합칠수도있음
=> 결론
1.get방식해결을위해 톰캣 server.xml에 URIEncoding="euc-kr" 추가해주고
사용하는 모든 jsp페이지에 charset과 pageEncoding을 같은 값으로 맞춰준다.
( euc-kr로 맞춰도되고 utf-8로 맞춰도 됨. 둘다 한글처리가능 !! )
2. post방식해결을위해 파라미터 받는부분앞에(디코딩부분) 젤먼저 아래를 해준다.
<% request.setCharacterEncoding("EUC-KR"); %>
추가적으로...
# contentType의 charset과 pageEncoding의 차이점!
- <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
1. charset
- 응답캐릭터셋
- 인코딩방식을 설정하는것
- 클라이언트가 받아볼페이지의 케릭터셋을 의미
- <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> 의 charset과 같은의미이나
- 우선순위가 페이지디렉티브에 우선순위가있다!
- jsp실행시 마우스우클릭의 인코딩이 charset에서 설정한게 되어있다
- ( 응답했을시 캐릭터셋이므로...)
- html에서 사용자가 입력한 정보를 서버쪽으로 전송할때 charset에맞게 인코딩함
- 서버쪽에서는 받을때 클라이언트에서 설정된 charset에 맞게 디코딩해야함( 자동으로 안됨, 개발자가 코딩해야함 )
2. pageEncoding
[]jsp페이지 자체의 charset을 의미
[]해당문서, 즉 코드자체의 charset을 정하는것
[*]웹컨테이너가 JSP페이지를 읽어올때 사용할 케릭터셋을 결정하는 기본과정
- 1. 기본인코딩을 파일을 읽은후 pageEncoding을 찾아서 해당속성을 사용하는데
만약 없으면 contentType을 검색하여charset의 해당속성을 사용
- 2. 둘다 없으면 기본 캐릭터셋인 ISO-8859-1 을 사용
( 1번은 ASCII 문자 이외의 글자가 포함되어있지않은경우에 한해 적용됨 )
[*]JSP페이지를 구현할때는 EUC-KR , 응답결과는 UTF-8로하고싶다면
- <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="EUC-KR"%>
# <a> 태그 인코딩해서 보내기 - p113
[]위에서 보았듯이 <a>태그는 URL부분이 인코딩되지않는다
[]위에서 get방식으로 인코딩하고 디코딩하는부분은 URL과별개임
[]URL도 인코딩해서 보내보자!
<%@ page import="java.net.URLEncoder" %>
<% String s="조재주abc123";
String en=URLEncoder.encode(s,"euc-kr");
%>
<a href="b.jsp?a=<%=en%>">연결~</a>
[]이렇게하면 get방식이므로 URL부분이 인코딩안되는 <a>태그는 이제 인코딩이됨
영문숫자도 URL부분 인코딩해보기
'JSP' 카테고리의 다른 글
웹어플리케이션 초기화 파라미터 사용법(application객체) (0) | 2019.03.09 |
---|---|
캐쉬삭제법( 삭제라기보단 캐쉬저장 안하는법 ) (0) | 2019.03.08 |
서블릿의 get, post방식 (0) | 2019.03.08 |
JSP기본객체와 영역 (0) | 2019.03.08 |
JSP페이지의 구성요소 / JSP기본태그 (0) | 2019.03.07 |