遇到的问题是: 前台利用Ajax, get方式向后台发送中文数据出现乱码.

解决办法是前台两次编码, 后台一次解码即可.

前台jsp文件

  1. 1 var text = "张三";
  2. 3 var username = encodeURI(encodeURI(text));

后台servlet代码

  1. String username =URLDecoder.decode("对应字段","utf-8");

简单登录校验案例.

案例说明:为验证Ajax请求后端控制台中文乱码问题是否解决.

简单登录界面, 用户输入用户名登录. 若用户名未输入用户名则提示"用户名不能为空";若用户名输入为"张三"则提示用户名已被占用.其它均无提示.

前台页面index.jsp

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: hejjon
  4. Date: 2019/6/3
  5. Time: 10:19
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <%
  10. String path = request.getContextPath();
  11. String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
  12. + path + "/";
  13. %>
  14. <html>
  15. <head>
  16. <base href="<%=basePath%>">
  17. <title>用户登录界面</title>
  18. <script type="text/javascript">
  19. var xhr;
  20. function change() {
  21.  
  22. var val = document.getElementById("uname").value;
  23. var uname = encodeURI(encodeURI(val));
  24.  
  25. if (uname === "") {
  26. document.getElementById("namespan").innerHTML = "用户名不能为空";
  27. } else {
  28. // 创建xhr对象
  29. xhr = new XMLHttpRequest();
  30. // 与服务器建立连接
  31. xhr.open("get", "servlet/login?uname=" + uname, true);
  32. // 执行回调函数
  33. xhr.onreadystatechange = process;
  34. // 发送数据
  35. xhr.send(null);
  36. }
  37.  
  38. }
  39.  
  40. function process() {
  41. if (xhr.readyState == 4 && xhr.status == 200) {
  42. // 接收后台响应
  43. var text = xhr.responseText;
  44. document.getElementById("namespan").innerHTML = text;
  45. }
  46. }
  47. </script>
  48. </head>
  49. <body>
  50. <p>
  51. 用户: <input type="text" name="uname" id="uname" onblur="change()"/><span id="namespan"></span>
  52. </p>
  53. <p>
  54. 密码: <input type="password" name="pwd" id="pwd"/>
  55. </p>
  56. </body>
  57. </html>

后台LoginServlet.java

  1. import javax.servlet.ServletException;
  2. import javax.servlet.annotation.WebServlet;
  3. import javax.servlet.http.HttpServlet;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import java.io.IOException;
  7. import java.io.PrintWriter;
  8. import java.net.URLDecoder;
  9.  
  10. @WebServlet("/servlet/login")
  11. public class LoginServlet extends HttpServlet {
  12. @Override
  13. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  14. // 设置后台响应文本格式
  15. resp.setContentType("text/html;charset=utf-8");
  16. // 接收前台请求
  17. String uname = URLDecoder.decode(req.getParameter("uname"));
  18.  
  19. // System.out.println(uname);
  20.  
  21. PrintWriter out = resp.getWriter();
  22. if ("张三".equals(uname)) {
  23. out.print("用户名已被占用");
  24. } else {
  25. out.print("用户名可用");
  26. }
  27. }
  28. }

