`
米奈希尔
  • 浏览: 266895 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Ajax在请求和响应中使用XML示例

阅读更多

本文旨在展示如何使用xml进行请求和相应的数据传输,因此并没有使用复杂的xml解析语法,如何解析和构建XML不是本文的重点;此外,程序没有对包含对中文内容的处理,关于中文乱码的问题,我将在接下来的文章中说明。

 

程序很简单:

填写表单-->客户端构建xml数据,发送请求到服务端-->服务端获取请求数据,解析并构建xml数据,发送响应-->客户端获取响应数据,解析并显示数据

 

代码如下:

xmldemo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ajax with XML</title>
<script type="text/javascript" src="js/xmldemo.js"></script>
</head>
<body>
	<table align="center">
		<tr>
			<td>Name</td>
			<td><input type="text" name="name" id="name"/></td>
		</tr>
		<tr>
			<td>City</td>
			<td><input type="text" name="city" id="city"/></td>
		</tr>
		<tr>
			<td colspan="2"><input type="button" value="Submit" onclick="callServer()"/></td>
		</tr>
	</table>
</body>
</html>

 因为使用Ajax异步通信,所以无需form

 

xmldemo.js

// XMLHttpRequest对象定义
var xmlHttp = false;

function createXmlHttpRequest() {
	try{
		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch(e) {
		try{
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch(e2) {
			xmlHttp = false;
		}
	}
	
	if(!xmlHttp && typeof XMLHttpRequest != "undefined") {
		xmlHttp = new XMLHttpRequest();
	}
}

function callServer() {
	// 获取表单数据
	var name = document.getElementById("name").value;
	var city = document.getElementById("city").value;
	// 构建xml格式数据
	var xmlString = "<profile>" + 
				"<name>" + name + "</name>" +
				"<city>" + city + "</city>" + 
				"</profile>";
	
	// 获取XMLHttpRequest对像
	createXmlHttpRequest();
	// xmlDemo对应服务端servlet
	xmlHttp.open("POST", "xmlDemo", true);
	// 指示请求内容为xml格式
	xmlHttp.setRequestHeader("Content-type", "text/xml");
	// 指定回调函数
	xmlHttp.onreadystatechange = updatePage;
	// 设定发送的内容
	xmlHttp.send(xmlString);
}

// 回调函数定义
function updatePage() {
	if(xmlHttp.readyState == 4) {
		if(xmlHttp.status == 200) {
			// 获取响应数据
			xmlDoc = xmlHttp.responseXML;
			var nameElement = xmlDoc.getElementsByTagName("name").item(0);
			var name = nameElement.firstChild.nodeValue;
			var cityElement = xmlDoc.getElementsByTagName("city").item(0);
			var city = cityElement.firstChild.nodeValue;
			
			alert("Name : " + name + "\n" + "City : " + city);
		} else {
			alert("Error : status code is " + xmlHttp.status);
		}
	}
} 

 

XmlDemoServlet.java

package com.ajaxdemo.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

import com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl;

/**
 * Servlet implementation class XmlDemoServlet
 */
@WebServlet("/xmlDemo")
public class XmlDemoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public XmlDemoServlet() {
        super();
    }

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	private void processRequest(HttpServletRequest req, HttpServletResponse res) throws IOException {
		// Document对象
		Document doc = null;
		DocumentBuilderFactory dbf = new DocumentBuilderFactoryImpl();
		try {
			DocumentBuilder db = dbf.newDocumentBuilder();
			doc = db.parse(req.getInputStream());
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		// 获取请求参数
		Node nameElement = doc.getElementsByTagName("name").item(0);
		String name = nameElement.getFirstChild().getNodeValue();
		Node cityElement = doc.getElementsByTagName("city").item(0);
		String city = cityElement.getFirstChild().getNodeValue();
		
//		System.out.println("# " + name + " " + city + "#");
		
		// 构建响应xml格式数据
		String xmlData = "<profile>" +
				"<name>" + name + "</name>" +
				"<city>" + city + "</city>" + 
				"</profile>";
		
		// 设置响应格式
		res.setContentType("text/xml");
		PrintWriter out = res.getWriter();
		out.println(xmlData);
		
		out.close();
	}
}

 这里没有给出xml文件,因为使用了注解方式注册servlet,如下

@WebServlet("/xmlDemo")

 

很简单的一个程序,当然还不完善,但对于理解如何使用xml格式在请求和响应中传输数据应该足够了。

 

0
0
分享到:
评论

相关推荐

    Ajax的学习资料

    Ajax的学习资料 Ajax基础 DOM基础 基于DOM的Web应用程序示例 使用Ajax发送异步请求 在请求和响应中使用XML 使用JSON进行数据传输

    Ajax详解.rar

    第 7 部分: 在请求和响应中使用 XML 85 1.6 XML:到底用没用? 85 1.7 使用 XML(真正) 86 1.8 从客户机到服务器的 XML 87 1.9 发送 XML:好还是不好? 91 第 8 部分:在请求和响应中使用 XML 92 1.1 服务器...

    Ajax基础教程(扫描版)

    阅读本书,再加上已有的开发经验,你也能在应用中使用超炫的ajax技术,使你的网站立即焕然一新!这一过程将乐趣无穷,我们衷心地希望,有一天能看到你开发的基于ajax的一流应用!... 目录 译者序. 前言 致谢 关于...

    AJAX开发简略含续一(PDF 包含源代码)

    四、谁在使用AJAX 五、用AJAX改进你的设计  例子1:数据校验  例子2:按需取数据—级联菜单  例子3:读取外部数据 六、AJAX的缺陷 七、AJAX开发  7.1、AJAX应用到的技术  A、XMLHttpRequest对象  B、...

    AJAX开发简略含续一(PDF)

     7 5 3 如何在使用XML还是普通文本间权衡"&gt;csdn也有一份相关的文档 不过他的已经加密 添加不了附注 所以这里上传一份没有加密的 内容是一样的 目录: 一 AJAX定义 二 现状与需要解决的问题 三 为什么使用AJAX 四 ...

    AJAX开发简略(附源代码)

    四、谁在使用AJAX. 6 五、用AJAX改进你的设计... 6 例子1:数据校验... 7 例子2:按需取数据—级联菜单... 7 例子3:读取外部数据... 7 六、AJAX的缺陷... 7 七、AJAX开发... 8 7.1、AJAX应用...

    AJAX开发简略含续一(PDF).rar

    软件介绍 目录: 一、AJAX定义 二、现状与需要解决的问题 三、为什么使用AJAX 四、谁在使用AJAX 五、用AJAX改进你的设计 ...六、AJAX的缺陷 ...七、AJAX开发 ... 7.5.3、如何在使用XML还是普通文本间权衡

    浅谈Ajax请求与浏览器缓存

    在现代Web应用程序中,前端代码充斥着大量的Ajax请求,如果对于Ajax请求可以使用浏览器缓存,那么可以显著地减少网络请求,提高程序响应速度。 1. Ajax Request 使用jQuery框架可以很方便的进行Ajax请求,示例代码...

    【卷一/共两卷】AJAX实战pdf高清版90M

    12.1.3 研究使用Ajax和XSLT的动态搜索 12.1.4 向客户端发回结果 12.2 客户端的代码 12.2.1 设置客户端 12.2.2 启动搜索过程 12.3 服务器端的PHP代码 12.3.1 创建XML文档 12.3.2 创建XSLT文档 12.4 合并XSLT和XML文档...

    AJAX开发简略

    7.1、AJAX应用到的技术  A、XMLHttpRequest对象  B、Javascript  C、DOM  D、XML  7.2、AJAX开发框架  A、初始化对象并发出XMLHttpRequest请求  B、指定响应处理函数  C、发出HTTP...

    dwr(文档及示例)

    使用 DWR 可以有效地从应用程序代码中把 Ajax 的全部请求-响应循环消除掉。这意味着客户端代码再也不需要直接处理 XMLHttpRequest 对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象...

    大名鼎鼎的IBM公司 Ajax 培训资料

    幸运的是,在 JavaScript 技术中使用 DOM 很容易,也非常直观。现在,按照常规也许应该说明如何使 用 DOM,或者至少要给出一些示例代码,但这样做也可能误导您。即使不理会 DOM,仍然能深入地探 讨 Ajax,这也是我...

    FM-AJAXPOST:演示使用 AJAX 的 FileMaker 文件,该文件支持 POST、GET、PUT 和 DELETE 方法将数据提交到 Web 服务

    在示例文件中,我们使用一些相当简单的 Javascript(没有 jquery 或其他依赖项)来创建我们的请求并返回我们作为结果得到的任何响应,并将其记录在我们的数据库中。 通过将我们的值替换到用于执行请求的 HTML 中,...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称). +所有的面板默认有两个集合属性(Toolbars和Items). -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置...

    JavaScript完全自学宝典 源代码

    \lib目录 在Java中使用JSON需要的lib包列表。 \testJson\src\jsonExercise\JSONServlet.java 处理页面请求的Servlet。 \testJson\src\jsonExercise\ComdtyBean.java 商品信息的POJO。 \testJson\Web...

    [完整][中文][WEB安全测试].(美)霍普.扫描版.pdf

    通过本书和示例中所用的免费工具,你可以将安全因素加入到你的测试套装中,从而得以睡个安稳觉。 作者简介  Paco Hope,是Cigital公司的一名技术经理,《Mastering FreeBsD and 0penBsDsecurity》 (由O’Reilly...

    java命名规范 开发规范

    5. 响应一个请求的分层结构约定,列举几个示例(常规调用、Ajax调用、WebService调用、提供WebService暴露、硬件设备接口调用); 6. 验证代码质量的约定,如JUnit、EMMA、FindBugs、CheckStyle、PMD的使用;Hudson...

Global site tag (gtag.js) - Google Analytics