• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
dielianhua
博客园    首页    新随笔    联系   管理    订阅  订阅

AJAX知识要点

1. ajax是什么?
  * asynchronous javascript and xml:异步的js和xml
  * 它能使用js访问服务器,而且是异步访问!
  * 服务器给客户端的响应一般是整个页面,一个html完整页面!但在ajax中因为是局部刷新,那么服务器就不用再响应整个页面!而只是数据!
    > text:纯文本
    > xml:大家都熟悉!!!
    > json:它是js提供的数据交互格式,它在ajax中最受欢迎!

2. 异步交互和同步交互
  * 同步:
    > 发一个请求,就要等待服务器的响应结束,然后才能发第二个请求!中间这段时间就是一个字“卡”
    > 刷新的是整个页面!
  * 异步:
    > 发一个请求后,无需等待服务器的响应,然后就可以发第二个请求!
    > 可以使用js接收服务器的响应,然后使用js来局部刷新!

3. ajax应用场景
  * 百度的搜索框
  * 用户注册时(校验用户名是否被注册过)

4. ajax的优缺点
  优点:
  * 异步交互:增强了用户的体验!
  * 性能:因为服务器无需再响应整个页面,只需要响应部份内容,所以服务器的压力减轻了!

  缺点:
  * ajax不能应用在所有场景!
  * ajax无端的增多了对服务器的访问次数,给服务器带来了压力!


ajax发送异步请求(四步操作)

1. 第一步(得到XMLHttpRequest)
  * ajax其实只需要学习一个对象:XMLHttpRequest,如果掌握了它,就掌握了ajax!!!
  * 得到XMLHttpRequest
    > 大多数浏览器都支持:var xmlHttp = new XMLHttpRequest();
    > IE6 5.5以更早版本的IE:var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

  * 编写创建XMLHttpRequest对象的函数
  function createXMLHttpRequest() {
      try {
          return new XMLHttpRequest();
      } catch(e) {
          try {
              return new ActiveXObject("Microsoft.XMLHTTP");
          } catch(e) {
              alert("哥们儿,你用的是什么浏览器啊?");
              throw e;
          }
      }
  }

2. 第二步(打开与服务器的连接)
  * xmlHttp.open():用来打开与服务器的连接,它需要三个参数:
    > 请求方式:可以是GET或POST
    > 请求的URL:指定服务器端资源,例如;/day23_1/AServlet
    > 请求是否为异步:如果为true表示发送异步请求,否则同步请求!
  * xmlHttp.open("GET", "/day23_1/AServlet", true);

3. 第三步(发送请求)
  * xmlHttp.send(null):如果不给可能会造成部份浏览器无法发送!
    > 参数:就是请求体内容!如果是GET请求,必须给出null。

4. 第四步()
  * 在xmlHttp对象的一个事件上注册监听器:onreadystatechange
  * xmlHttp对象一共有5个状态:
    > 0状态:刚创建,还没有调用open()方法;
    > 1状态:请求开始:调用了open()方法,但还没有调用send()方法
    > 2状态:调用完了send()方法了;
    > 3状态:服务器已经开始响应,但不表示响应结束了!
    > 4状态:服务器响应结束!(通常我们只关心这个状态!!!)
  * 得到xmlHttp对象的状态:
    > var state = xmlHttp.readyState;//可能是0、1、2、3、4
  * 得到服务器响应的状态码
    > var status = xmlHttp.status;//例如为200、404、500
  * 得到服务器响应的内容1
    > var content = xmlHttp.responseText;//得到服务器的响应的文本格式的内容
    > var content = xmlHttp.responseXML;//得到服务器的响应的xml响应的内容,它是Document对象了!

  xmlHttp.onreadystatechange = function() {//xmlHttp的5种状态都会调用本方法
      if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {//双重判断:判断是否为4状态,而且还要判断是否为200
          // 获取服务器的响应内容
      var text = xmlHttp.responseText;
      }
  };


ajax入门第一例:

 1 package com.cn.web.servlet;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 public class AServlet extends HttpServlet {
10     private static final long serialVersionUID = 1L;
11     
12     public void doGet(HttpServletRequest request, HttpServletResponse response) 
13             throws ServletException, IOException {
14         System.out.println("Hello AJAX!");
15         response.getWriter().print("Hello AJAX!!!");
16     }
17 }
 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>Insert title here</title>
 9 <script type="text/javascript">
