当前位置:编程学习 > JSP >>

Servlet输出中文乱码的问题之Filter解决方法

Servlet输出中文乱码的问题之Filter解决方法

Filter过滤器的代码如下:

package filter;

import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class charsetFilter implements Filter
{

    @Override
    public void destroy()
    {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException
    {
        /**
         * ServletRequest.getParameterMap()返回一个Map
         * 参数的名字做为Map的key,而参数的值则做为Map的值
         * Map的key是String类型,而Map的值则是String[]类型
         */
        Map parameterMap = request.getParameterMap();
        /**
         * 如果返回的结果不为空,则执行代码
         */
        if(!parameterMap.isEmpty())
        {
            /**
             * 先利用Map.keySet()方法, 返回的是些些映射中包含的键的set视图,返回类型是Set
             * 然后再利用Set.iterator()方法生一个迭代器
             */
            Iterator it = parameterMap.keySet().iterator();
            /**
             * 创建一个String类型的数组, 用来装此映射中的value
             */
            String value[] = null;
           
            while(it.hasNext())
            {
                /**
                 * 将键对应的值放放到String数组中.
                 */
                value = (String[])parameterMap.get(it.next());
                /**
                 * 利用循环来遍历String数组中的所有字符串
                 * 再利用String的构造方法String(byte[] bytes, String charsetName)
                 * 方法来生成新的编码的字符串.
                 */
                for(int i=0;i<value.length;i++)
                {
                    value[i] = new String(value[i].getBytes("ISO-8859-1"),"UTF-8");
                }
            }
        }
        chain.doFilter(request,response);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException
    {

    }

}

 

2. Web.xml文件中对Filter的配置, 需要将Filter配置的代码段放在配置Servlet代码段之前:

 <filter>
      <filter-name>charsetFilter</filter-name>
      <filter-class>filter.charsetFilter</filter-class>
  </filter>
 
  <filter-mapping>
      <filter-name>charsetFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

 

说明: <url-pattern>/*</url-pattern>


上面的"/*"代码的意思是对所有的Servlet/JSP/HTML进行过滤操作, 如果只想对某一个Servlet/JSP/HTML进行操作, 只需要将"*"换成其相应的名字即可.

补充:Jsp教程,Java基础 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,