编写一个RegistServlet处理用户的Get请求数据

     public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 处理响应数据的格式和编码
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 获取字符输出流对象
PrintWriter out = response.getWriter();
// 获取请求参数
String name = request.getParameter("uname");
String address = request.getParameter("address");
// 输出数据
out.println("name="+name);
out.println("<br/>");
out.println("address="+address);
}

运行结果发现输入中文提交后显示结果为乱码:

jsp页面中    <meta http-equiv="content-type" content="text/html; charset=UTF-8">通知浏览器以utf-8解码

get请求编码方式和post请求提交编码方式不同,get是把数据直接放到url中,例如以上的uname,IE浏览器先对中文进行utf-8编码(一个中文3个字符表示 太长),继而为了缩短字符又用ISO8859-1编码后传递给服务器。服务器的doGet方法中要先进行ISO8859-1解码再utf-8解码才能看到中文。

而post请求则在浏览器端把数据以utf-8的形式存储到http的请求体中,不用通过url传输,继而只要    request.setCharacterEncoding("utf-8");通知request以utf-8形式解码就行,因为request默认以ISO8859-1进行解码的。

使用代码解决乱码问题

     public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 处理响应数据的格式和编码,通知浏览器数据的显示方式
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 获取字符输出流对象
PrintWriter out = response.getWriter();
// 获取请求参数
String name = request.getParameter("uname");
String address = request.getParameter("address");
// 获取ISO8859-1的原始数据
11 byte [] bs = name.getBytes("ISO8859-1");      //内部编码字节流,其实中文字符经过utf-8编码后的字节 都是英文可以表示的,只是                                     //ISO8859-1显示数据以一个字节一个字节显示,而utf-8以几个字节一起表示
12 name = new String(bs,"UTF-8");
13 bs = address.getBytes("ISO8859-1");
14 address = new String(bs,"UTF-8");
// 输出数据
out.println("name="+name);
out.println("<br/>");
out.println("address="+address);
}

如果使用以上的代码解决GET乱码每一个请求参数都需要重新的解码太繁琐,因此可以直接使用服务器通知浏览器以指定的方式进行编码字符数据。

使用URIEnoding方式解决GET乱码问题

 <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8"/>

URIEncoding主要指定的是%E5%8D%A1%E5%8D%A1的数据的解码方式,如果没有指定那么默认是ISO8859-1,如果指定那么采用指定的码表进行解码。因此服务器端就没有必要使用两个中编码方式进行转码了。

注意:在实际的生产环境中我们代码的乱码问题不可能以来服务器帮助我们解决,因此推荐使用第一个转码方式。后期可以直接实现一个乱码的过滤器实现处理乱码的问题。

http://localhost:8080/day07/regist?uname=焦宁波 在地址栏中输入需要的中文数据【乱码】

<a href="/day07/regist?uname=人人">单击我传递中文数据</a> 【乱码】

以上两个代码出现乱码状况一致:地址栏中直接原样出现了中文。

因此对于以上的参数在传递的过程中必须进行基本的中文编码处理。

URLEncoder.encode(需要编码的字符, 需要编码码表)
那么在服务器端使用GET乱码的解决方案即可。

http://blog.sina.com.cn/s/blog_673c81990100t1lc.html

