博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

program-life

所有的一切都要靠我自的努力去获得,这样我才能抬起头来做人...... 别人的永远不会是我的......
myprogramlife.cublog.cn


ajax 入门 2
这次我们使用服务器端servlet来生成一个XML
并在前台页面上使用ajax技术来请求这个servlet,获得它,然后使用javascript来解析它,获得我们需要的信息,其中内容我参考了《基于J2EE的AJAX宝典》,这里向 李刚 大哥说声谢谢,是本好书,推荐ajax初学者买一本细读,其中详细的介绍了javascrpit和CSS,很适合前台技术入门者阅读,还希望技术论坛上不要有人像优酷等大众论坛上的人一样,动不动就说人是“枪手”,生成servlet是一位不知名的仁兄的blog,也谢谢他

首先来看一下页面
内容重点在回调函数中,只有几个方法的使用

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'getXML.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  <script type="text/javascript">
  //定义用于加载xml文档的函数
  
    //定义初始化XHR对象
  var xmlrequest;
  function createXMLHttpRequest(){
      if(window.XMLHttpRequest){
          //mozilla 浏览器
          xmlrequest = new XMLHttpRequest();
      }else if(window.ActiveXObject){
          //IE浏览器
          try{
              xmlrequest = new ActiveXObject("Msxml2.XMLHTTP");
          }catch(e){
              try{
              xmlrequest = new ActiveXObject("Microsoft.XMLHTTP");
          }catch(e){
              
              }
          }
      }
  }
  
    function getXML(){
      //初始化XHR对象;
      createXMLHttpRequest();
      //设置请求响应的URL
      var uri="buildXMLAction";
      //打开与服务器响应地址的链接
      xmlrequest.open("POST",uri,true);
      //设置请求头
      xmlrequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
      //设置处理响应的回调函数
      xmlrequest.onreadystatechange = processResponse;
      //发送请求
      xmlrequest.send(null);
  }
  
    function processResponse(){
      //判断相应是否完成
      if(xmlrequest.readyState == 4){
          //判断响应是否成功
          if(xmlrequest.status == 200){
              //信息已经成功返回,开始处理信息
            //此处使用responseXML属性来获得一个XML文档对象
              var xmlObj = xmlrequest.responseXML;
            //将此对象解析成为”文档”,笔者也不是很清楚为什么这么用
            var xmlDoc=xmlrequest.responseXML.documentElement;              //这里我们使用一个alert来输出信息,首先是xmlDoc.getElementsByTagName(“user”)这个方法返回一个数组,后面的[0]什么的自节点什么的大家动手调一调就明白了,不过结构细节我现在也很糊涂
              alert(xmlDoc.getElementsByTagName("user")[0].childNodes[0].childNodes[0].nodeValue);
                                  //         控制user        控制name,age,sex                内容
          }else{
              //页面不正常
              window.alert("您所请求的页面异常");
          }
      }
  }
  </script>
  <body>
  <input type="button" value="getXML" onclick="getXML()"/><br>
    <div id="outputxml"></div><br>
    <br>
    <br>
    <div id="outputtext"></div><br>
  </body>
</html>

然后是服务器端servlet
请求路径在open函数里, var uri="buildXMLAction";
这里千万要注意的是
response.setContentType("text/xml");
以上这句不可写成
response.setContentType("text/html");

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;


public class buildXMLAction extends HttpServlet {

    /**
     * Constructor of the object.
     */
    public buildXMLAction() {
        super();
    }

    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }

    /**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doPost(request,response);
    }

    /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/xml");
        PrintWriter out = response.getWriter();
           // 创建根节点 list;    
        Element root = new Element("list");    
           
       // 根节点添加到文档中;    
        Document Doc = new Document(root);    
     
       // 此处 for 循环可替换成 遍历 数据库表的结果集操作;    
       for (int i = 0; i < 5; i++) {    
               
           // 创建节点 user;    
           Element elements = new Element("user");    
               
           // 给 user 节点添加属性 id;    
           elements.setAttribute("id", "" + i);    
               
           // 给 user 节点添加子节点并赋值;    
           // new Element("name")中的 "name" 替换成表中相应字段,setText("xuehui")中 "xuehui 替换成表中记录值;    
           elements.addContent(new Element("name"+i).setText("xuehui"+i));   
           elements.addContent(new Element("age"+i).setText("28"+i));   
           elements.addContent(new Element("sex"+i).setText("Male"+i));   
    
           // 给父节点list添加user子节点;   
           root.addContent(elements);   
    
       }   
        XMLOutputter XMLOut = new XMLOutputter();   
          
       // 输出 user.xml 文件;   
        XMLOut.output(Doc, out);   
        out.flush();
        out.close();
    }

    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occure
     */
    public void init() throws ServletException {
        // Put your code here
    }

}

此servlet生成的xml如下

  <?xml version="1.0" encoding="UTF-8" ?> 
- <list>
- <user id="0">
  <name0>xuehui0</name0> 
  <age0>280</age0> 
  <sex0>Male0</sex0> 
  </user>
- <user id="1">
  <name1>xuehui1</name1> 
  <age1>281</age1> 
  <sex1>Male1</sex1> 
  </user>
- <user id="2">
  <name2>xuehui2</name2> 
  <age2>282</age2> 
  <sex2>Male2</sex2> 
  </user>
- <user id="3">
  <name3>xuehui3</name3> 
  <age3>283</age3> 
  <sex3>Male3</sex3> 
  </user>
- <user id="4">
  <name4>xuehui4</name4> 
  <age4>284</age4> 
  <sex4>Male4</sex4> 
  </user>
  </list>

下次我们说说XML的结构和注意事项,最近看CSDN上的<疯狂的程序员>,比较上瘾,已经被领导在工作时间看到多次我在看小说 - - 相信很多朋友可以在绝影身上找到自己当年的影子,毕业在即,心中实在感慨良多,也祝愿绝影兄长完事如意,希望他的故事能鼓舞更多朋友

 原文地址 http://www.javaresearch.org/article/96409.htm
发表于: 2008-04-03 ,修改于: 2008-04-03 17:21,已浏览324次,有评论0条 推荐 投诉


网友评论

发表评论