`

Struts+Ajax get 请求提交表单 中文乱码 解决方案

阅读更多

相信大多数朋友都遇到过Struts提交表单的中文乱码问题!网络上的解决方案也N多。

我也尝试了不少。这一个乱码问题我弄了7个小时。。最后还是解决了 分享一下吧

例如 get 请求

你用ajax发送数据过去

$.get("login.do?"userName="+name,null,function(data){...........});

 

这个name 是提交的中文内容 那么你改成

 $.get("login.do?"userName="+encodeURI(encodeURI(name)),null,function(data){.........});

 

 把name进行2次转码 古人就这么流传下来的!这个encodeURI是javascript的函数!

如果你没用ajax,就是直接get方式提交 也同样使用 加上这句转码 就是麻烦了一些。

 

好了页面处理完了! 下面处理后台

我们再接受到数据后 需要给转回来 数据被传进了FormBean 这个无疑吧!

从FormBean取出数据后 需要

String name=URLDecoder.decode(username,"utf-8");

 

再度转回。这次的URLDecoder 是java.import java.net.URLDecoder;包中的 。

最后这个name 就是中文的噢!如果你的应用非常简单 就在用户登陆上处理中文 那么你就这样写,也不需要任何的过滤器!

 

那如果你是post 请求就更简单了

直接写一个过滤器 里面写上

servletRequest.setCharacterEncoding("utf-8");

这么一句就OK搞定了!然后配置web.xml. 然后页面也不用转码之类的!

 

那你如果觉得这样处理post 和 处理get 的分开处理 超麻烦 的 ,或者你说你的应用很庞大,get ,post的请求会很多 都需要这种转码处理 那么给你推荐一种方式 如果你是get请求那句js的函数一定必不可少 ,然后写一个类 继承子 RequestProcessor 这是import org.apache.struts.action.RequestProcessor;包中的噢!

package com.xiaonei.zy.util;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.RequestProcessor;
public class changeCode extends RequestProcessor {
	public boolean processPreprocess(HttpServletRequest request,
			HttpServletResponse response)
	{
		    
		    if( request.getMethod().compareToIgnoreCase("post")>=0)
			
		    {System.out.println("进入post请求");
			       try {
				request.setCharacterEncoding("UTF-8");

			           } catch (UnsupportedEncodingException e)
			           {
			                e.printStackTrace();
			           }
			  }
		    else{
		    	System.out.println("进入get请求验证码");
		    		    	/*获取表单中所有的字段元素*/
		         Iterator iter=request.getParameterMap().values().iterator();
			           while(iter.hasNext())
			           { 	//迭代表单中所有的元素
			                String[] parames=(String[])iter.next();
			                  for (int i = 0; i < parames.length; i++) 
			                  {
			                   try { System.out.println(parames[i]);
			                   	/*看下面那句是不是眼熟 就是把在页面js转码过的 字符 再给转回来*/
				 parames[i]=URLDecoder.decode(parames[i],"utf-8");			                  
			                       } catch (UnsupportedEncodingException e) 
			                       {
			                          e.printStackTrace();
			                        }
			                   }   
			            }   

			     }
		    return super.processPreprocess(request, response);
    }
		
	
}

 上面的代码写完 还需要配置struts-config.xml

  <controller processorClass="com.zy.util.changeCode" />

 

这样写后 你也不用配置任何过滤器了! 也不用修改tomcat 的配置文件。是不是很好使?

如果还是出现乱码问题 QQ136836301 加我吧 帮助你一起解决

欢迎朋友们做客http://136836301.qzone.qq.com 里面有许多我提供的资源!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics