
위의 폼 영역에 데이터를 입력하고 서버로 전송 시킨 후 DB를 확인해보니 아래 사진처럼 한글이 깨져서 저장이되었다.
인코딩 문제라 생각하고 구글링을 해보았다.

웹 환경에서는 보통 브라우저(Client) - 서버 - DB서버 이렇게 3계층에 거쳐 데이터를 주고받게 되는데 이때 세 요소의 인코딩이 서로 맞아야한다.
즉 입력, 출력 스트림의 데이터 형식을 동일하게 맞춰주어야 한다.
해결방법
1. 이클립스 인코딩 설정이 UTF-8 인지 확인한다.
2. html 파일의 meta 태크의 charset을 설정한다.
(브라우저에게 해당 html페이지가 UTF-8을 사용한다는 것을 알려준다.)
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta charset="UTF-8">
3. JSP
page 디렉티브의 contentType속성과 pageEncoding속성의 캐릭터셋을 지정해준다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
4. 서블릿
4.1 요청이 POST 방식인 경우
request 객체와 response 객체의 캐릭터셋을 설정해준다.
setCharacterEncoding() 메서드는 HTTP 요청 메시지의 body에 대한 인코딩을 설정하는 메서드다.
따라서 request.getParameter() 메서드를 사용하는 페이지에서 매번 setCharacterEncoding()를 통해 인코딩 설정을 해주어야하는 코드 중복 문제가 발생한다.
코드 중복 문제를 해결하기 위해선 각각의 페이지에 있던 중복 코드를 필터로 빼주어 관리하는 것이 좋다. 이 방법은 추후에 알아보도록 하자.
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
4.2 요청이 GET 방식인 경우
GET 방식의 요청의 경우 데이터를 URI에 쿼리스트링 형태로 보내기때문에 HTTP 메시지의 BODY 부분이 없다.
따라서 인코딩 설정이 POST 방식의 인코딩 방법과 다르다. 대신 한번만 설정해주면 되기때문에 코드 중복문제가 없다.
GET 방식은 컨테이너 설정으로 인코딩 형식을 셋팅한다.
톰캣의 경우 8버전 이상에서는 디폴트로 UTF-8로 설정되어있으므로 7버전 이하에서는 캐릭터셋을 지정해주어야한다. server.xml 에서 URIEncoding="UTF-8" 을 추가해준다.
5. DB서버 인코딩 설정
해당 DBMS에 맞춰 인코딩을 설정해준다.
'Web' 카테고리의 다른 글
| 폼 데이터 입력 후 한글 깨짐 현상 (0) | 2021.12.09 |
|---|---|
| redirect와 forward (0) | 2021.11.15 |
| JSP 문법 (0) | 2021.11.13 |
| JSP 라이프싸이클 (0) | 2021.11.13 |
| Servlet (0) | 2021.11.10 |