본 포스트는 mysql 5.7.34 / 톰캣 8.5 / 웹모듈 3.1 / 자바 8을 기준으로 작성하였습니다.
위와 같은 화면에서 <form>
태그를 이용해 서블릿으로 데이터 넘겨 mysql에 데이터를 저장하고자 한다. 한글을 입력해 저장한 후 조회해서 웹으로 출력해보니 이런 결과가 나왔다.
name과 title필드에 한글이 깨진 채로 저장이 된 걸 볼 수 있다. 어딘가 utf8 세팅을 해줘야겠는데.. 처음엔 mysql에 한글 저장이 안되고 있나 생각해봤는데, 이건 이미 해결한 문제였고(mysql cmd에서 한글 저장 안 될 때(작성예정)),
서블릿 doPost에 넘어온 데이터를 println으로 출력해보니 request객체에서부터 한글이 깨져있었다.
jsp나 html에서 넘어온 request객체를 서블릿에서 encoding해주자.
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
...
}
JDBC 데이터베이스 접속 url에 위 문장을 추가하자.
"jdbc:mysql://localhost:3306/db명?useUnicode=true&characterEncoding=utf8";