Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 349|回复: 0

[AJAX学习]利用jaxp、dom实现ajax xml 响应

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-13 05:54:00 | 显示全部楼层 |阅读模式
    在某些情况下用 jaxp dom api 实现ajax xml响应会是一个很好的选择,可以简化程序.需要用到的jar包

    javax.xml.parsers.*;
    org.w3c.dom.*;
    javax.xml.transform.*;
    javax.xml.transform.stream.*;
    javax.xml.transform.dom.*;

           前两个包用来创建xml文档,后面几个用来转换到输出流. 以下用先简要说明,然后贴出一个完整实例

    创建新文档         
       
      
       
       
       

       
      
      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">

    1.         var req;
    2.         window.onload=function(){
    3.         }
    4.         function Change_Select()
    5.         {
    6.             var zhi=document.getElementById("state").value;
    7.             var url="/Tajax/SelectServlet?id="+escape(zhi);
    8.             if(window.XMLHttpRequest)
    9.             {
    10.                 req=new XMLHttpRequest();
    11.             }else if(window.ActiveXObject)
    12.             {
    13.                 req=new ActiveXObject("Microsoft.XMLHTTP");
    14.             }
    15.             if(req)
    16.             {
    17.                 req.open("GET",url,true);
    18.                 req.onreadystatechange=callback;
    19.                 req.send(null);
    20.             }
    21.         }
    22.         function callback()
    23.         {
    24.             if(req.readyState == 4)
    25.             {
    26.                 if(req.status == 200)
    27.                 {
    28.                     parseMessage();
    29.                 }else{
    30.                     alert("Not able to retrieve description"+req.statusText);
    31.                 }
    32.             }
    33.         }
    34.         function parseMessage()
    35.         {
    36.             var xmlDoc=req.responseXML.documentElement;
    37.             var xSel=xmlDoc.getElementsByTagName("select");
    38.             var select_root=document.getElementById("city");
    39.             select_root.options.length=0;
    40.             for(var i=0;i< xSel.length;i++)
    41.             {
    42.                 var xValue=xSel[i].childNodes[0].firstChild.nodeValue;
    43.                 var xText=xSel[i].childNodes[1].firstChild.nodeValue;
    44.                 var option=new Option(xText,xValue);
    45.                 try{
    46.                     select_root.add(option);
    47.                 }catch(e){
    48.                 }
    49.             }
    50.         }
    51.    
    复制代码
    </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> </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);
         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() {
    }
    } 运行图:
      

      
      
       
       

         
       

         
       
      



    源码下载:http://file.javaxxz.com/2014/10/13/055359906.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-15 16:02 , Processed in 0.378854 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表