解决Ajax前台中文传到后台出现中文乱码的更多相关文章

  1. 解决Spring boot中读取属性配置文件出现中文乱码的问题

    问题描述: 在配置文件application.properties中写了 server.port=8081 server.servlet.context-path=/boy name=张三 age=2 ...

  2. 如何解决jQuery easyui中locale文件下easyui-lang-zh_CN中文乱码问题

    1.在保存eclipse项目的目录下找到引入easyui-lang-zh_CN.js 2.用记事本打开该js文件,若打开后的中文正常,直接复制,粘贴到项目中的该js文件中,保存 3.若打开后中文出现乱 ...

  3. resin后台输出中文乱码的解决办法!

    resin后台输出中文乱码的解决办法! 学习了:https://blog.csdn.net/kobeguang/article/details/34116429 编辑conf/resin.con文件: ...

  4. 解决ubuntu中zip解压的中文乱码问题

    转自解决ubuntu中zip解压的中文乱码问题 在我的ubuntu12.10中,发现显示中文基本都是正常的,只有在解压windows传过来的zip文件时,才会出现乱码.所以,我用另一个方法解决中文乱码 ...

  5. resin后台输出中文乱码的解决的方法!

    近期从tomcat移植到resin,发现这东西不错啊! 仅仅是后台输出时有时候中文会乱码. 如今找到resin后台输出中文乱码的解决的方法: 编辑conf/resin.con文件: <!--ja ...

  6. python基础系列教程——Python中的编码问题,中文乱码问题

    python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 ...

  7. iOS 中json解析数据出现中文乱码的问题

    一般服务器的编码格式都是UTF8,这样通过json解析下来的的数据,一般中文是不会出现乱码,但是如果服务器的编码格式不是UTF8,通过json解析的数据中的中文容易出现luan乱码,怎么解决这个问题呢 ...

  8. 解决 Ubuntu 下 gedit编辑器打开文件出现中文乱码问题

    解决 Ubuntu 中 gedit编辑器打开文件出现中文乱码问题 1. 问题分析 在 windows 系统下,.txt 文件默认编码方式为 gb18030 格式的中文编码,而 gedit 默认的编码方 ...

  9. 解决在Linux下安装Oracle时的中文乱码问题

    本帖最后由 TsengYia 于 2012-2-22 17:06 编辑 解决在Linux下安装Oracle时的中文乱码问题 操作系统:Red Hat Enterprise Linux 6.1数据库:O ...

随机推荐

  1. PPT宝典

    http://www.ppt115.com/  是一个 ppt 网站资源导航,专注分享有关 ppt 相关的网站.教程.使用方法等.

  2. MQTT研究之EMQ:【EMQX使用中的一些问题记录(1)】

    issue 1. EMQX的共享订阅 EMQX是一个非常强大的物联网通信消息总线,基于EMQX开展应用开发,要注意很多配置细节问题,这里要说到的就是共享订阅以及和cleanSession之间的关系问题 ...

  3. Linux如何将未分配的硬盘挂载出来

    情景说明 客户给了几台服务器,说500G硬盘,但到手操作的时候,使用命令查看,发现只有不到200的硬盘 [root@localhost ~]# df -h Filesystem Size Used A ...

  4. 查看apache httpd server中加载了哪些模块

    说明: 有的时候,需要查看当前apache中都加载了哪些模块,通过以下命令进行查看 [root@hadoop1 httpd-]# bin/apachectl -t -D DUMP_MODULES Lo ...

  5. java多线程(三)线程的安全问题

    1.1. 什么是线程安全 如果有多个线程同时运行同一个实现了Runnable接口的类,程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的:反之,则是线程不 ...

  6. elementUI vue this.$confirm 和el-dialog 弹出框 移动

    调试了好久, 还能凑合用, 请直接看DOME 示例,复制就能用: <!DOCTYPE html> <html lang="zh"> <head> ...

  7. Synchronize深入

    前言:    synchronize会使用,但是对于深层次的知识,不是很清楚,故整理一篇博客. 简介:   能够保证在同一时刻,最多只有一个线程执行该端代码,以达到保证并发安全效果. 两种用法: 对象 ...

  8. 解决ImportError: No module named utils

    转载:https://blog.csdn.net/weixin_43979572/article/details/86159265 在Python中遇到了导包错误,其实包已经有了.原因是我再B文件的a ...

  9. 【linux基础】如何配置ubuntu系统为静态IP地址

    前言 连接远程server重启的时候发现IP发生变化,影响远程连接,此时,需要将server配置为静态IP. 系统环境 ubuntu16.04 操作过程 1. 设置IP和DNS command sud ...

  10. 【NPDP笔记】第五章 工具与度量

      5.1 创意工具 Ideation 创意开发 创意工具 Scamper Substitute Combine Adapter Modify Put to another use Eliminate ...