相信大多数朋友都遇到过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 里面有许多我提供的资源!