10 //创建异步对象
11 
12     function createXMLHttpRequest() {
13         try {
14             return new XMLHttpRequest();//大多数浏览器
15         } catch (e) {
16             try {
17                 return new ActiveXObject("Microsoft.XMLHTTP");//IE5、6
18             } catch (e) {
19                 alert("你用的浏览器太老了!无法识别!");
20                 throw e;
21             }
22         }
23     };
24 
25     window.onload = function() {//文档加载完毕后执行
26         var btn = document.getElementById("btn");
27         btn.onclick = function() {//给按钮的点击事件注册监听
28             /*
29             ajax四步操作,得到服务器的响应
30             把响应结果显示到h1元素中
31              */
32             /*
33             1.得到异步对象
34              */
35             var xmlHttp = createXMLHttpRequest();
36             /*
37             2.打开与服务器的连接
38              * 指定请求方式
39              * 指定请求的URL
40              * 指定是否为异步请求
41              */
42             xmlHttp.open("GET", "<c:url value='/AServlet'/>", true);
43             /*
44             3.发送请求
45              */
46             xmlHttp.send(null);//GET请求没有请求体,但也要给出null,不然FireFox可能会不能发送!
47             /*
48             4.给异步对象的onreadystatechange时间注册监听器
49              */
50             xmlHttp.onreadystatechange = function() {//当xmlHttp的状态发生变化时执行
51                 //双重判断:xmlHttp的状态为4(服务器响应结束),以及服务器相应的状态码为200(响应成功)
52                 if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
53                     //获取服务器的响应结束
54                     var text = xmlHttp.responseText;
55                     //获取h1元素
56                     var h1 = document.getElementById("h1");
57                     h1.innerHTML = text;
58                 }
59             };
60         };
61     };
62 </script>
63 </head>
64 <body>
65     <button id="btn">点击这里</button>
66     <h1 id="h1"></h1>
67 </body>
68 </html>

第二例:发送POST请求(如果发送请求时需要带有参数,一般都用POST请求)

* open:xmlHttp.open("POST" ....);
* 添加一步:设置Content-Type请求头:
  > xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
* send:xmlHttp.send("username=zhangSan&password=123");//发送请求时指定请求体

1     public void doPost(HttpServletRequest request, HttpServletResponse response) 
2             throws ServletException, IOException {
3         response.setContentType("text/html;charset=utf-8");
4         request.setCharacterEncoding("UTF-8");
5         
6         String username = request.getParameter("username");
7         System.out.println("(Post:)Hello AJAX!" + username);
8         response.getWriter().print("(Post:)Hello AJAX!!!" + username);
9     }
 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>发送Post请求</title>
 8 <script type="text/javascript">
 9 //创建异步对象
10 function createXMLHttpRequest() {
11     try {
12         return new XMLHttpRequest();
13     } catch (e) {
14         try {
15             return new ActiveXObject("Microsoft XMLHTTP");
16         } catch (e) {
17             throw e;
18         }
19     }
20 }
21 
22 window.onload = function() {
23     var btn = document.getElementById("btn");
24     btn.onclick = function() {
25         var xmlHttp = createXMLHttpRequest();
26         xmlHttp.open("post","<c:url value='/AServlet'/>",true);
27         /************设置请求头:Content-Type************/
28         xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
29         /**********发送时指定请求体***********/
30         xmlHttp.send("username=张三&&password=123");
31         xmlHttp.onreadystatechange = function() {
32             if(xmlhttp.readyState==4 && xmlhttp.status==200) {
33                 var text = xmlHttp.responseText;
34                 var h1 = document.getElementById("h1");
35                 h1.innerHTML = text;
36             }
37         };
38     };
39 };
40 </script>
41 </head>
42 <body>
43 <button id="btn">点击这里</button>
44 <h1 id="h1"></h1>
45 </body>
46 </html>

 第三例:注册表单之校验用户是否注册!

1. 编写页面:
  * ajax3.jsp
    > 给出注册表单页面
    > 给用户名文本框添加onblur事件的监听
    > 获取文本框的内容,通过ajax4步发送给服务器,得到响应结果
      * 如果为1:在文本框后显示“用户名已被注册”
      * 如果为0:什么都不做!

