jQuery Ajax传值到Servlet出现乱码问题的解决方法
最近在学jquery ui,在做一个小功能的时候需要将前台的值获取到,通过Ajax传递给Servlet,然后再在返回数据结果,在Servlet接受参数的时候,通过后台打印,发现接受乱码,代码示例如下
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String testword=request.getParameter("criticalword") System.out.println(testword); out.println(testword); out.flush(); out.close(); }
我只用的是ajax的get方式传递的,所以上面也只截取了doGet()方法的代码,那么对于乱码,会有哪几种情况呢,我谈一下我的看法,具体每个阶段的方法我会以代码和截图的方式给出
1.保证jsp网页没有乱码
得确保你的JSP页面没有乱码,具体代码如下
%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8" %
这句话添加在网页最顶部就可以了,补充下page指令的两个参数的具体含义,很多人也许会用,我觉得还是有必要了解下的
a.pageEncoding参数
pageEncoding属性用来指定JSP页面的字符编码,默认为ISO-8859-1,由于该方法不支持中文,所以,如果要指定JSP页面的字符编码方式支持中文编码,则需要将page指令的pageEncoding属性设置为"GB2312"、"GBk"或"UTF-8"。
b.contentType参数
contentType属性用来指定JSP页面输出内容的类型和字符编码方式。属性值中的内容类型部分可以为text/html(纯文本HTML页面)、text/plain(纯文本文件)等。
2.保证jQuery Ajax在传递前没有乱码
狼蚁网站SEO优化贴出的Ajax代码,我要给后台传递的参数是get类型,参数名叫criticalword,代码如下
$('#search').aulete({ source:function(request,response){ alert('看看在传递前有没有乱码'+request.term); $.ajax({ type:'get', url:'/SGAME/servlet/IndexSearchItems', data:{criticalword:encodeURI(request.term)}, suess:function(response,status,xhr){ alert(response); } }); }, delay:100 })
正如我代码红色所标记的,你在传递前先alert()弹窗,测测看是不是你的js文件已经乱码,如果是的话,解决方法
1.回查上一步是不是没解决
2.js文件编码问题:在资源管理器用记事本打开js,然后另存为,在编码里选择utf-8
如下图
当你的第一个弹窗没有乱码,那说明在传给Servlet前没有问题,那个在进入下一步前先做一个准备工作,如上述红色代码所示,先给参数转码
criticalword:encodeURI(request.term)
这个转码是为了防止在Servlet中出现接收乱码的函数,形式为encodeURI(param)
3.保证Servlet在接受Ajax的参数时(request)没有乱码
到了这一步说明你离成功不远了,只需要先request和resopnse设置编码的方式,然后再解码即可,doGet代码如下
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String testword=URLDecoder.decode(request.getParameter("criticalword"),"utf-8"); System.out.println(testword); out.println(testword); out.flush(); out.close(); }
其中主要有三个要点
a.response.setContentType():用于设置响应回jsp或者Ajax的字符编码。
b.request.setCharacterEncoding():用于设置接收请求的响应编码。
c.URLDecoder.decode():此函数需要先导入java.包,用于对Ajax的编码进行解码。
完成以上三个步骤后,你可以像我一样,在返回前加一个System.out.println(yourParam)试试,如果是中文那就没问题啦
4.保证Servlet在响应(response)给jsp没有乱码
其实在第三部的要点b设置好后,其实返回给html或jsp就应该之中文了。
注如果你用的是post方法,直接在Ajax里加上contentType:application/x--form-urlencoded;charset=utf-8就可以了,不需要进行转码。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程