java web中请求和响应中包含中文出现乱码解析
说明:在计算机中保存的一切文本信息是以一定的编码表(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="男"> 女<input type="radio" name="gender" value="女"><br> 喜欢的颜色:<br>
红<input type="checkbox" name="color" value="红"> 绿<input type="checkbox" name="color" value="绿">
蓝<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="提交">
<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中请求和响应中包含中文出现乱码解析的更多相关文章
- Java Web之请求和响应
Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequest和HttpServletRe ...
- 传统Web应用请求和响应特点【显示当前时间】
(1)请求:浏览器以HTTP协议的方式提交请求到服务器 (2)响应:服务器以HTTP协议的方式响应内容到浏览器 注意:HTTP是WEB大众化非安全协议 HTTPS是WEB安全协议,是基于HTTP协议的 ...
- Node+Express中请求和响应对象
在用 Express 构建 Web 服务器时,大部分工作都是从请求对象开始,到响应对象终止. url的组成: 协议协议确定如何传输请求.我们主要是处理 http 和 https.其他常见的协议还有 f ...
- 转:Java Web 项目发布到Tomcat中三种部署方法
首先整理项目文件,文件内包含jsp.js等和class编译后的文件及lib包,如: 第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加: ...
- JAVA WEB 过滤器(Filter)中向容器 Spring 注入 bean
如果直接使用 @Autoware 获取 bean 会直接使该 bean 为 null,这是因为这种配置过滤器的方法无法在过滤器中使用 Spring bean,因为 Filter 比 bean 先加载, ...
- Java Web 项目发布到Tomcat中三种部署方法
第一种方法:在tomcat中的conf目录中,在server.xml中的,节点中添加: <Context path="/" docBase="E:\TOMCAT\a ...
- wrk 压测中请求无法响应问题解决过程
================= 遇到问题 =================$ 直连压测 wrk -c10000 -t100 -d100m http://localhost:9981/order/ ...
- java web获取请求体内容
Java Web中如何获取请求体内容呢? 我们知道请求方式分为两种:Get,Post. /*** * Compatible with GET and POST * * @param request * ...
- PHP中file_exists()函数不能检测包含中文的文件名的解决办法
版权声明:本文为博主原创文章,未经博主允许不得转载. PHP中一般使用file_exists()判断某个文件或者文件夹是否存在,如果文件或文件夹存在则返回true,不存在则返回fal ...
随机推荐
- ios backgroundColor
loginView.backgroundColor=[UIColorcolorWithHue:0saturation:0brightness:0.9alpha:0.85]; 可随意调
- iOS new 和 alloc的区别
一般如果只是 alloc init 那么 用new 是一样的 SomeObject*myObject =[[SomeObject alloc] init]; SomeObject*myObject = ...
- 算法笔记_108:第四届蓝桥杯软件类省赛真题(JAVA软件开发本科A组)试题解答
目录 1 世纪末的星期 2 振兴中华 3 梅森素数 4 颠倒的价牌 5 三部排序 6 逆波兰表达式 7 错误票据 8 带分数 9 剪格子 10 大臣的旅费 前言:以下试题解答代码部分仅供参考,若有不 ...
- 算法笔记_177:历届试题 城市建设(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修.市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他. C市中有 ...
- java面试第九天
图形界面: 布局管理器: CardLayout:卡片布局,面板重叠放置,只能看到一个,最先添加的会被显示出来,可以进行翻动 两种构造方法: CardLayout() 创建一个间隙大小为 0 的新卡片布 ...
- 36个Android开发常用代码片段
//36个Android开发常用代码片段 //拨打电话 public static void call(Context context, String phoneNumber) { context.s ...
- HDU Always Cook Mushroom (极角排序+树状数组)
Problem Description Matt has a company, Always Cook Mushroom (ACM), which produces high-quality mush ...
- [Done]Spring @Pointcut 切点调用不到(SpringAOP嵌套方法不起作用) 注意事项
今天在开发过程中,遇到一个问题卡了很久,测试代码如下: package spring.pointcut; import org.aspectj.lang.ProceedingJoinPoint; im ...
- Content-Length实体的大小
•15.2 Content-Length实体的大小 Content-Length首部指出了报文中实体主体的字节大小,这个大小包含了所有内容的编码,如对文本进行gzip压缩的话,那么Content-Le ...
- 29、java中阻塞队列
阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列 ...