jsp나 servlet에서 한글을 그냥 사용하려고 하면 제대로 읽어오지 못한다. 영어는 1 byte지만, 한글은 2 byte이기 때문이다.
euc-kr 도 사용가능하지만, utf-8이 지원하는 것이 많으므로 utf-8로 encoding 하겠다.
post 방식일 때, jsp -> servlet으로 데이터가 넘어오는 경우 servlet에서 한글을 지원받으려면, 아래와 같은 코드를 넣어주어야한다.
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
post 방식일 때, jsp -> jsp로 데이터가 넘어오는 경우 jsp 파일 상단에 아래와 같은 코드를 넣어준다.
<% request.setCharacterEncoding("UTF-8");%>
get 방식을 사용할 때는 server.xml 파일을 수정해야한다. intellij를 사용할 경우 server.xml에 접속하려면, 아래 경로로 접근하면 된다.
[다운받았던 tomcat 디렉토리 -> conf -> server.xml]
connector 부분을 찾아서 URIEncoding="UTF-8"
을 속성값으로 넣어주면 끝이다.
위의 방법으로 한글처리를 할 때, post방식을 사용하는 곳이 많아지면 일일히 위의 코드를 넣어주는 것은 매우 비효율적이다.
이런 경우, filter를 사용해서, 통신할 때 마다, filter를 거쳐 한글처리를 해 줄 수 있다.
filter는 인터페이스이므로, 사용자가 따로 구현해주어야한다.
총 3가지를 구현해야한다.
1. init - 생성
2. doFilter - 실제 필터 기능
doFilter 부분에는 filterChain.doFilter 로 요청과 응답 객체를 이용해 필터를 실행시켜줘야한다. filterChain.doFilter 전 부분이 필터를 거치기 전에 온 요청이고, 후 부분은 response 부분이다. 따라서 filterChain.doFilter전에 setCharacterEncoding("UTF-8")을 해주면, 한글처리를 하겠다는 뜻이다.
이렇게 필터를 만들어줬으면 web.xml에 등록해주어야한다.
은 이 filter의 닉네임이고,
는 이 filter가 속한 패키지를 포함한 풀 경로이다.
filter-mapping의 에 /*를 적어준 것은 서버에 들어오는 모든 요청이 이 filter를 거치게 하라는 의미이다.