过滤器(Filter)解决JSP的Post和Request中文乱码

import javax.servlet.*;
import javax.servlet.http.*;

public class CharsetFilter implements Filter
{
    public void destroy()
    {
       
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    {
        try
        {
            HttpServletRequest httpRequest = (HttpServletRequest)request;
            String method = httpRequest.getMethod().toLowerCase();
            if(method.equals("post"))
            {
                //如果是post,即表单方法,直接设置charset即可
                request.setCharacterEncoding("UTF-8");
            }
            else if(method.equals("get"))
            {
                //如果是get方法
                request.setCharacterEncoding("UTF-8");
                request = new HttpServletRequestWrapper((HttpServletRequest)request)
                {
                    public String getParameter(String str)
                    {
                        try
                        {
                            return new String(super.getParameter(str).getBytes("iso-8859-1"),"GBK");
                        }
                        catch(Exception e)
                        {
                            return null;
                        }
     
                    }
                };

            }
           
            chain.doFilter(request, response);
        }
        catch(Exception e){}
    }
   
    public void init(FilterConfig filterConfig)
    {
       
    }
}

过滤器配置:

    <filter>
        <filter-name>CharFilter</filter-name>
        <filter-class>CharsetFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CharFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

Leave a Reply

Your email address will not be published.