jQuery Ajax传值到Servlet出现乱码问题的解决方法

所属分类: 网络编程 / JavaScript 阅读数: 255
收藏 0 赞 0 分享

最近在学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在传递前没有乱码

  下面贴出的Ajax代码,我要给后台传递的参数是get类型,参数名叫criticalword,代码如下:

$('#search').autocomplete({
source:function(request,response){
     alert('看看在传递前有没有乱码'+request.term);
$.ajax({
type:'get',
url:'/SGAME/servlet/IndexSearchItems',
data:{criticalword:encodeURI(request.term)},
success: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.net包,用于对Ajax的编码进行解码。

  完成以上三个步骤后,你可以像我一样,在返回前加一个System.out.println(yourParam)试试,如果是中文那就没问题啦

4.保证Servlet在响应(response)给jsp没有乱码

 其实在第三部的要点b设置好后,其实返回给html或jsp就应该之中文了。

注:如果你用的是post方法,直接在Ajax里加上contentType:application/x-www-form-urlencoded;charset=utf-8就可以了,不需要进行转码。

更多精彩内容其他人还在看

Js nodeType 属性全面解析

本文是对Js nodeType的属性进行了全面分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

浅析用prototype定义自己的方法

下面小编将通过实例由浅入深讲解 prototype 的具体使用方法。需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

使用jQuery解决IE与FireFox下createElement方法的差异

使用jQuery解决IE与FireFox下createElement方法的差异。需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

jQuery探测位置的提示弹窗(toolTip box)详细解析

提示弹窗(toolTip box)经常会被用到,但是本文总要的不是弹,也不是窗,而是探测位置,在适当的地方弹窗。需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

JS中typeof与instanceof之间的区别总结

本文是对JS中typeof与instanceof之间的区别进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

JS正则表达式大全(整理详细且实用)

JS正则表达式大全(整理详细且实用)。需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

本文是对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

Jquery AJAX POST与GET之间的区别

本文是对Jquery中AJAX POST与GET之间的区别。进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

优化Jquery,提升网页加载速度

本文是对优化Jquery,提升网页加载速度方面进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

提高jQuery性能的十个诀窍

下面小编就为大家分享一篇提高jQuery性能的十个诀窍。很实用的。需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享
查看更多