POST请求时的乱码处理:
在post提交中,如果填写的用户名为中文,就会出现乱码,但在火狐浏览器中提交中文可以
被服务端正确识别,原因是火狐会告诉服务器以什么方式解码
而IE和Chrome浏览器提交的数据,到了服务器都是以默认的解码方式ISO-8859-1来解析的
ps:提交时浏览器依据meta标记指定的UTF-8的方式进行编码
解决方案:
设置服务端的解码方式为utf-8即可
request.setCharacterEncoding("utf-8");
GET方式乱码的解决
以GET方式提交的数据存在于提交的消息头URL中,HTTP协议对于URI的编码方式为UTF-8,
但是uri后面的查询字符串的编码方式却是ISO-8859-1,到了服务器,容器针对uri的解码
方式是ISO-8859-1,依旧解析不了中文,所以会出现乱码,为了能支持地址中查询字符串的
中文格式,需要在浏览器和服务器同时进行支持UTF-8格式编码,解码设置
ISO-8859-1:本质上是单字节编码,自身不能显示中文
解决方案:
1.修改tomcat的默认解码格式
修改tomcat安装路径下conf/server.xml文件,找到Connector节点,增加URIEncoding="UTF-8"
这个属性即可
2.使用JavaScript语言中的encodeURI()方法,对open方法中的url进行编码
JSON
.JSON(JavaScript Object Notation)是一种轻量级的数据交换格式
.易于人阅读和编写,同时也易于及其解析和生成
.JSON完全独立于语言之外,但语法上借鉴了JavaScript
轻量级:相当于XML,JSON解析速度更快,文档更小
JSON的结构
.JSON主要分两种结构:
-"名称/值"对的集合,不同的语言理解为对象,记录,结构,字典,哈希表等.
-值的有序列表.大部分语言中理解为数组
(JavaScript)使用JSON表示一个对象
.{属性名:属性值,属性名:属性值....}
.注意:属性值可以是string,number,boolean,null,object.(function)
-属性名必须使用双引号引起来
-属性值如果是字符串,必须使用双引号括起来
json:
{"name":"sally","city":"北京","age":"15s"}
xml
<emp>
<name>sally</name>
<city>北京</city>
<age>15</age>
</emp>
(JavaScript)使用JSON表示一个数组
语法定义:[value,value,value...]
.value可以是简单数据类型,也可以是object,数组类型.
例如:
[
{"name":"sally","city":"北京"},
{"city":"北京","age":"15s"}
]
------------------------
对象:
{"name":"sally","hobby":["sing","dance","eat"]}
实际开发状态
-数据交换原理
客户端 服务端
JavaScript对象<----------JSON形式字符串对象
JSON字符串----------->JavaScript对象
.使用JavaScript语言的原生函数:eval();
.但是该方法有风险,使用需谨慎.(要预防服务器传送恶意方法)
var txt = "{'city':'北京','age':'15'}";
var obj2 = eval("("+txt+")");
alert(obj2.city2);
方法二:
var obj = JSON.parse(txt);
alert(obj2.city2);
.使用原生对象JSON提供的parse()方法
.如果该对象无效,说明浏览器版本太低
方法三:
使用JSON.JS文件为字符串增加方法
var txt = "{'city':'北京','age':'15'}";
var obj = txt.parseJSON();
alert(obj.city);
服务端
java对象转换成JSON
转换前的准备:
.引入必要的jar文件
commons-beanutils-1.8.0.jar
commons-collections-3.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar
.利用JSON官方提供的API:JSONObject,JSONArray提供的方法