get请求乱码情况的更多相关文章

  1. 处理get中的中文乱码情况

    1 最基本的乱码问题.这个乱码问题是最简单的乱码问题.一般新会出现.就是页面编码不一致导致的乱码.<%@ page language="java" pageEncoding= ...

  2. 解决springmvc在单纯返回一个字符串对象时所出现的乱码情况(极速版)

    使用springmvc框架开发了这么长时间,之前都是直接返回jsp页面,乱码情况都是通过配置和手动编解码来解决,但是今天突然返回一段单纯的字符串时,发现中文乱码情况解决不了了,下面就给各位分享一下如何 ...

  3. Java Web乱码分析及解决方式(一)——GET请求乱码

    引言:     在进行Web開始时.乱码是我们最常常遇到也是最主要的问题.有经验的程序员非常easy能解决,刚開始学习的人则easy被泥潭困住. 并且非常多时候.我们即使攻克了乱码问题也是不明就里.往 ...

  4. springmvc框架开发中解决产生的乱码情况

    一:解决post请求方式产生的乱码情况 示例代码如下: <!-- 解决post乱码 --> <filter> <filter-name>CharacterEncod ...

  5. JavaWeb get请求乱码处理

      乱码终极解决方案 Author:Marydon 一.安装好eclipse/myeclipse后,先将开发环境改成UTF-8; 更改工作空间编码方式 window-->preferences- ...

  6. Java Web乱码分析及解决方式(二)——POST请求乱码

    引言 GET请求的本质表现是将请求參数放在URL地址栏中.form表单的Method为GET的情况.參数会被浏览器默认编码,所以乱码处理方案是一样的. 对于POST请求乱码.解决起来要比GET简单.我 ...

  7. form表单编码方式设置为multipart/form-data,后台参数出现乱码情况

    一般在上传图片过程中,form中的编码方式一般采用multipart/form-data方式编码,但是后台这取参数时,可能会出现乱码情况:这里后台要采用转换编码方式: 页面: 后台:获取表单元素时,

  8. SpringMVC(一)--基础、REST、@RequestParam、POST请求乱码等

    1.SpringMVC基本概述 Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一 Spring3.0 后全面超越 Struts2,成为最优秀的 ...

  9. javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码

     乱码是一个经常出现的问题 请求中,参数传递的过程中也是经常出现乱码的问题 本文主要整理了请求乱码中的问题以及解决思路   先要理解一个概念前提: 编码就是把图形变成数值码所以说: 图形的字符  -- ...

随机推荐

  1. CASpringAnimation的使用

    CASpringAnimation的使用 效果 源码 https://github.com/YouXianMing/Animations // // CASpringAnimationControll ...

  2. JSTL fmt 格式化时间

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  3. php扩展开发笔记(2)多个源代码文件的配置和编译

    我们在开发过程中,为了代码得可读性和易维护性,肯定是须要多个代码文件的,而不不过通过 ext_skel 生成得骨架文件. 这篇文章主要介绍下.多个代码文件的时候.我们须要注意什么,以及怎么做. 我的代 ...

  4. Why游戏作品合集

    之前曾经发过一个套WhyEngine游戏作品合集,里面有十几个小游戏和若干个屏保程序和若干个DEMO程序.而这次发的与上次不一样,因为这是我花了两天时间将所有的程序集成到一个工程后的成果.为了能将所有 ...

  5. 给定任意字符串,计算一共能组合成多少个单词bing

    CSDN编程挑战里的题目 例如有一个字符串"iinbinbing",截取不同位置的字符‘b’.‘i’.‘n’.‘g’组合成单词"bing".若从1开始计数的话, ...

  6. RabbitMQ Zabbix 监控

    RabbitMQ Zabbix 监控 参考: https://github.com/jasonmcintosh/rabbitmq-zabbix copy api.py list_rabbit_node ...

  7. pat 1060 比较科学计数法

    trick: 1.前导0 如:000001,000.000001 2.出现0时也要按照科学计数法输出 e.g. 4 00000.00000 0001 NO 0.0000*10^0 0.1*10^1 3 ...

  8. 红黑树,TreeMap,插入操作

    红黑树 红黑树顾名思义就是节点是红色或者黑色的平衡二叉树,它通过颜色的约束来维持着二叉树的平衡.对于一棵有效的红黑树二叉树而言我们必须增加如下规则: 1.每个节点都只能是红色或者黑色 2.根节点是黑色 ...

  9. 应用程序在状态栏展示时间(C#)

    private DispatcherTimer _timer; private void SetTimeElaspInStatusBar() { try { _timer = new Dispatch ...

  10. Java list 分页(多种方式)

    方式一:public static  void fenye(List list,int pagesize){    int totalcount=list.size();    int pagecou ...