HttpServletRequest.getParameter()出现乱码现象解决方案

一、首先在项目中添加一个过滤器类,用来将所有参数转化为指定格式(UTF-8)

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

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

/**
 * 解决中文乱码
 * @author Venyo
 *
 */
public class FormFilter implements Filter {
	private FilterConfig config;

	public void destroy() {
	}

	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");<span style="color:#ff0000;">// 可以在此修改指定编码格式</span>
                }
            }
        }
        chain.doFilter(request,response);
	}

	public void init(FilterConfig config) throws ServletException {
		this.config = config;
	}
}


二、在 web.xml 文件中配置以上过滤器

        <filter>
		<filter-name>FormFilter</filter-name>
		<filter-class>com.pled.filter.FormFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>FormFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


这两步之后传递到 Servlet 的 doGet 或 doPost 方法中的参数就都被转换为指定编码格式(UTF-8)


三、经过以上两步后,我调用 request.getParameter("key) 获得的参数还是乱码,这个是什么原因我暂时还搞不明白。但可以确定的一点是 request 中的 ParameterMap 中的 value 值全部都没有乱码,这是我调试的时候仔细看过的。所以接下来:

Map<String , String[]> map = request.getParameterMap();
String value = map.get("key")[0];
这样获取到的 value 就不会产生乱码了。

虽然感觉多写了点代码,变得麻烦了,可是确实能够解决问题。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值