说明:在计算机中保存的一切文本信息是以一定的编码表(0,1,0,1)来保存我们所认识的字符(汉字或英文字符),由字符到计算机存储的二进制过程是编码,由读取二进制到文本的过程称为解码。而字符编码有多种不同的编码表,所以,如果编码格式和解码格式不是同一个码表就会出现乱码。想要避免出现乱码,需要使保存和读取时使用相同的码表。

在java web编程中经常会出现乱码,现在详细讲解一下如何进行设置,避免乱码

1 网页编码

  在编写网页的时候,需要指定网页的编码格式,使用<meta http-equiv="content-type" content="text/html; charset=UTF-8">来指定。此时浏览器读取或者发送请求的时候会以指定的编码格式保存或发送数据。在此是以utf-8形式。

  例如代码片段:

  <form action="/Pro1/bb" method="post">
用户名:
<input type="text" name="username" ><br> 性别:
男<input type="radio" name="gender" value="男">&nbsp;女<input type="radio" name="gender" value="女"><br> 喜欢的颜色:<br>
红<input type="checkbox" name="color" value="红">&nbsp;&nbsp; 绿<input type="checkbox" name="color" value="绿">&nbsp;&nbsp;
蓝<input type="checkbox" name="color" value="蓝"> <br>来自的国家
<select name="country">
<option value="中国">中国</option>
<option value="美国">美国</option>
<option value="日本">日本</option>
</select> <br>
<input type="submit" value="提交">&nbsp;
<input type="reset" value="重置"> </form>

2 后端读取请求数据

  在java web的servlet中要想获取请求的数据,需要将发送过来的二进制数据按照相应的码表进行解码才可以获取相应的人类可以读懂字符串。这个例子中是使用post方法,所以在处理post请求中,在获取有中文的请求参数前需要先设置编码格式,不然会出现乱码。因为服务器默认使用iso-8859-1编码表进行解码。

  当然,如果想要在输出中输出中文字符,也需要使用统一的字符编码,此处是utf-8,代码如下

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String gender = request.getParameter("gender");
String[] colors = request.getParameterValues("color");
String country = request.getParameter("country"); out.println("<!DOCTYPE HTML>");
out.println("<HTML>");
out.println(" <HEAD><TITLE>测试servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print("<h1>以下是您的输入</h1>"); out.print("<p>");
out.print("您的用户名:"+username+"<br>");
out.print("您的性别:"+gender+"<br>");
out.print("您喜欢的颜色:");
for(String cr:colors){
out.print(cr+" ");
}
out.print("<br>"); out.print("您的国家:"+country+"<br>"); out.print("</p>"); out.println(" </BODY>");
out.println("</HTML>");
}

注意:此处的request.setCharacterEncoding("utf-8");只对请求实体的内容有效。post请求参数是存放在请求实体中,get方法的请求参数是放在url的后面以问号开始,‘&’连接多个参数。所以想要获取get方法的参数,需要使用手动解码,或者使用filter。

  手动解码方法,为了简单起见只对性别进行解码,实际使用中需要对每一个参数进行解码:String gender = new String(req.getParameter("gender").getBytes("iso-8859-1"),"utf-8") ;

到此时就可以完美解决网页和服务器端出现汉字乱码的现象,记住一条,出现乱码的都是因为编码和解码使用不同编码表的原因,要使用相同的编码表,即可解决问题。

常见响应状态码:

100-199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

200-299:表示成功接收请求并已完成整个处理过程

300-399:为完成请求,客户端需进一步细化请求。例如,请求资源已经移动到一个新地址,常用302/307

400-499:客户端请求有错误,常见404

500-599:服务器端出现错误,常用500