2. 编写Servlet
  * ValidateUsernameServlet
    > 获取客户端传递的用户名参数
    > 判断是否为itcast
      * 是:返回1

      * 否:返回0

 1 package com.cn.web.servlet;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 public class LoginServlet extends HttpServlet {
10     private static final long serialVersionUID = 1L;
11 
12     protected void doPost(HttpServletRequest request, HttpServletResponse response) 
13             throws ServletException, IOException {
14         request.setCharacterEncoding("UTF-8");
15         response.setContentType("text/html;charset=utf-8");
16         String username = request.getParameter("username");
17         if(username.equalsIgnoreCase("xiaoxiao")) {
18             System.out.println("用户名:" + username);
19             response.getWriter().print("1");
20         } else {
21             response.getWriter().print("0");
22         }
23     }
24 
25 }
 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>AJAX验证用户名</title>
 9 <script type="text/javascript">
10 //创建异步对象
11 function createXMLHttpRequest() {
12     try {
13         return new XMLHttpRequest();
14     } catch (e) {
15         try {
16             return new ActiveXObject("Microsoft XMLHTTP");
17         } catch (e) {
18             throw e;
19         }
20     }
21 }
22 
23 window.onload = function() {
24     //获取文本框,给它的失去焦点时间注册监听
25     var userEle = document.getElementById("usernameEle");
26     userEle.onblur = function() {
27         var xmlHttp = createXMLHttpRequest();
28         xmlHttp.open("POST","<c:url value='/LoginServlet' />",true);
29         xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
30         //发送请求,给出请求体
31         xmlHttp.send("username=" + userEle.value);
32         xmlHttp.onreadystatechange = function() {
33             if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
34                 var text = xmlHttp.responseText;
35                 var span = document.getElementById("errorSpan");
36                 if(text == "1") {
37                     span.innerHTML = "用户名已被注册!";
38                 } else {
39                     span.innerHTML = "";
40                 }
41             }
42         };
43     };
44 };
45 </script>
46 </head>
47 <body>
48 <h2>演示用户名已被注册</h2>
49 <form action="" method="post">
50 用户名:<input type="text" name="username" id="usernameEle"><span id="errorSpan"></span><br/>
51 密   码:<input type="password" name="password"><br/>
52 <input type="submit" value="注册">
53 </form>
54 </body>
55 </html>

 响应内容为xml数据
  * 服务器端:
    > 设置响应头:ContentType,其值为:text/xml;charset=utf-8
  * 客户端:
    > var doc = xmlHttp.responseXML;//得到的是Document对象!

第四例:响应内容为xml数据

 1 package com.cn.web.servlet;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 public class BServlet extends HttpServlet {
10     private static final long serialVersionUID = 1L;
11  
12     protected void doGet(HttpServletRequest request, HttpServletResponse response) 
13             throws ServletException, IOException {
14         String xml = "<students>" +
15             "<student number='10001'>" +
16             "<name>zhangsan</name>" +
17             "<age>18</age>" +
18             "<sex>male</sex>" +
19             "</student>" +
20             "</students>";
21         response.setContentType("text/xml;charset=utf-8");
22         response.getWriter().print(xml);
23     }
24 
25 }
 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>响应内容为xml数据</title>
 9 <script type="text/javascript">
10     //创建异步对象
11     function createXMLHttpRequest() {
12         try {
13             return new XMLHttpRequest();
14         } catch (e) {
15             try {
16                 return new ActiveXObject("Microsoft XMLHTTP");
17             } catch (e) {
18                 throw e;
19             }
20         }
21     }
22     window.onload = function() {//文档加载完毕后执行
23         var btn = document.getElementById("btn");
24         btn.onclick = function() {//给按钮的点击事件注册监听
25             /*
26             ajax四步操作,得到服务器的响应
27             把响应结果显示到h1元素中
28              */
29             /*
30             1. 得到异步对象 
31              */
32             var xmlHttp = createXMLHttpRequest();
33             /*
34             2. 打开与服务器的连接
35              * 指定请求方式
36              * 指定请求的URL
37              * 指定是否为异步请求
38              */
39             xmlHttp.open("GET", "<c:url value='/BServlet'/>", true);
40             /*
41             3. 发送请求
42              */
43             xmlHttp.send(null);//GET请求没有请求体,但也要给出null,不然FireFox可能会不能发送!
44             /*
45             4. 给异步对象的onreadystatechange事件注册监听器
46              */
47             xmlHttp.onreadystatechange = function() {//当xmlHttp的状态发生变化时执行
48                 // 双重判断:xmlHttp的状态为4(服务器响应结束),以及服务器响应的状态码为200(响应成功)
49                 if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
50                     // 获取服务器的响应结果(xml)
51                     var doc = xmlHttp.responseXML;
52                     // 查询文档下名为student的所有元素,得到数组,再取下标0元素
53                     var ele = doc.getElementsByTagName("student")[0];
54                     var number = ele.getAttribute("number");//获取元素名为number的属性值
55                     var name;
56                     var age;
57                     var sex;
58 
59                     // 处理浏览器的差异
60                     if (window.addEventListener) {
61                         name = ele.getElementsByTagName("name")[0].textContent;//其他浏览器
62                     } else {
63                         name = ele.getElementsByTagName("name")[0].text;//IE支持
64                     }
65                     if (window.addEventListener) {
66                         age = ele.getElementsByTagName("age")[0].textContent;//其他浏览器
67                     } else {
68                         age = ele.getElementsByTagName("age")[0].text;//IE支持
69                     }
70                     if (window.addEventListener) {
71                         sex = ele.getElementsByTagName("sex")[0].textContent;//其他浏览器
72                     } else {
73                         sex = ele.getElementsByTagName("sex")[0].text;//IE支持
74                     }
75 
76                     var text = number + ", " + name + ", " + age + ", " + sex;
77                     document.getElementById("h1").innerHTML = text;
78                 }
79             };
80         };
81     };
82 </script>
83 </head>
84 
85 <body>
86     <button id="btn">点击这里</button>
87     <h1 id="h1"></h1>
88 </body>
89 </html>

