package com.cn.filter; // 定义过滤器包名

import java.io.IOException; // 导入IOException类，用于处理IO异常
import javax.servlet.Filter; // 导入Filter接口，用于创建过滤器
import javax.servlet.FilterChain; // 导入FilterChain类，用于过滤器链
import javax.servlet.FilterConfig; // 导入FilterConfig类，用于过滤器配置
import javax.servlet.ServletException; // 导入Servlet异常类
import javax.servlet.ServletRequest; // 导入ServletRequest接口
import javax.servlet.ServletResponse; // 导入ServletResponse接口
import javax.servlet.http.HttpServletRequest; // 导入HttpServletRequest类
import javax.servlet.http.HttpServletResponse; // 导入HttpServletResponse类

/**
 * Servlet Filter implementation class EncodingFilter
 * <p>该过滤器用于设置请求和响应的编码，确保字符编码的正确性。</p>
 */
public class EncodingFilter implements Filter {

    /**
     * Default constructor.
     * <p>EncodingFilter的默认构造函数。</p>
     */
    public EncodingFilter() {
        // TODO Auto-generated constructor stub
    }

    /**
     * Destroy method.
     * <p>销毁过滤器时调用的方法，可以在此释放资源。</p>
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }

    /**
     * Do filter method.
     * <p>过滤器的核心方法，用于在请求处理链中执行过滤任务。</p>
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 转换类型
        HttpServletRequest req = (HttpServletRequest) request; 
        HttpServletResponse res = (HttpServletResponse) response;  
        
        // 获取请求URI
        String uri = req.getRequestURI();
        
        // 如果请求是静态资源（如CSS、JS、图片），则直接放行
        if (uri.contains(".css") || uri.contains(".js") || uri.contains(".png") || uri.contains(".jpg")) {
            chain.doFilter(request, response);
        } else {
            // 设置请求和响应的编码为UTF-8
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8"); 
            // 继续过滤器链
            chain.doFilter(request, response);
        }
    }

    /**
     * Init method.
     * <p>初始化过滤器时调用的方法，可以在此进行初始化设置。</p>
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }

}
