본문 바로가기

Servlet, JSP

Parameter, Form Data에 담은 한글이 깨지는 문제 해결

사용자가 한글을 서버로 보냈을 때 한글이 깨지는 문제가 발생합니다.

이유는 브라우저가 UTF-8로 인코딩해서 데이터를 서버로 보냈을 경우 톰캣은 기본적으로 ISO-8859-1 방식(한 글자 1바이트)으로 읽기 때문입니다. 깨진 문자를 다시 출력해서 브라우저에서 깨진 한글이 보이는 것입니다.

 

 

해결책 : 파라미터를 가져오기 전에 인코딩을 UTF-8로 설정하면 됩니다.

request.setCharacterEncoding("UTF-8");

 

다른 해결책은 톰캣의 server.xml에서 인코딩을 UTF-8로 설정하면 됩니다.

전체 소스 코드

Reg.java

@WebServlet("/reg")
public class Reg extends HttpServlet {
	@Override
	public void service (HttpServletRequest request
			, HttpServletResponse response) throws IOException, ServletException{
		
		response.setCharacterEncoding("UTF-8"); 
		response.setContentType("text/html; charset=UTF-8");
		
		PrintWriter out = response.getWriter();
		request.setCharacterEncoding("UTF-8");
		String title=request.getParameter("title");
		String content=request.getParameter("content");
		
		out.println("title : "+title);
		out.println("content : "+content);
		
	}

}

 

Reg.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div>
		<form action ="reg" method ="post">
			<div>
				<label>제목 : </label><input name = "title" type ="text">
			</div>
			<div>
				<label>내용: </label>
				<textarea name = "content"></textarea>
			</div>
			<div>
				<input type ="submit" value ="등록">
			</div>
		</form>
	</div>
</body>
</html>