第五例:省市联动
1. 页面
  <select name="province">
    <option>===请选择省份===</option>
  </select>
  <select name="city">
    <option>===请选择城市===</option>  
  </select>


2. ProvinceServlet
  * ProvinceServlet:当页面加载完毕后马上请求这个Servlet!
    > 它需要加载china.xml文件,把所有的省的名称使用字符串发送给客户端!


3. 页面的工作
  * 获取这个字符串,使用逗号分隔,得到数组
  * 循环遍历每个字符串(省份的名称),使用每个字符串创建一个<option>元素添加到<select name="province">这个元素中

4. CityServlet
  * CityServlet:当页面选择某个省时,发送请求!
  * 得到省份的名称,加载china.xml文件,查询出该省份对应的元素对象!,把这个元素转换成xml字符串,发送给客户端

5. 页面的工作
  * 把<select name="city">中的所有子元素删除,但不要删除<option>===请选择城市===</option>
  * 得到服务器的响应结果:doc!!!
  * 获取所有的<city>子元素,循环遍历,得到<city>的内容
  * 使用每个<city>的内容创建一个<option>元素,添加到<select name="city">

 

  1 <?xml version="1.0" encoding="utf-8"?>
  2 <china>
  3     <province name="北京">
  4         <city>东城区</city>
  5         <city>西城区</city>
  6         <city>崇文区</city>
  7         <city>宣武区</city>
  8         <city>朝阳区</city>
  9         <city>丰台区</city>
 10         <city>石景山区</city>
 11         <city>海淀区</city>
 12         <city>门头沟区</city>
 13         <city>房山区</city>
 14         <city>通州区</city>
 15         <city>顺义区</city>
 16         <city>昌平区</city>
 17         <city>大兴区</city>
 18         <city>怀柔区</city>
 19         <city>平谷区</city>
 20         <city>密云县</city>
 21         <city>延庆县</city>
 22     </province>
 23     <province name="天津">
 24         <city>和平区</city>
 25         <city>河东区</city>
 26         <city>河西区</city>
 27         <city>南开区</city>
 28         <city>河北区</city>
 29         <city>红桥区</city>
 30         <city>塘沽区</city>
 31         <city>汉沽区</city>
 32         <city>大港区</city>
 33         <city>东丽区</city>
 34         <city>西青区</city>
 35         <city>津南区</city>
 36         <city>北辰区</city>
 37         <city>武清区</city>
 38         <city>宝坻区</city>
 39         <city>宁河县</city>
 40         <city>静海县</city>
 41         <city>蓟县</city>
 42     </province>
 43     <province name="河北">
 44         <city>石家庄</city>
 45         <city>唐山</city>
 46         <city>秦皇岛</city>
 47         <city>邯郸</city>
 48         <city>邢台</city>
 49         <city>保定</city>
 50         <city>张家口</city>
 51         <city>承德</city>
 52         <city>沧州</city>
 53         <city>廊坊</city>
 54         <city>衡水</city>
 55     </province>
 56     <province name="山西">
 57         <city>太原</city>
 58         <city>大同</city>
 59         <city>阳泉</city>
 60         <city>长治</city>
 61         <city>晋城</city>
 62         <city>朔州</city>
 63         <city>晋中</city>
 64         <city>运城</city>
 65         <city>忻州</city>
 66         <city>临汾</city>
 67         <city>吕梁</city>
 68     </province>
 69     <province name="内蒙古">
 70         <city>呼和浩特</city>
 71         <city>包头</city>
 72         <city>乌海</city>
 73         <city>赤峰</city>
 74         <city>通辽</city>
 75         <city>鄂尔多斯</city>
 76         <city>呼伦贝尔</city>
 77         <city>巴彦淖尔</city>
 78         <city>乌兰察布</city>
 79         <city>兴安盟</city>
 80         <city>锡林郭勒盟</city>
 81         <city>阿拉善盟</city>
 82     </province>
 83     <province name="辽宁">
 84         <city>沈阳</city>
 85         <city>大连</city>
 86         <city>鞍山</city>
 87         <city>抚顺</city>
 88         <city>本溪</city>
 89         <city>丹东</city>
 90         <city>锦州</city>
 91         <city>营口</city>
 92         <city>阜新</city>
 93         <city>辽阳</city>
 94         <city>盘锦</city>
 95         <city>铁岭</city>
 96         <city>朝阳</city>
 97         <city>葫芦岛</city>
 98     </province>
 99     <province name="吉林">
