request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
설정해주지 않으면 매번 적어야 한다. 매우 번거롭다.
그러니 Filter를 설정해주자!
인코딩 타입을 설정하는 자바소스를 src에 먼저 저장한다. 내용은 아래와 같다.
package yeon.util.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter {
private String encoding;
protected FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding=filterConfig.getInitParameter("encoding");
}
//HttpServletRequest 객체에 web.xml에서 전달된 문자 인코딩을 설정하는 메소드.
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException,ServletException {
if(request.getCharacterEncoding()==null) {
if(encoding!=null) { // 둘 다 입력값이 있다면,
request.setCharacterEncoding(encoding); // 해당 타입으로 인코딩셋팅
}
}
chain.doFilter(request,response);
}
public void destroy() { // web.xml에서 전달된 인코딩 값을 초기화하는 메소드
this.encoding=null;
this.filterConfig=null;
}
public FilterConfig getFilterConfig() {
return filterConfig;
}
public void setFilterConfig(FilterConfig filterConfig) {
this.filterConfig=filterConfig;
}
}
해당 루트폴더내의 web.xml 파일을 열어서, 아래의 필터태그를 추가해준다.
<filter>
<filter-name>Encoding Filter</filter-name>
<filter-class>내 필터 클래스의 경로</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8(내가원하는인코딩타입)</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
이 태그들을 통해서, 아까 만들어둔 클래스에 파라미터값을 넘기게 된다.
위 예시에서는 UTF-8로 했기 때문에, utf-8로 인코딩타입이 결정된다.