티스토리 뷰
기본적으로 respnse.sendRedirect()를 이용하여 쿼리스트링을 보낼 때는 POST 방식을 사용하기 때문에, 지시자를 이용하여 페이지 자체의 인코딩을 변경하였다고 해도, 정보를 내보낼 때 한글이 깨지게 된다.
아래 예시로 한번에 확인할 수 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String id = "admin";
String pwd = "1234";
String name = "관리자";
String id_r = request.getParameter("id");
String pwd_r = request.getParameter("pwd");
if(id.equals(id_r) && pwd.equals(pwd_r)){
response.sendRedirect("main.jsp?name=" + name);
//response -> <head>를 타고 들어가기 때문에 post 방식으로 들어간다. = 한글이 깨진다
}else {
response.sendRedirect("loginResult.jsp?code=fail");
}
%>
이와 같이 내보내게 되면 100% 해당 정보를 받는 main.jsp 에선 한글이 깨져서 들어간다. 따라서 main.jsp가 아무리 쿼리스트링을 인코딩해서 받는다고 해도, 정보를 제대로 받을 수 없기 때문에, 반드시 정보를 내보내는 쪽에서 먼저 한글을 인코딩하는 과정이 필요하다. 이는 다음과 같이 java.net.URLEncoder 클래스를 사용하여 다음과 같이 인코딩해줄 수 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.net.URLEncoder" %> <!-- 내보내는 모든 정보의 인코딩을 담당하여 한글을 깨지지 않게 내보내기 위한 클래스이다. -->
<!DOCTYPE>
<%
String id = "admin";
String pwd = "1234";
String name = "관리자";
request.setCharacterEncoding("UTF-8"); //post로 가져오는 한글이 깨지는 것을 방지
String id_r = request.getParameter("id");
String pwd_r = request.getParameter("pwd");
if(id.equals(id_r) && pwd.equals(pwd_r)){
response.sendRedirect("main.jsp?name=" + URLEncoder.encode(name, "UTF-8")); //response -> <head>를 타고 들어가기 때문에 post 방식으로 들어간다. = 한글이 깨진다
}else {
response.sendRedirect("loginResult.jsp?code=fail");
}
%>
위와 같이 encode를 추가해주면, 한글이 깨지지 않고 정상적으로 main.jsp에 전달되게 된다.
반응형
'WEB > DynamicWeb' 카테고리의 다른 글
[JSP] Application의 상세 정보 (0) | 2021.04.21 |
---|---|
[JSP] forward 활용 (0) | 2021.04.21 |
[JSP] JSP 기초 <Include로 페이지 참조> (0) | 2021.04.20 |
[JSP] JSP 기초 <예외 처리, 에러 페이지 지정> (0) | 2021.04.20 |
[JSP] JSP 기초 <간단한 시간 출력> (0) | 2021.04.20 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- AsyncStorage
- Async
- 인천 구월동 이탈리안 맛집
- Promise
- javascript
- await
- 파니노구스토
- 인천 구월동 맛집
- 정보보안기사 #실기 #정리
- 맛집
- react
- 이탈리안 레스토랑
- react-native
- redux-thunk
- redux
- Total
- Today
- Yesterday