100         <city>长春</city>
101         <city>吉林</city>
102         <city>四平</city>
103         <city>辽源</city>
104         <city>通化</city>
105         <city>白山</city>
106         <city>松原</city>
107         <city>白城</city>
108         <city>延边</city>
109     </province>
110     <province name="黑龙江">
111         <city>哈尔滨</city>
112         <city>齐齐哈尔</city>
113         <city>鸡西</city>
114         <city>鹤岗</city>
115         <city>双鸭山</city>
116         <city>大庆</city>
117         <city>伊春</city>
118         <city>佳木斯</city>
119         <city>七台河</city>
120         <city>牡丹江</city>
121         <city>黑河</city>
122         <city>绥化</city>
123         <city>大兴安岭</city>
124     </province>
125     <province name="上海">
126         <city>黄浦区</city>
127         <city>卢湾区</city>
128         <city>徐汇区</city>
129         <city>长宁区</city>
130         <city>静安区</city>
131         <city>普陀区</city>
132         <city>闸北区</city>
133         <city>虹口区</city>
134         <city>杨浦区</city>
135         <city>闵行区</city>
136         <city>宝山区</city>
137         <city>嘉定区</city>
138         <city>浦东新区</city>
139         <city>金山区</city>
140         <city>松江区</city>
141         <city>青浦区</city>
142         <city>南汇区</city>
143         <city>奉贤区</city>
144         <city>崇明县</city>
145     </province>
146     <province name="江苏">
147         <city>南京</city>
148         <city>无锡</city>
149         <city>徐州</city>
150         <city>常州</city>
151         <city>苏州</city>
152         <city>南通</city>
153         <city>连云港</city>
154         <city>淮安</city>
155         <city>盐城</city>
156         <city>扬州</city>
157         <city>镇江</city>
158         <city>泰州</city>
159         <city>宿迁</city>
160     </province>
161     <province name="浙江">
162         <city>杭州</city>
163         <city>宁波</city>
164         <city>温州</city>
165         <city>嘉兴</city>
166         <city>湖州</city>
167         <city>绍兴</city>
168         <city>金华</city>
169         <city>衢州</city>
170         <city>舟山</city>
171         <city>台州</city>
172         <city>丽水</city>
173     </province>
174     <province name="安徽">
175         <city>合肥</city>
176         <city>芜湖</city>
177         <city>蚌埠</city>
178         <city>淮南</city>
179         <city>马鞍山</city>
180         <city>淮北</city>
181         <city>铜陵</city>
182         <city>安庆</city>
183         <city>黄山</city>
184         <city>滁州</city>
185         <city>阜阳</city>
186         <city>宿州</city>
187         <city>巢湖</city>
188         <city>六安</city>
189         <city>亳州</city>
190         <city>池州</city>
191         <city>宣城</city>
192     </province>
193     <province name="福建">
194         <city>福州</city>
195         <city>厦门</city>
196         <city>莆田</city>
197         <city>三明</city>
198         <city>泉州</city>
199         <city>漳州</city>
200         <city>南平</city>
201         <city>龙岩</city>
202         <city>宁德</city>
203     </province>
204     <province name="江西">
205         <city>南昌</city>
206         <city>景德镇</city>
207         <city>萍乡</city>
208         <city>九江</city>
209         <city>新余</city>
210         <city>鹰潭</city>
211         <city>赣州</city>
212         <city>吉安</city>
213         <city>宜春</city>
214         <city>抚州</city>
215         <city>上饶</city>
216     </province>
217     <province name="山东">
218         <city>济南</city>
219         <city>青岛</city>
220         <city>淄博</city>
221         <city>枣庄</city>
222         <city>东营</city>
223         <city>烟台</city>
224         <city>潍坊</city>
225         <city>济宁</city>
226         <city>泰安</city>
227         <city>威海</city>
228         <city>日照</city>
229         <city>莱芜</city>
230         <city>临沂</city>
231         <city>德州</city>
232         <city>聊城</city>
233         <city>滨州</city>
234         <city>荷泽</city>
235     </province>
236     <province name="河南">
237         <city>郑州</city>
238         <city>开封</city>
239         <city>洛阳</city>
240         <city>平顶山</city>
241         <city>安阳</city>
242         <city>鹤壁</city>
243         <city>新乡</city>
244         <city>焦作</city>
245         <city>濮阳</city>
246         <city>许昌</city>
247         <city>漯河</city>
248         <city>三门峡</city>
249         <city>南阳</city>
250         <city>商丘</city>
251         <city>信阳</city>
252         <city>周口</city>
253         <city>驻马店</city>
254     </province>
255     <province name="湖北">
256         <city>武汉</city>
257         <city>黄石</city>
258         <city>十堰</city>
259         <city>宜昌</city>
260         <city>襄樊</city>
261         <city>鄂州</city>
262         <city>荆门</city>
263         <city>孝感</city>
264         <city>荆州</city>
265         <city>黄冈</city>
266         <city>咸宁</city>
267         <city>随州</city>
268         <city>恩施</city>
269         <city>神农架</city>
270     </province>
271     <province name="湖南">
272         <city>长沙</city>
273         <city>株洲</city>
274         <city>湘潭</city>
275         <city>衡阳</city>
276         <city>邵阳</city>
277         <city>岳阳</city>
278         <city>常德</city>
279         <city>张家界</city>
280         <city>益阳</city>
281         <city>郴州</city>
282         <city>永州</city>
283         <city>怀化</city>
284         <city>娄底</city>
285         <city>湘西</city>
286     </province>
287     <province name="广东">
288         <city>广州</city>
289         <city>韶关</city>
290         <city>深圳</city>
291         <city>珠海</city>
292         <city>汕头</city>
293         <city>佛山</city>
294         <city>江门</city>
295         <city>湛江</city>
296         <city>茂名</city>
297         <city>肇庆</city>
298         <city>惠州</city>
299         <city>梅州</city>
300         <city>汕尾</city>
301         <city>河源</city>
302         <city>阳江</city>
303         <city>清远</city>
304         <city>东莞</city>
305         <city>中山</city>
306         <city>潮州</city>
307         <city>揭阳</city>
308         <city>云浮</city>
309     </province>
310     <province name="广西">
311         <city>南宁</city>
312         <city>柳州</city>
313         <city>桂林</city>
314         <city>梧州</city>
315         <city>北海</city>
316         <city>防城港</city>
317         <city>钦州</city>
318         <city>贵港</city>
319         <city>玉林</city>
320         <city>百色</city>
321         <city>贺州</city>
322         <city>河池</city>
323         <city>来宾</city>
324         <city>崇左</city>
325     </province>
326     <province name="海南">
327         <city>海口</city>
328         <city>三亚</city>
329     </province>
330     <province name="重庆">
331         <city>重庆</city>
332         <city>万州区</city>
333         <city>涪陵区</city>
334         <city>渝中区</city>
335         <city>大渡口区</city>
336         <city>江北区</city>
337         <city>沙坪坝区</city>
338         <city>九龙坡区</city>
339         <city>南岸区</city>
340         <city>北碚区</city>
341         <city>万盛区</city>
342         <city>双桥区</city>
343         <city>渝北区</city>
344         <city>巴南区</city>
345         <city>黔江区</city>
346         <city>长寿区</city>
347         <city>綦江县</city>
348         <city>潼南县</city>
349         <city>铜梁县</city>
350         <city>大足县</city>
351         <city>荣昌县</city>
352         <city>璧山县</city>
353         <city>梁平县</city>
354         <city>城口县</city>
355         <city>丰都县</city>
356         <city>垫江县</city>
357         <city>武隆县</city>
358         <city>忠县</city>
359         <city>开县</city>
360         <city>云阳县</city>
361         <city>奉节县</city>
362         <city>巫山县</city>
363         <city>巫溪县</city>
364         <city>石柱土家族自治县</city>
365         <city>秀山土家族苗族自治县</city>
366         <city>酉阳土家族苗族自治县</city>
367         <city>彭水苗族土家族自治县</city>
368         <city>江津</city>
369         <city>合川</city>
370         <city>永川</city>
371         <city>南川</city>
372     </province>
373     <province name="四川">
374         <city>成都</city>
375         <city>自贡</city>
376         <city>攀枝花</city>
377         <city>泸州</city>
378         <city>德阳</city>
379         <city>绵阳</city>
380         <city>广元</city>
381         <city>遂宁</city>
382         <city>内江</city>
383         <city>乐山</city>
384         <city>南充</city>
385         <city>眉山</city>
386         <city>宜宾</city>
387         <city>广安</city>
388         <city>达州</city>
389         <city>雅安</city>
390         <city>巴中</city>
391         <city>资阳</city>
392         <city>阿坝</city>
393         <city>甘孜</city>
394         <city>凉山</city>
395     </province>
396     <province name="贵州">
397         <city>贵阳</city>
398         <city>六盘水</city>
399         <city>遵义</city>
400         <city>安顺</city>
401         <city>铜仁</city>
402         <city>黔西南</city>
403         <city>毕节</city>
404         <city>黔东南</city>
405         <city>黔南</city>
406     </province>
407     <province name="云南">
408         <city>昆明</city>
409         <city>曲靖</city>
410         <city>玉溪</city>
411         <city>保山</city>
412         <city>昭通</city>
413         <city>丽江</city>
414         <city>思茅</city>
415         <city>临沧</city>
416         <city>楚雄</city>
417         <city>红河</city>
418         <city>文山</city>
419         <city>西双版纳</city>
420         <city>大理</city>
421         <city>德宏</city>
422         <city>怒江</city>
423         <city>迪庆</city>
424     </province>
425     <province name="西藏">
426         <city>拉萨</city>
427         <city>昌都</city>
428         <city>山南</city>
429         <city>日喀则</city>
430         <city>那曲</city>
431         <city>阿里</city>
432         <city>林芝</city>
433     </province>
434     <province name="陕西">
435         <city>西安</city>
436         <city>铜川</city>
437         <city>宝鸡</city>
438         <city>咸阳</city>
439         <city>渭南</city>
440         <city>延安</city>
441         <city>汉中</city>
442         <city>榆林</city>
443         <city>安康</city>
444         <city>商洛</city>
445     </province>
446     <province name="甘肃">
447         <city>兰州</city>
448         <city>嘉峪关</city>
449         <city>金昌</city>
450         <city>白银</city>
451         <city>天水</city>
452         <city>武威</city>
453         <city>张掖</city>
454         <city>平凉</city>
455         <city>酒泉</city>
456         <city>庆阳</city>
457         <city>定西</city>
458         <city>陇南</city>
459         <city>临夏</city>
460         <city>甘南</city>
461     </province>
462     <province name="青海">
463         <city>西宁</city>
464         <city>海东</city>
465         <city>海北</city>
466         <city>黄南</city>
467         <city>海南</city>
468         <city>果洛</city>
469         <city>玉树</city>
470         <city>海西</city>
471     </province>
472     <province name="宁夏">
473         <city>银川</city>
474         <city>石嘴山</city>
475         <city>吴忠</city>
476         <city>固原</city>
477         <city>中卫</city>
478     </province>
479     <province name="新疆">
480         <city>乌鲁木齐</city>
481         <city>克拉玛依</city>
482         <city>吐鲁番</city>
483         <city>哈密</city>
484         <city>昌吉</city>
485         <city>博尔塔拉</city>
486         <city>巴音郭楞</city>
487         <city>阿克苏</city>
488         <city>克孜勒苏</city>
489         <city>喀什</city>
490         <city>和田</city>
491         <city>伊犁</city>
492         <city>塔城</city>
493         <city>阿勒泰</city>
494         <city>石河子</city>
495         <city>阿拉尔</city>
496         <city>图木舒克</city>
497         <city>五家渠</city>
498     </province>
499     <province name="香港">
500         <city>香港</city>
501     </province>
502     <province name="澳门">
503         <city>澳门</city>
504     </province>
505     <province name="台湾">
506         <city>台湾</city>
507     </province>
508 </china>
 1 package cn.itcast.web.servlet;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 import org.dom4j.Document;
