JR 精品文章 - ajax 入门 2
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » JSP/Servlet/JSF 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
ajax 入门 2
包子 原创   更新:2008-03-31 16:20:31  版本: 1.0   

这次我们使用服务器端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上的<疯狂的程序员>,比较上瘾,已经被领导在工作时间看到多次我在看小说 - - 相信很多朋友可以在绝影身上找到自己当年的影子,毕业在即,心中实在感慨良多,也祝愿绝影兄长完事如意,希望他的故事能鼓舞更多朋友


版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     14       0
作者其它文章: 作者全部文章
评论人:richilee 发表时间: Tue Apr 01 13:12:14 CST 2008
[good][:)]
评论人:fgt___73 发表时间: Tue Apr 01 16:46:11 CST 2008
[:)][:D][call]
评论人:liuchenyu 发表时间: Wed Apr 02 11:25:08 CST 2008
[V]
评论人:zf534685796 发表时间: Tue Apr 15 13:36:13 CST 2008
gfdg

这个文章共有 4 条评论
主题: 用jsp动态输出excel文档和中文乱码问题的解决 上一篇文章
返回文章列表 返回〔JSP/Servlet/JSF〕
下一篇文章 主题: JSTL的四舍五入


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号