본문 바로가기

WEB_Programming

[WAS] 인코딩 필터 사용시 주의할점.

package kr.co.aritaum.brand.common;

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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @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 {

        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse res = (HttpServletResponse)response;
        
        String requestURI = req.getRequestURI();

        if(requestURI.startsWith("/apmember")) {
            //    인코딩 없이 스킵 수행한다.
        }
        else {
            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;
    }
}


인코딩 필터를 이용하여 작업할때, 레거시 시스템과 연동하여, 웹 작업을 해야하는 경우가 있다.

이런경우 보통 인코딩 타입이 일치하게 개발을 하게 되지만,
인코딩 타입이 서로 다를경우 위 예제와 같이 인코딩 필터를 구분해 주어야 한다.

레거시 시스템의 경우 보통 사용하는 웹펭지 폴더나, 요청 URI위치가 다르기 때문에
특정 URI에 별도의 인코딩을 수행해 주어야 정상적으로 동작한다.

이 문제로 1루가 소요되서 그나마 다행이지만, 서버를 내렸다 올릴수 있는 환겨이 아닐 때에..
이러한 문제를 쉽게 잡을 수 있어서 다행이다.

'WEB_Programming' 카테고리의 다른 글

[JSP] Request가 멀티파트 폼인지 검사하는 루틴  (0) 2008.08.13
XStream 이용하기  (0) 2008.08.07
JSP Include 2가지 종류  (0) 2008.07.21
JSP Cookie 이용하기  (0) 2008.07.11
자바스크립트 화면 인쇄  (0) 2008.07.03