12 import org.dom4j.Element;
13 import org.dom4j.io.SAXReader;
14 
15 public class CityServlet extends HttpServlet {
16 
17     public void doPost(HttpServletRequest request, HttpServletResponse response)
18             throws ServletException, IOException {
19         request.setCharacterEncoding("utf-8");
20         response.setContentType("text/xml;charset=utf-8");//注意:发送xml这里要修改!!!
21         
22         /*
23          * 获取省份名称,加载该省对应的<province>元素!
24          * 把元素转换成字符串发送给客户端
25          */
26         /*
27          * 1. 获取省份的名称
28          * 2. 使用省份名称查找到对应的<province>元素
29          * 3. 把<province>元素转换成字符串,发送!
30          */
31         try {
32             /*
33              * 得到Document
34              */
35             SAXReader reader = new SAXReader();
36             InputStream input = this.getClass().getResourceAsStream("/china.xml");
37             Document doc = reader.read(input);
38             
39             /*
40              * 获取参数
41              */
42             String pname = request.getParameter("pname");//获取省份名称
43             Element proEle = (Element) doc.selectSingleNode("//province[@name='" + pname + "']");
44             String xmlStr = proEle.asXML();//把元素转换成字符串
45             response.getWriter().print(xmlStr);
46         } catch(Exception e) {
47             throw new RuntimeException(e);
48         }
49     }
50 }
 1 package cn.itcast.web.servlet;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 import org.dom4j.Document;
