相信大多数朋友都遇到过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 里面有许多我提供的资源!
分享到:
相关推荐
关于struts+AJAX的实例,十分有价值,适合初学者,值得下载
Struts+ajax的增删查,改写一半,有兴趣可以自己改
Struts+Hibernate+Ajax注册示例
AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架) AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架) AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架)
Struts 2并没有开发新的AJAX框架,而是使用时下Java EE平台中比较流行的AJAX框架——Dojo和DWR。本文详细讲解了关于struts与AJAX标签的相关技术!
简单公文管理 struts+spring+ibatis +ajax 分页
这是一个Struts+Spring+Hibernate+Ajax的Demo,ajax主要用的是dwr框架再加上dojo
struts + spring + hibernate + velocity + ajax + jotm + acegi
零基础学Java_Web开发:JSP+Servlet+Struts+Spring+Hibernate+Ajax 很不错一个ppt 大家可以互相看一下
通俗易懂 有解释 struts+ajax分页程序
精通Java Web整合开发(Jsp+Ajax+Struts+Hibernate)(第2版) Java Structs2.1 Spring3.0 Hibernate3.3 PDF有231M,只能分成4个包上传。 虽然是图片的,但绝对清晰完整,可以放心下载。 前面已经上传过,但第一个包忘...
STRUTS+AJAX+JSP 请求到后台乱码问题可在AJAX请求URL之前把参数进行encodeURI()转码来解决,遇到类似情况的朋友可以参考下
Ajax实现helloworld!实例,eclipse+struts+Ajax初学者必看
全面覆盖据ava web 开发基础JSP+Servlet+Ajax+ssh框架整合 提供大量案例进行分析
用案例学Java Web整合开发:Java+Eclipse+Struts 2+Ajax
struts+hibernate+ajax级联菜单struts+hibernate+ajax级联菜单
这圣思园张老师的一个上课演示文件,讲的是struts2+jquery+Ajax实现异步交互的简单例子。
Spring+Hibernate+Struts+ajax+jQuery easyUI的示例包含数据库
Struts2+Ajax实现的用户登录 Struts2 Ajax Sprint Hibernate