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


Posted in Javascript onOctober 09, 2016

最近在学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

如下图:

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

当你的第一个弹窗没有乱码,那说明在传给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就可以了,不需要进行转码。

Javascript 相关文章推荐
JQuery 图片延迟加载并等比缩放插件
Nov 09 Javascript
javascript 操作select下拉列表框的一点小经验
Mar 20 Javascript
使用ExtJS技术实现的拖动树结点
Aug 05 Javascript
javascript学习笔记(十九) 节点的操作实现代码
Jun 20 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
Mar 29 Javascript
js+css实现的简单易用兼容好的分页
Dec 30 Javascript
Backbone.js中的集合详解
Jan 14 Javascript
浅谈javascript基础之客户端事件驱动
Jun 10 Javascript
用JS中split方法实现彩色文字背景效果实例
Aug 24 Javascript
JS实现列表页面隔行变色效果
Mar 25 Javascript
微信小程序发送短信验证码完整实例
Jan 07 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
Aug 26 Javascript
BootStrap中Table分页插件使用详解
Oct 09 #Javascript
微信小程序 for 循环详解
Oct 09 #Javascript
微信小程序 条件渲染详解
Oct 09 #Javascript
手机浏览器 后退按钮强制刷新页面方法总结
Oct 09 #Javascript
最实用的jQuery分页插件
Oct 09 #Javascript
js本地图片预览实现代码
Oct 09 #Javascript
js html css实现复选框全选与反选
Oct 09 #Javascript
You might like
PHP中文汉字验证码
2007/04/08 PHP
php 保留字列表
2012/10/04 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
AngularJS内置指令
2015/02/04 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
2018/08/13 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
用python删除java文件头上版权信息的方法
2014/07/31 Python
详解Python中DOM方法的动态性
2015/04/11 Python
python实现12306火车票查询器
2017/04/20 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
医学生自我鉴定范文
2013/11/08 职场文书
银行奉献演讲稿
2014/09/16 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
写给父母的感谢信
2015/01/22 职场文书
行政复议答复书
2015/07/01 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
基于Redis的List实现特价商品列表功能
2021/08/30 Redis
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python
pt-archiver 主键自增
2022/04/26 MySQL
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技