12 import org.dom4j.Element;
13 import org.dom4j.io.SAXReader;
14 
15 public class CityServlet extends HttpServlet {
16 
17     public void doPost(HttpServletRequest request, HttpServletResponse response)
18             throws ServletException, IOException {
19         request.setCharacterEncoding("utf-8");
20         response.setContentType("text/xml;charset=utf-8");//注意:发送xml这里要修改!!!
21         
22         /*
23          * 获取省份名称,加载该省对应的<province>元素!
24          * 把元素转换成字符串发送给客户端
25          */
26         /*
27          * 1. 获取省份的名称
28          * 2. 使用省份名称查找到对应的<province>元素
29          * 3. 把<province>元素转换成字符串,发送!
30          */
31         try {
32             /*
33              * 得到Document
34              */
35             SAXReader reader = new SAXReader();
36             InputStream input = this.getClass().getResourceAsStream("/china.xml");
37             Document doc = reader.read(input);
38             
39             /*
40              * 获取参数
41              */
42             String pname = request.getParameter("pname");//获取省份名称
43             Element proEle = (Element) doc.selectSingleNode("//province[@name='" + pname + "']");
44             String xmlStr = proEle.asXML();//把元素转换成字符串
45             response.getWriter().print(xmlStr);
46         } catch(Exception e) {
47             throw new RuntimeException(e);
48         }
49     }
50 }

