티스토리 뷰

기본적으로 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에 전달되게 된다.

반응형
Comments