最近在学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就可以了,不需要进行转码。

ajax html页面传值乱码,jQuery Ajax传值到Servlet出现乱码问题的解决方法相关推荐

  1. ajax html页面传参数,jQuery AJAX:如何将大型HTML标记作为参数传递?

    如何使用jQuery AJAX将大型HTML标记数据传递给我的PHP?当我收到结果时,这是错误的. jQuery AJAX代码: $('#saveButton').click(function() { ...

  2. flask ajax 上传 图片,flask jQuery ajax 上传文件

    1.html 代码 注:1.html 部分主要是一个form表单,其中表单的enctype = "multipart/form-data" 必须要有. 2.由于我的页面背景颜色设置 ...

  3. Ajax设置超时时长,jquery ajax超时设置

    var ajaxTimeoutTest = $.ajax({ url:'',  //请求的URL timeout : 1000, //超时时间设置,单位毫秒 type : 'get',  //请求方式 ...

  4. jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法

    jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法 参考文章: (1)jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法 ( ...

  5. 页面跳转之转发和重定向+Servlet中文乱码问题

    页面跳转之转发和重定向+Servlet中文乱码问题 一.页面跳转 <?xml version="1.0" encoding="UTF-8"?> &l ...

  6. jquery升级到新版本报错[jQuery] Cannot read property ‘msie’ of undefined错误的解决方法...

    最近把一个项目的jQuery升级到最新版,发现有些页面报错Cannot read property 'msie' of undefined.上jQuery网站上搜了一下,原因是$.browser这个a ...

  7. 记Outlook插件与Web页面交互的各种坑 (含c# HttpWebRequest 连接https 的完美解决方法)

    记Outlook插件与Web页面交互的各种坑 (含c# HttpWebRequest 连接https 的完美解决方法) 参考文章: (1)记Outlook插件与Web页面交互的各种坑 (含c# Htt ...

  8. [jQuery] Cannot read property ‘msie’ of undefined错误的解决方法

    [jQuery] Cannot read property 'msie' of undefined错误的解决方法 参考文章: (1)[jQuery] Cannot read property 'msi ...

  9. ajax传值从前台到后台乱码,jquery ajax传值,get方式后台中文乱码

    经过jquery ajax传值,后台出现中文乱码,通过一番摸索后发现原来客户端浏览器经过get方式传递到项目后台时,编码格式是ISO-8859-1,须要咱们在后台通过转码才能正常使用.方法以下:jav ...

最新文章

  1. Python 零碎信息-基础 02
  2. 七桥问题c语言程序数据结构,数据结构与算法学习——图论
  3. 来自Curriki和SankoréWiki的免费教育资源
  4. SCCM 2012远程控制
  5. 初探nginx架构(100%)
  6. Could not calculate build plan
  7. linux 无线网络特别慢,Ubuntu 16.04 LTS连接无线上网慢的解决
  8. 思科下一代模拟器EVE-NG做一个ASA防火墙简单小实验
  9. matlab 对直方图均衡化,基于直方图均衡化的图像增强技术分析与Matlab实现_直方图均衡化matlab...
  10. VB6.0调用WebService
  11. java毕业生设计学生课堂互动教学系统计算机源码+系统+mysql+调试部署+lw
  12. VR全景创业好不好做?蛙色VR为你解答
  13. SylixOS动态内存分配操作
  14. 微信小程序实现微信APP上的扫一扫扫码跳到小程序对应的结果页面和签字等功能
  15. 修改下拉状态栏点击屏幕录制后出现ANR。禁用Hotspot tethering菜单下的 “Wi-Fi hotspot。默认系统语言为英文。
  16. 网上作业批改系统的设计与实现(JSP,MySQL)
  17. IP地址分类及子网划分
  18. 计算机职称证的用途,计算机软考高项过了有什么用处
  19. linux小主机玩法,遗传算法有好多有趣的玩法,不只能用来凑论文
  20. 磁盘碎片整理软件评测

热门文章

  1. java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解
  2. ctf 抓捕赵德汉_2017年网络空间安全技术大赛部分writeup
  3. vue 文件转换二进制_Vue利用Blob下载原生二进制数组文件
  4. oracle startup作用,【学习笔记】Oracle打补丁后startup migrate、startup upgrade区别分析...
  5. 快手用计算机说唱的叫什么,HIPHOP人物:“我们呢说唱,会在快手上爆炸!”
  6. HTTP1.1/2.0与QUIC协议
  7. 洛谷P1494 [国家集训队]小Z的袜子
  8. Intellij插件之JRebel
  9. 实验四android开发基础
  10. DataGridView使用方法汇总