编码问题
(1)发送get请求
为什么会产生乱码?
ie浏览器提供的ajax对象,对中文会使用gbk来编码,非ie浏览器 会使用utf-8来编码。服务器端默认会使用"iso-8859-1"来解码, 所以会产生乱码。
如何解决?
step1. 在服务器端,统一使用"utf-8"来解码。<Connector URIEncoding="utf-8"/>
step2. 浏览器端,使用encodeURI对中文进行编码。
注: encodeURI函数会使用utf-8来编码。
代码如下:
var uri = "check_admin.do?adminCode=" + $F("adminCode");
xhr.open("get",encodeURI(uri),true);
(2)发送post请求
为什么会产生乱码?
浏览器所提供的ajax对象都会使用utf-8对中文进行编码。 而服务器端会使用iso-8859-1来解码。
如何解决?
request.setCharacterEncoding("utf-8");
2. JSON (Javascript Object Notation)
(1)JSON是什么?
是一种轻量级的数据交换格式。
什么是数据交换?
将数据转换成一种与平台无关的数据格式(比如xml),然后交给接收方 来处理。
轻量级
相对于xml,json文档更小,解析的速度更快。
(2)基本语法
表示一个对象
{属性名:属性值,属性名:属性值...}
注:
a. 属性名必须使用双引号括起来。
b. 属性的类型可以是string,number,true/false,null,object。
c. 属性值如果是string,必须使用双引号括起来。
表示由对象组成的数组
[{},{},{}...]
(3)使用json
(1)java对象如何转换成json字符串。
使用json官方工具(json-lib)json-lib
注意:此处要导入6个jar包,其中json-lib的pom文件中要加入标签以便指明JDK的版本
JSONObject JSONArray 调用fromObject()方法返回fromObject对象,再调用toString()方法转换为符合JSON格式的字符串
(2)json字符串如何转换成javascript对象。
使用javascript内置对象 JSON.parse()方法,返回javascript对象(或数组)
==================================================
处理编码问题示例代码:
package web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ActionServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("service()");
request.setCharacterEncoding("utf-8");//post请求时候解决中文乱码
//分析请求资源路径
//例如http://ip:port/ajax-day01/check.do (端口号后面的字符串为该路径)
String uri= request.getRequestURI();
System.out.println(uri);
String action = uri.substring(uri.lastIndexOf("/"),uri.lastIndexOf("."));
System.out.println(action);//check
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();//获得输出流
if("/check_admin".equals(action)){
String adminCode = request.getParameter("adminCode");
System.out.println("adminCode:"+adminCode);
if("King".equals(adminCode)){//帐号已经存在
out.println("帐号已经存在");
}else{
out.println("可以使用");
}
}else if("/luck".equals(action)){
//获取随机整数
Random rand = new Random();
int num = rand.nextInt(100);
out.println(num);
}
out.close();
}
}
==================================================
使用JSON的示例代码:
实体类:
package bean;
public class Stock {
private String code;
private String name;
private int price;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
测试代码:
package json;
import java.util.ArrayList;
import java.util.List;
import bean.Stock;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonTest {
/**
* 将java对象转换为json字符串(符合json语法的字符串)
*/
public static void test1(){
Stock s = new Stock();
s.setCode("60087");
s.setName("中国嘉陵");
s.setPrice(10);
//使用json-lib提供的工具来转换
JSONObject jsonObj = JSONObject.fromObject(s);
String jsonStr = jsonObj.toString();
System.out.println(jsonStr);
}
/**
* 多个对象组成的数组或者集合转换为字符串
*/
public static void test2(){
List<Stock> list = new ArrayList<Stock>();
for(int i=0;i<3;i++){
Stock s = new Stock();
s.setCode("60087" + i);
s.setName("中国嘉陵" + i);
s.setPrice(10 + i);
list.add(s);
}
//fromObject()方法可以传入集合或者传入数组
JSONArray jsonArr = JSONArray.fromObject(list);
String jsonStr = jsonArr.toString();
System.out.println(jsonStr);
}
public static void main(String[] args) {
test1();
test2();
}
}
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<script type="text/javascript">
//使用json语法表示一个对象
function f1(){
var obj = {
"code":"600877",
"name":"中国嘉陵"
};
alert(obj.code+"\n"+obj.name);
}
function f2(){
var obj = {
"name":"Sally",
"address":{
"city":"北京","street":"长安街","room":1008
}
};
alert(obj.address.street);
}
//使用json语法表示对象组成的数组
function f3(){
var arr = [
{"code":"600877","name":"中国嘉陵"},
{"code":"600015","name":"山东高速"}
];
alert(arr[1].code+":"+arr[1].name);
}
/*
将json字符串转换为javascript对象
*/
function f4(){
var str = '{"name":"Tom","age":22}';
//使用javascript内置的JSON对象提供的方法
var obj = JSON.parse(str);
alert(obj.name+":"+obj.age);
}
function f5(){
var str = '[{"name":"Tom","age":22},'+
'{"name":"Eric","age":25}]';
var arr = JSON.parse(str);//此处返回数组
alert(arr[1].name);
}
</script>
</head>
<body style="font-size:30px;">
<a href="javascript:f1();">ClickMe</a>
<a href="javascript:f2();">ClickMe</a>
<a href="javascript:f3();">ClickMe</a>
<a href="javascript:f4();">ClickMe</a>
<a href="javascript:f5();">ClickMe</a>
</body>
</html>