java web中请求和响应中包含中文出现乱码解析的更多相关文章

  1. Java Web之请求和响应

    Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequest和HttpServletRe ...

  2. 传统Web应用请求和响应特点【显示当前时间】

    (1)请求:浏览器以HTTP协议的方式提交请求到服务器 (2)响应:服务器以HTTP协议的方式响应内容到浏览器 注意:HTTP是WEB大众化非安全协议 HTTPS是WEB安全协议,是基于HTTP协议的 ...

  3. Node+Express中请求和响应对象

    在用 Express 构建 Web 服务器时,大部分工作都是从请求对象开始,到响应对象终止. url的组成: 协议协议确定如何传输请求.我们主要是处理 http 和 https.其他常见的协议还有 f ...

  4. 转:Java Web 项目发布到Tomcat中三种部署方法

    首先整理项目文件,文件内包含jsp.js等和class编译后的文件及lib包,如: 第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加:   ...

  5. JAVA WEB 过滤器(Filter)中向容器 Spring 注入 bean

    如果直接使用 @Autoware 获取 bean 会直接使该 bean 为 null,这是因为这种配置过滤器的方法无法在过滤器中使用 Spring bean,因为 Filter 比 bean 先加载, ...

  6. Java Web 项目发布到Tomcat中三种部署方法

    第一种方法:在tomcat中的conf目录中,在server.xml中的,节点中添加: <Context path="/" docBase="E:\TOMCAT\a ...

  7. wrk 压测中请求无法响应问题解决过程

    ================= 遇到问题 =================$ 直连压测 wrk -c10000 -t100 -d100m http://localhost:9981/order/ ...

  8. java web获取请求体内容

    Java Web中如何获取请求体内容呢? 我们知道请求方式分为两种:Get,Post. /*** * Compatible with GET and POST * * @param request * ...

  9. PHP中file_exists()函数不能检测包含中文的文件名的解决办法

    版权声明:本文为博主原创文章,未经博主允许不得转载.          PHP中一般使用file_exists()判断某个文件或者文件夹是否存在,如果文件或文件夹存在则返回true,不存在则返回fal ...

随机推荐

  1. 【python】理想论坛爬虫长贴版1.00

    理想论坛有些长贴,针对这些长贴做统计可以知道某ID什么时段更活跃. 爬虫代码为: #---------------------------------------------------------- ...

  2. DB2数据源在Spring环境中的配置

    简单记录一下,以备不时之需. DB2的java驱动包可以在这里下载:http://pan.baidu.com/s/1gOoEJ DB2数据源的配置如下,粗体字部分是需要根据实际情况修改的: <b ...

  3. Python编程-基础知识-条件判断

    1. 简单的if/else条件判断 judge_flow.py name = input("Please input name: ") if name == 'master': p ...

  4. IO介绍

    IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口. 比如你打开 ...

  5. Android 之 AndroidManifest.xml 详解(二)

    [10]<activity> Activity活动组件(即界面控制器组件)的声明标签,Android应用中的每一个Activity都必须在AndroidManifest.xml配置文件中声 ...

  6. w3cschool菜鸟教程离线版chm手册正式发布

    w3cschool菜鸟教程是一个提供了最全的的web技术基础教程网站.网站包含了HTML教程.CSS教程.Javascript教程.PHP教程等各种建站基础教程.同时也提供了大量的在线实例,通过实例, ...

  7. Hibernate生成实体类-手工写法(一)

    BaseDao package com.pb.dao; import java.sql.Connection; import java.sql.DriverManager; import java.s ...

  8. JavaScript三(语法、关键保留字及变量)

    基本概念 一.区分大小写 在ECMAScript中的一切(变量.函数名.操作符)都是区分大小写的. 如变量名test和Test分别表示两个不同的变量, 二.标识符 所谓标识符,就是指变量.函数.属性的 ...

  9. nyoj阶乘之和

     /*阶乘之和 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 给你一个非负数整数n,推断n是不是一些数(这些数不同意反复使用,且为正数)的阶乘之和, 如9=1! ...

  10. nexus 离线更新索引

    1.到http://repo.maven.apache.org/maven2/.index/页面下载下面这两个文件: nexus-maven-repository-index.gz nexus-mav ...