`
xsuo
  • 浏览: 123393 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

利用jaxp、dom实现ajax xml 响应

阅读更多
<iframe width="336" scrolling="no" height="280" frameborder="0" allowtransparency="true" hspace="0" vspace="0" marginheight="0" marginwidth="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-1832179689702023&amp;dt=1183008743078&amp;lmt=1179059997&amp;format=336x280_as&amp;output=html&amp;correlator=1183008743078&amp;channel=7111701428&amp;url=http%3A%2F%2Fwww.java3z.com%2Fcwbwebhome%2Farticle%2Farticle5%2F5594.html%3Fid%3D948&amp;color_bg=FFFFFF&amp;color_text=000000&amp;color_link=0000FF&amp;color_url=3D81EE&amp;color_border=FFFFFF&amp;ad_type=text_image&amp;ref=http%3A%2F%2Fwww.google.cn%2Fsearch%3Fcomplete%3D1%26hl%3Dzh-CN%26newwindow%3D1%26q%3DAJAX%2BXML%26btnG%3DGoogle%2B%25E6%2590%259C%25E7%25B4%25A2%26meta%3D&amp;cc=52&amp;flash=9&amp;u_h=800&amp;u_w=1280&amp;u_ah=770&amp;u_aw=1280&amp;u_cd=32&amp;u_tz=480&amp;u_his=1&amp;u_java=true&amp;u_nplug=13&amp;u_nmime=50" name="google_ads_frame"></iframe>

DocumentBuilderFactory factory = DocumentBuilderFactory. newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.newDocument();
创建root元素 或其它元素 Element root = doc.createElement("selects");

doc.appendChild(root);
Element的appendChild()方法用来添加子元素

创建文本结点 doc.createTextNode(String textNode)

在servlet中 通过以下方法转换到输出流
Transformer t = TransformerFactory.newInstance().newTransformer();
t.transform(new DOMSource(doc), new StreamResult(response.getWriter()));

一、 web.inf 文件配置一个servlet
<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>

<servlet>
<servlet-name>SelectServlet</servlet-name>
<servlet-class>drownmenu.SelectServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SelectServlet</servlet-name>
<url-pattern>/SelectServlet</url-pattern>
</servlet-mapping>
</web-app>

二、JSP页面
<%@ page language="java" contentType="text/html; charset=utf-8"%>

<html>
<head>
<title>Ajax 联动下拉框</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<SCRIPT type="text/javascript">

        var req;
window.onload=function(){
}
function Change_Select()
{
var zhi=document.getElementById('state').value;
var url="/Tajax/SelectServlet?id="+escape(zhi);
if(window.XMLHttpRequest)
{
req=new XMLHttpRequest();
}else if(window.ActiveXObject)
{
req=new ActiveXObject("Microsoft.XMLHTTP");
}
if(req)
{
req.open("GET",url,true);
req.onreadystatechange=callback;
req.send(null);
}
}
function callback()
{
if(req.readyState == 4)
{
if(req.status == 200)
{
parseMessage();
}else{
alert("Not able to retrieve description"+req.statusText);
}
}
}
function parseMessage()
{
var xmlDoc=req.responseXML.documentElement;
var xSel=xmlDoc.getElementsByTagName('select');
var select_root=document.getElementById('city');
select_root.options.length=0;
for(var i=0;i< xSel.length;i++)
{
var xValue=xSel[i].childNodes[0].firstChild.nodeValue;
var xText=xSel[i].childNodes[1].firstChild.nodeValue;
var option=new Option(xText,xValue);
try{
select_root.add(option);
}catch(e){
}
}
}
</script>
</head>

<body>
<div align="center">
<form name="form1" method="post" action="">
<TABLE width="70%" boder="0" cellspacing="0">
<TR>
<TD align="center">Ajax 联动下拉框</TD>
</TR>
<TR>
<TD>请选择省份:

<SELECT name="state" id="state" onChange="Change_Select()">
<OPTION value="0">未选择</OPTION>
<OPTION value="1">湖南</OPTION>
<OPTION value="2">湖北</OPTION>
</SELECT>

请选择城市:
<SELECT name="city" id="city">
<OPTION value="0">未选择</OPTION>
</SELECT>
</TD>
</TR>
<TR><td>&nbsp;</td></TR>
</TABLE>
</form>
</div>
</body>
</html>

三、 SelectServlet 类
package drownmenu;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.dom.*;

public class SelectServlet extends HttpServlet {

//Initialize global variables
public void init() throws ServletException {
}

//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String targetId = request.getParameter("id").toString();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/xml");
try {
DocumentBuilderFactory factory = DocumentBuilderFactory. newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();

Element root = doc.createElement("selects");
doc.appendChild(root);

/*
String xml_start="<selects>";
String xml_end="</selects>";
String xml="";
*/

if (targetId.equalsIgnoreCase("0")) {
makeElement(doc, root, new String[] {"未选择"});
// xml = "<select><value>0</value><text>Unbounded</text></select>";
}
if (targetId.equalsIgnoreCase("1")) {
makeElement(doc, root, new String[] {"长沙","岳阳"});

/* xml ="<select><value>1</value><text>Mana Burn</text></select>";
xml +="<select><value>2</value><text>Death Coil</text></select>";
xml +="<select><value>3</value><text>Unholy Aura</text></select>";
xml +="<select><value>4</value><text>Unholy Fire</text></select>";
*/
}

if (targetId.equalsIgnoreCase("2")) {
makeElement(doc, root, new String[] {"武汉","石堰","襄樊","孝感"});
/*
xml ="<select><value>1</value><text>Corprxplode</text></select>";
xml +="<select><value>2</value><text>Raise Dead</text></select>";
xml +="<select><value>3</value><text>Brilliance Aura</text></select>";
xml +="<select><value>4</value><text>Aim Aura</text></select>";
*/
} //else {
// makeElement(doc, root, new String[] {"何畅1", "何畅2", "何畅3"});
/*
xml ="<select><value>1</value><text>Rain of Chaos</text></select>";
xml +="<select><value>2</value><text>Finger of Death</text></select>";
xml += "<select><value>3</value><text>Bash</text></select>";
xml +="<select><value>4</value><text>Summon Doom</text></select>";
*/
// }

Transformer t = TransformerFactory.newInstance().newTransformer();
t.transform(new DOMSource(doc), new StreamResult(response.getWriter()));

} catch (Exception ex) {
throw new ServletException(ex.toString());
}
// String last_xml = xml_start + xml + xml_end;
// response.getWriter().write(last_xml);
}

private void makeElement(Document doc, Element root, String[] name) throws  DOMException {
if (name == null) {
return;
}

for (int i = 0; i < name.length; i++) {
Element selectElement = doc.createElement("select");
root.appendChild(selectElement);

Element valueElement = doc.createElement("value");
Element textElement = doc.createElement("text");
int t=i+1;
Text valueText = doc.createTextNode(""+t);
Text textText = doc.createTextNode(name[i]);
valueElement.appendChild(valueText);
textElement.appendChild(textText);
selectElement.appendChild(valueElement);
selectElement.appendChild(textElement);
}

}

//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

//Clean up resources
public void destroy() {
}
}

运行图:

分享到:
评论

相关推荐

    Java and XML, 3rd Edition

    《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...

    基于AjaxP的通用查询

    "基于AjaxP的通用查询"主题探讨了如何利用AjaxP来实现动态、实时的网页数据检索,提升用户体验。 一、AjaxP基础概念 1. **异步通信**:AjaxP的核心特性是异步处理,意味着后台数据请求和页面的其他操作可以并行...

    xmldom解析

    开发者可以通过AJAX(Asynchronous JavaScript and XML)技术从服务器获取XML数据,然后使用这些API解析和展示数据。 - 比如,一个Web应用可能从服务器获取XML天气预报数据,然后使用JavaScript的DOM解析功能动态...

    JAVA与XML.rar

    《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...

    Java and XML(英文第三版)

    including full coverage of the SAX, DOM, StAX, JDOM, and dom4j APIs as well as the latest version of the Java API for XML Processing (JAXP) and Java Architecture for XML Binding (JAXB). The chapters ...

    xml编程教程

    5.1 AJAX(Asynchronous JavaScript and XML):利用XML进行异步数据交换,实现网页的无刷新更新。 5.2 RSS/Atom:XML格式的新闻订阅和聚合,促进信息传播。 5.3 JSON(JavaScript Object Notation):虽非XML,但...

    High-Performance XML Processing

    - 学习如何利用JSR206(Java™ API for XML Processing, JAXP)1.3软件。 - 掌握JAXP 1.3在性能和功能性方面的最新进展。 - 了解如何进行有效的XML验证、转换和XPath查询。 - 探索新的API以及XML使用约定。 - 展望...

    Java常用架包

    相比标准的JAXP DOM实现,dom4j具有更好的性能和更简洁的API。它支持XML Schema、XPath和XSLT,并且可以方便地与各种Java技术集成,如Spring框架中的XML配置。使用dom4j,你可以轻松地读取、写入、修改XML文档,甚至...

    面试大全....最全的javeEE面试宝典

    1. JAXP(Java API for XML Processing):JAXP是早期的XML处理接口,但自JDK 1.7起,其部分功能已被其他API取代,现在不建议使用。 2. JDOM:JDOM提供了一个简单的API来解析XML,但它的抽象类和类较多,现已较少...

    Java 面试题

    - **定义**:Ajax是“Asynchronous JavaScript and XML”的缩写,指的是使用JavaScript异步请求XML文档(以及其他格式的数据),从而实现在不刷新整个网页的情况下更新部分内容的技术。 - **技术栈**: - **...

    java学习线路

    * XML 进阶:DOM、SAX 和 JAXP、dom4j、JDOM 等工具、XQuery 和XQJ、基于 XML 的数据交换 五、Web Service * JAX_WS2、SAAJ 规范、WSDL 和 SOAP 协议、CXF框架、拦截器、CXF 整合 Spring 六、Java Web 编程 * ...

    java面试中重点题目

    - **JAXP**(Java API for XML Processing):提供了DOM、SAX等解析API。 - **DOM**(Document Object Model):构建XML文档的树形结构,便于查询和修改。 **JDBC操作:** - 使用JDBC连接数据库,执行SQL语句进行...

    JAVA体系总结内容.doc

    9. **XML基础和进阶**:XML用于数据交换,DTD和Schema定义结构,DOM、SAX和JAXP处理XML,工具如dom4j、JDOM简化操作。 10. **Web服务**:通过JAXWS2和SAAJ标准实现,WSDL和SOAP定义服务接口,CXF框架支持Web服务...

    JAVA爱好者

    8. **Java标准库API**:Java拥有庞大的标准库,如JDBC用于数据库操作,JAXP和SAX/DOM用于XML解析,JNDI进行命名和目录服务,等等。 9. **Java虚拟机(JVM)**:理解JVM的工作原理,包括类加载、内存管理(堆、栈、...

    J2EE快速进阶培训-bmp.ppt

    - JAXP提供XML解析、转换和样式表处理的能力,支持DOM、SAX和XSLT接口。 8. **JSF(JavaServer Faces)** - JSF是一种用于构建用户界面的MVC框架,提供了丰富的组件库和事件处理机制。 9. **Web服务** - JAX-WS...

    JavaEE.doc

    - **JAXP编程**:掌握使用Java API for XML Processing (JAXP)解析XML文档的方法。 - **DOM4j编程**:学会使用DOM4j解析和生成XML文档。 - **Struts架构应用开发** - **Struts框架工作原理**:理解Struts的工作...

    J2ee学习轨迹.txt

    - **XML处理**:熟悉XML的基本语法,学习DOM、SAX、XQuery、XPath等技术。 - **EJB 3.0**:了解EJB 3.0的特性,学习如何使用EJB 3.0开发企业级应用。 - **安全性**:学习Java安全性的相关知识,包括认证、授权、...

    Java编程培训

    - 《Java语言与XML处理教程:SAX,DOM,JDOM,JAXP与TrAX指南》【美】Elliotte Rusty Harold著 - **相关资源**: - [XML四种解析方法的比较](http://blog.chinaunix.net/u/25176/showart_379827.html) - [XML解析...

    系统java学习

    - **DOM4j编程**:使用DOM4j库解析XML文档。 2. **Struts架构应用开发** - **Struts框架工作原理**:理解Struts框架的架构及工作流程。 - **Struts配置**:学习如何配置Struts框架。 - **核心组件**:掌握...

    spring+struts+hibernate+dwr+jstl做的实例

    完全由Spring接管DWR AJAX处理(不需要配置dwr.xml)等技术点 源码在/mytest/WEB-INF/src下 Winxp sp3+JDK1.6+Tomcat 6.0下运行通过 因文件长度限制,未加入相关类库,请自行加入,需要的类库有: dom.jar...

Global site tag (gtag.js) - Google Analytics