본문 바로가기

WEB_Programming/Struts

EncodingFilter 로 한글 처리 하기

인코딩은 영어권 개발자가 아닌경우에는 필수적으로 변환을 해야하는 작업이다.

이러한 인코딩 작업을 위해서 기존에 개발자들은 매번 다음과 같은 코드를 작성하는 수고를 했어야 했다.

String name = new String(request.getParameter("name").getBytes("iso-8859-1"), "UTF-8");

그러나 이러한 작업은 매우 번거롭고 귀찮은 작업이 아닐수 없다.
전달되는 파라미터가 몇개인데... 말이다.

그럴때 다음과 같이 인코딩 필터를 이용하여 사용하면 편리할 것이다.

package XXX;

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;

/**
 * @author KIDO
 * 인코딩 필터 처리 수행
 */
public class CommonEncodingFilter implements Filter {
    /**
     * 인코딩을 수행할 인코딩 캐릭터 셋 지정
     */
    private String encoding = null;

    /**
     * 필터 설정 관리자
     */
    protected FilterConfig filterConfig = null;

    /* (non-Javadoc)
     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
     */
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
    }
   
    /* (non-Javadoc)
     * @see javax.servlet.Filter#destroy()
     */
    public void destroy() {

        this.encoding = null;
        this.filterConfig = null;

    }

    /* (non-Javadoc)
     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
     */
    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);
    }

    /**
     * @return
     */
    public FilterConfig getFilterConfig() {
        return filterConfig;
    }

    /**
     * @param cfg
     */
    public void setFilterConfig(FilterConfig cfg) {
        filterConfig = cfg;
    }
}

이렇게 인코딩 필터를 개발했다면, 다음으로는 Web.xml에 필터를 정의해야 한다.
참고로 인코딩 필터의 위치를 중요하게 봐야한다.
</servlet-mapping>다음에 인코딩 필터를 지정하고 있음을 확인하기 바란다. 이 부분의 순서는 매우 중요하다.
...
    </servlet-mapping>
   
    <filter>
        <filter-name>Encoding Filter</filter-name>
        <filter-class>kr.co.aritaum.brand.common.CommonEncodingFilter</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을 지원하도록 권장하고 있다. 그러므로 UTF-8을 이용하여 사용하는 것이 아마도 몸에 좋을듯....

EUC-KR, KSC-5601의 경우 몇몇 패키지를 이용할때 문제가 발생하더라구...
가장 큰 예가 나모 웹에디터에서 말이다.