开发项目用Ajax的Post方法提交信息到请求的servlet,输出遇到中文乱码,纠结了好几天,总结了网络上很多高手的心得,用了两步解决了乱码:

  1. 在JS端,对提交的字符串进行两次编码:
    Js代码
    1. <%@pagecontentType="text/html"pageEncoding="gbk"%>
    2. <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"
    3. "http://www.w3.org/TR/html4/loose.dtd">
    4. <html>
    5. <head>
    6. <Metahttp-equiv="Content-Type"content="text/html;charset=gbk">
    7. <title>JSPPage</title>
    8. <scripttype="text/javascript">
    9. varreq;
    10. functionvalidate(){
    11. //获取表单提交的内容
    12. varidField=document.getElementById("userName").value;
    13. //要发送的字符串数据
    14. varcontent="id=hello&message="+idField+"&say=我是帅哥";
    15. //重点:对content含中文字符的字符串进行两次编码
    16. content=encodeURI(content);
    17. varurl="validate.do";
    18. //创建一个XMLHttpRequest对象req
    19. if(window.XMLHttpRequest){
    20. //IE7,Firefox,Opera支持
    21. req=newXMLHttpRequest();
    22. }elseif(window.ActiveXObject){
    23. //IE5,IE6支持
    24. newActiveXObject("Microsoft.XMLHTTP");
    25. }
    26. req.open("post",url,true);
    27. req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    28. req.onreadystatechange=callback;
    29. //send函数发送请求,参数
    30. req.send(content);
    31. functioncallback(){
    32. //alert(req.readyState);
    33. //alert(req.status);
    34. if(req.readyState==4&&req.status==200){
    35. //alert(req.responseText);
    36. varcheck=req.responseText;
    37. show(check);
    38. functionshow(str){
    39. document.getElementById("info").innerHTML=str;
    40. </script>
    41. </head>
    42. <body>
    43. <h1>TestAjax</h1><p>
    44. <formaction=""method="get"name="form">
    45. <br>
    46. 输入用户名:
    47. <inputtype="text"size="10"maxlength="8"id="userName"name="name"onblur="validate()">
    48. <spanid="info"></span>
    49. 输入商品名:
    50. <inputtype="submit"name="refer">
    51. </form>
    52. </body>
    53. </html>
  2. 在servlet端,对接收的数据的进行一次解码:
    Java代码
      packagecom.model;
    1. importjava.io.IOException;
    2. importjava.io.PrintWriter;
    3. importjava.util.Enumeration;
    4. importjavax.servlet.servletexception;
    5. importjavax.servlet.http.HttpServlet;
    6. importjavax.servlet.http.HttpServletRequest;
    7. importjavax.servlet.http.HttpServletResponse;
    8. importjava.net.URLDecoder;
    9. /**
    10. *
    11. *@authorGavin
    12. */
    13. publicclassDoAjaxServletextendsHttpServlet{
    14. protectedvoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)
    15. throwsservletexception,IOException{
    16. response.setContentType("text/html;charset=gbk");
    17. request.setCharacterEncoding("gbk");
    18. PrintWriterout=response.getWriter();
    19. try{
    20. response.setHeader("Cache-Control","no-store");
    21. response.setHeader("Pragma","no-cache");
    22. response.setDateHeader("Expires",0);
    23. //这里有个小问题:如果写成Stringput=null;将会输出一个null后面再加上增加的字符
    24. Stringput="";
    25. for(Enumeration<String>e=request.getParameterNames();e.hasMoreElements();){
    26. Stringh=(String)e.nextElement();
    27. Stringc=(String)request.getParameter(h);
    28. put+=c;
    29. //重点在这里,对接受到的信息进行解码
    30. StringputDecoded=java.net.URLDecoder.decode(put,"utf-8");
    31. System.out.println(pute);
    32. out.write("messageis:"+putDecoded);
    33. finally{
    34. out.close();
    35. @Override
    36. voiddoGet(HttpServletRequestrequest,250); line-height:18px"> processRequest(request,response);
    37. voiddoPost(HttpServletRequestrequest,85); font-weight:bold">publicStringgetServletInfo(){
    38. return"Shortdescription";
    39. }//</editor-fold>
    40. }

Ajax通过POST方法发送中文信息乱码解决的更多相关文章

  1. 关于h5中的fetch方法解读(小结)

    这篇文章主要介绍了关于h5中的fetch方法解读(小结),fetch身为H5中的一个新对象,他的诞生,是为了取代ajax的存在而出现,有兴趣的可以了解一下

  2. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  3. ios – 错误域= NSURLErrorDomain代码= -1003“找不到具有指定主机名的服务器

    当我尝试在设备上运行应用程序时出现此错误.当我在模拟器上运行它并且post请求正常工作时,我没有收到此错误.这是我的代码片段:任何帮助表示赞赏.谢谢解决方法此错误通常会提示DNS相关问题.检查设备上的DNS设置并确认您可以使用Safari或其他浏览器浏览互联网.如果有一个url,你可以在同一台服务器上获取,尝试直接在设备上的Safari中访问它.

  4. ios – 使用NSURLSession获取JSON数据

    我试图从谷歌距离api使用NSURLSession获取数据,但如下所示,当我打印响应和数据时,我得到的结果为NULL.可能是什么问题?

  5. ios – Xcode Bot:如何在post触发器脚本上获得.ipa路径?

    我正在使用机器人来存档iOS应用程序,我需要获取.ipa产品路径才能将其发布到我们的分发系统中.机器人设置:并使用脚本打印所有env变量,其中不包含ipa文件的路径.此外,一些变量指向不存在的目录,即:XCS_OUTPUT_DIR这里的env变量输出:除此之外,我还能够确认.ipa文件是在另一个文件夹中创建的(/IntegrationAssets//

  6. ios – 错误域= com.alamofire.error.serialization.response代码= -1011“请求失败:禁止

    任何人都可以帮我解决以下错误–>在AFNetworking2.5中使用“删除”方法时出错解决方法我发现,如果我的手机时钟不同步……它不允许我更新…也许检查你的手机设置到正确的时间“自动区”,看看是否有效…

  7. ios – 使用CocoaPods post install hook将自定义路径添加到HEADER_SEARCH_PATHS

    解决方法在Podfile中定义一个方法:然后在post_install中调用该方法:

  8. iOS网页/原生应用Facebook登录弹出 – 失败?

    如果我重新启动app/web-app,用户将自动登录,并重定向到成功页面.我认为是导致问题的原因当您在Firefox/Chrome/Safari浏览器中运行网页时,Facebook登录对话框会弹出一个弹出窗口或另一个选项卡.我相信这是这个弹出页面的一个问题,以及当成功登录时Javascript如何与自身通信.window.close的东西没有返回的根页面…失败的解决方法由于应用程序挂在前面提到的URL上,我决定在shouldStartLoadWithRequest(…)中添加if语句以强制UIWebvie

  9. ios – Watchkit新会话不起作用

    我的手表扩展中有两个视图控制器.每当我打电话时我只得到第一个视图控制器的响应,并在第二个viewcontroller中得到错误WCSession在app和watch扩展中启动.任何建议?

  10. 使用Firebase iOS Swift将特定设备的通知推送到特定设备

    我非常感谢PushNotifications的帮助.我的应用聊天,用户可以直接向对方发送短信.但是如果没有PushNotifications,它就没有多大意义.它全部设置在Firebase上.如何将推送通知从特定设备发送到特定设备?

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部