/*
 * Created on 2005-8-14
 * 
 * TODO To change the template for this generated file go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
package filters;


    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.UnavailableException;

    public class SetCharacterEncodingFilter implements Filter {
        /**
         * 代表编码类型的String对象
         */
        protected String encoding = null;

        /**
         * 代表过滤器配置的FilterConfig对象
         */
        protected FilterConfig filterConfig = null;

        /**
         * 是否忽略编码
         */
        protected boolean ignore = true;

        // --------------------------------------------------------- Public
        // Methods
        public void destroy() {
            this.encoding = null;
            this.filterConfig = null;
        }

        public void doFilter(ServletRequest request, ServletResponse response,
                             FilterChain chain)
    	throws IOException, ServletException {

            // 设置请求的编码
            if (ignore || (request.getCharacterEncoding() == null)) {
                String encoding = selectEncoding(request);
                if (encoding != null)
                    request.setCharacterEncoding(encoding);
            }
            chain.doFilter(request, response);
        }
        /**
         * 过滤器初始化函数，读取配置参数
         */
        public void init(FilterConfig filterConfig) throws ServletException {
    	        this.filterConfig = filterConfig;
            this.encoding = filterConfig.getInitParameter("encoding");
            String value = filterConfig.getInitParameter("ignore");
            if (value == null)
                this.ignore = true;
            else if (value.equalsIgnoreCase("true"))
                this.ignore = true;
            else if (value.equalsIgnoreCase("yes"))
                this.ignore = true;
            else
                this.ignore = false;
        }
     
        protected String selectEncoding(ServletRequest request) {
            return (this.encoding);
        }
    }