XStream

1. 什么作用
  * 可以把JavaBean转换为(序列化为)xml

2. XStream的jar包
  * 核心JAR包:xstream-1.4.7.jar;
  * 必须依赖包:xpp3_min-1.1.4c(XML Pull Parser,一款速度很快的XML解析器);

3. 使用步骤
  * XStream xstream = new XStream();
  * String xmlStr = xstream.toXML(javabean);

4. 使用细节
  * 别名:把类型对应的元素名修改了
    > xstream.alias("china", List.class):让List类型生成的元素名为china
    > xstream.alias("province", Province.class):让Province类型生成的元素名为province
  * 使用为属性:默认类的成员,生成的是元素的子元素!我们希望让类的成员生成元素的属性
    > xstream.useAttributeFor(Province.class, "name"):把Province类的名为name成员,生成<province>元素的name属性
  * 去除Collection类型的成名:我们只需要Collection的内容,而不希望Collection本身也生成一个元素
    > xstream.addImplicitCollection(Province.class, "cities"):让Province类的名为cities(它是List类型的,它的内容还会生成元素)的成名不生成元素
  * 去除类的指定成名,让其不生成xml元素
    > xstream.omitField(City.class, "description"):在生成的xml中不会出现City类的名为description的对应的元素!


posted @ 2017-08-29 12:41  dielianhua  阅读(295)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3