java隨記

          堅持就是勝利!

           

          利用jaxp dom 實現 ajax xml 響應

          在某些情況下用 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="UTF-8"?>
          <web-app xmlns="http://java.sun.com/xml/ns/j2ee? <display-name>WebModule1</display-name>
          ? <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="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 {
          ?????????????
          ??????????????? /*
          ?????????????????? 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() {
          ??? }
          }


          歡迎加入QQ群:30406099?

          posted on 2006-06-29 16:06 傻 瓜 閱讀(2611) 評論(0)  編輯  收藏 所屬分類: Ajax

          導航

          統計

          常用鏈接

          留言簿(7)

          我參與的團隊

          隨筆分類

          隨筆檔案

          文章分類

          友情鏈接

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 丹寨县| 柳江县| 南漳县| 津市市| 海安县| 九龙坡区| 麦盖提县| 崇文区| 察哈| 扎赉特旗| 通州区| 禄丰县| 南靖县| 泰州市| 平泉县| 长子县| 景洪市| 贵溪市| 河津市| 册亨县| 扬中市| 临高县| 峡江县| 天峨县| 灵宝市| 邵武市| 达州市| 西吉县| 宝山区| 长寿区| 孟连| 清河县| 安达市| 嘉定区| 平远县| 九寨沟县| 砚山县| 舞阳县| 安远县| 定兴县| 阿图什市|