`
sco.struts
  • 浏览: 18913 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

IBM:使用AJAX构建应用程序

    博客分类:
  • Web
阅读更多
----- library.js -----
var req;
var url; 

function startup() {
 document.forms[0].subscriptionID.focus = true;
} 

/* 创建XMLHttpRequest对象
 * 处理Mozilla和非Microsoft浏览器
 * try {
 *   req = new ActivexObject("Msxml2.XMLHTTP");
 * } catch(e) {
 *   try {
 *     req = new ActiveObject("Microsoft.XMLHTTP");
 *   } catch(e) {
 *     req = false
 *   }
 * }
 * if(!req && typeof XMLHttpRequest != 'undefined') {
 *   req = new XMLHttpRequest();
 * }
 * 指定POST连接方法和要连接的URL,true表示请求一个异步连接
 * Content-Type头被设置为让服务器预知它能得到何种数据
 * application/x-www-form-urlencoded让服务器知道发送的是文本
 */
function init() {
 if (window.XMLHttpRequest) {
  req = new XMLHttpRequest();
 } else if (window.ActiveXObject) {
  req = new ActiveXObject("Microsoft.XMLHTTP");
 }
 var url = "/Library/LibraryServlet";
 req.open("POST", url, true);
 req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
} 

/* ①验证订购ID
 * onreadystatechange告诉服务器运行完成后做什么
 * 如果服务器完成了请求,subscriptionValidator方法将被调用
 * 获取表单中用户输入的subscriptionID,以名/值对格式发送请求
 * 请求被发送到servlet,servlet处理请求并实时地发回响应
 */
function validate(formObj) {
 init();
 req.onreadystatechange = subscriptionValidator;
 req.send("subscriptionID=" + formObj.subscriptionID.value);
} 

/* ②查看作者和出版社
 * field为"author"或"pubs"
 */
function displayList(field) {
 init();
 titles.innerHTML = " ";
 req.onreadystatechange = listHandler;
 req.send("select=" + escape(field));
} 

/* ③查看书名
 * index获取作者列表或出版社被选项的位置
 * val获取被选项的value值,如A1、P2
 */
function displayTitles(formObj) {
 init();
 var index = formObj.list.selectedIndex;
 var val = formObj.list.options[index].value;
 req.onreadystatechange = titlesHandler;
 req.send("list=" + val);
} 

/* ①响应被发送回客户机
 * readystate等于4,客户机接收到了响应而且接收完成
 * status等于200,响应正常
 * 调用responseXML属性读取响应
 * 如果返回true,显示"Subscription is valid",并且按钮order被置为不可用
 */
function subscriptionValidator() {
 if (req.readystate == 4) {
  if (req.status == 200) {
   /* http://localhost:8080/Library/LibraryServlet?subscriptionID=john
    * 返回信息:<message>true</message>
    */
   var messageObj = req.responseXML.getElementsByTagName("message")[0];
   var message = messageObj.childNodes[0].nodeValue;
   if (message == "true") {
    msg.innerHTML = "Subscription is valid";
    document.forms[0].order.disabled = false;
   } else {
    msg.innerHTML = "Subscription not valid";
    document.forms[0].order.disabled = true;
   }
  }
 }
} 

/* ③
 */
function titlesHandler() {
 if (req.readystate == 4) {
  if (req.status == 200) {
   /* http://localhost:8080/Library/LibraryServlet?list=P1
    * 返回信息:
    * <root>
    *  <index>3</index> 
    *  <list>Java Servlet Programming</list> 
    *  <list>Enterprise JavaBeans</list> 
    *  <list>Head First Java</list> 
    * </root>
    */
   var titles = document.getElementById("titles");
   var indexObj = req.responseXML.getElementsByTagName("index")[0];
   var index = indexObj.childNodes[0].nodeValue;
   
  
   var temp = "<select name=\"titles\" multiple>"; 

   for (var i=0; i<index; i++) {
    var listObj = req.responseXML.getElementsByTagName("list")[i];
    temp = temp + "<option value=" + i +">" + listObj.childNodes[0].nodeValue + "</option>";
   } 

   temp = temp + "</select>";
   titles.innerHTML = temp;
   
  }
 }
} 

/* ②
 */
function listHandler() {
 var prefix;
 if (req.readystate == 4) {
  if (req.status == 200) {
   /* http://localhost:8080/Library/LibraryServlet?select=author
    * 返回信息:
    * <root>
    *  <index>7</index> 
    *  <list>---</list> 
    *  <list>Jason Hunter</list> 
    *  <list>Richard Monson - Haefel</list> 
    *  <list>Kathy Sierra</list> 
    *  <list>Michael Morrison</list> 
    *  <list>Craig Larman</list> 
    *  <list>Hanumant Deshmukh</list> 
    * </root>
    */
   //var list = document.getElementById("list");
   var authorOption = document.getElementById("select")
   if (authorOption.checked) {
    prefix = "A";
   } else {
    prefix = "P";
   }
   var list = document.getElementById("selectionList");
   var indexObj = req.responseXML.getElementsByTagName("index")[0];
   var index = indexObj.childNodes[0].nodeValue;
   //选择作者或出版社下拉框触发onchange事件
   var temp = "<select name=\"list\" onchange=\"displayTitles(this.form)\">";
   for (var i=0; i<index; i++) {
    var listObj = req.responseXML.getElementsByTagName("list")[i];
    temp = temp + "<option value=" + prefix + i +">" + listObj.childNodes[0].nodeValue + "</option>";
   } 

   temp = temp + "</select>";
   list.innerHTML = temp;
  }
 }
}


----- LibraryServlet.java -----
package project.ajax; 

import java.io.IOException; 

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException; 

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

import java.util.*; 

/**
 * @version  1.0
 * @author
 */
public class LibraryServlet extends HttpServlet { 

 private Hashtable titles;
 final private String ID = "John"; 

 public void init() {
  this.populateTitles();  
 } 
 
 /**
   * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
  */
 public void doGet(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, IOException {
  this.doPost(req, resp);
 } 

 /**
  * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
  */
 public void doPost(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, IOException {
   String option = null;
   String key = null;
   String[] list = null;
   String xmlString = null;
   String ID = null; 

   option = req.getParameter("select"); //②作者和出版社
   key = req.getParameter("list"); //书名
   ID = req.getParameter("subscriptionID"); //①订购ID 

   //②
   if (option != null) {
    if (option.equals("author")) {
     list = this.populateAuthors();
     xmlString = this.getXMLData(list);
     this.writeResponse(resp, xmlString);
    } else if (option.equals("pubs")) {
     list = this.populatePubs();
     xmlString = this.getXMLData(list);
     this.writeResponse(resp, xmlString);
    }
   } 

   //③
   if (key != null ) {
    list = this.getTitle(key);
    xmlString = this.getXMLData(list);
    this.writeResponse(resp, xmlString);
   }
   
   //①响应用XML格式发送,调用validID()方法获取验证信息
   if (ID != null) {
    String status = "<message>" + this.validID(ID) + "</message>";
    this.writeResponse(resp, status);
   }
 } 

 //①设置响应的内容类型为text/xml
 //将头Cache-Control的值设为no-cache,这个值是必需的,AJAX要求响应的输出不能被浏览器缓存
 //调用getWriter().write()方法来写响应
 public void writeResponse(HttpServletResponse resp, String output) throws IOException {
  resp.setContentType("text/xml");
  resp.setHeader("Cache-Control", "no-cache");
  resp.getWriter().write(output);
 }
 
 //③获取Hashtable型titles的某个值
 public String[] getTitle(String key) {
  return (String[]) titles.get(key);
  
 }   

 //②作者列表
 private String[] populateAuthors() {
  String[] authors = new String[7];
  authors[0] = "---";
  authors[1] = "Jason Hunter";
  authors[2] = "Richard Monson - Haefel";
  authors[3] = "Kathy Sierra";
  authors[4] = "Michael Morrison";
  authors[5] = "Craig Larman";
  authors[6] = "Hanumant Deshmukh";
  
  return authors;
 }
 
 //将字符串数组转为XML
 private String getXMLData(String[] data) {
  String xmlString = "";
  xmlString = xmlString + "<root>";
  xmlString = xmlString + "<index>" + data.length + "</index>";
  for (int i=0; i<data.length; i++) {
   xmlString = xmlString + "<list>" + data[i] + "</list>";
  }
  xmlString = xmlString + "</root>";
  
  return xmlString;
 }
 
 //②出版社列表
 private String[] populatePubs() {
  String[] pubs = new String[5];
  pubs[0] = "---";
  pubs[1] = "Orielly";
  pubs[2] = "Techmedia";
  pubs[3] = "Pearson Education";
  pubs[4] = "Manning";
  
  return pubs;
 } 

 private void populateTitles() {
  titles = new Hashtable();
  titles.put("A0", new String[] {"** blank **"});
  titles.put("A1", new String[] {"Java Servlet Programming"});
  titles.put("A2", new String[] {"Enterprise JavaBeans"});
  titles.put("A3", new String[] {"Head First Java"});
  titles.put("A4", new String[] {"XML Unleashed"});
  titles.put("A5", new String[] {"Applying UML and Patterns"});
  titles.put("A6", new String[] {"SCWCD Exam Study Kit"}); 

  titles.put("P0", new String[] {"&nbsp;"});
  titles.put("P1", new String[] {"Java Servlet Programming", "Enterprise JavaBeans", "Head First Java"});
  titles.put("P2", new String[] {"XML Unleashed"});
  titles.put("P3", new String[] {"Applying UML and Patterns"});
  titles.put("P4", new String[] {"SCWCD Exam Study Kit"});
 }  
 
 //①验证ID,如果ID为"John"返回true,否则返回false
 private boolean validID(String ID) {
  if (this.ID.equals(ID)) {
   return true;
  }
  
  return false;
  
 }
}


----- order.jsp -----
<html> 

<head>
<script type="text/javascript" src="/Library/library.js" >
</script>
</head> 

<body onload="startup()">
<%@ page import="java.util.*" %> 

<font face="Arial,Helvetica,Verdana" size="3"> 

<form name="LibraryForm" action="/Library/LibraryServlet">
<b>Enter Subscription ID: </b>
<input type="text" name="subscriptionID" onblur="validate(this.form)"/> &nbsp; &nbsp; 

<!-- Font for Status Message -->
<font face="Arial,Helvetica,Verdana" size="2" color="#FF0000">
<b id="msg"></b>
</font>
<!--  Font End -->
<hr> 


<table height="300" width="600" border="1">
<tr>
<td valign="top" width="40%"> 

<!-- Font for Radio Buttons -->
<font face="Arial,Helvetica,Verdana" size="2">
<input type="radio" name="select" value="author" onclick="displayList('author')" />&nbsp;
<b>By Author</b>
<input type="radio" name="select" value="pubs" onclick="displayList('pubs')" />
<b>By Publisher</b>
</font>
<!--  Font End --> 

<br><br>
<div id="selectionList">
</div>
</td> 

<td width="20%">&nbsp;</td> 

<td valign="top" width="40%">
<b>Select Title: </b> <br>
<div id="titles"></div>
</td> 

</tr>
</table>
<hr>
<input type="submit" name="order" value="Order" disabled /> &nbsp; &nbsp;
<input type="reset" name="cancel" value="Cancel" />
</form> 

</font> 

</body>
</html>


----- web.xml -----
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp">
 <display-name>SoftwareLibrary</display-name>
 <servlet>
  <servlet-name>LibraryServlet</servlet-name>
  <display-name>LibraryServlet</display-name>
  <servlet-class>project.ajax.LibraryServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>LibraryServlet</servlet-name>
  <url-pattern>/LibraryServlet</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <!--
  <welcome-file>index.html</welcome-file>
  <welcome-file>index.htm</welcome-file>
  <welcome-file>index.jsp</welcome-file>
  <welcome-file>default.html</welcome-file>
  <welcome-file>default.htm</welcome-file>
  <welcome-file>default.jsp</welcome-file>
  -->
  <welcome-file>order.jsp</welcome-file>
 </welcome-file-list>
</web-app>


转载请注明 代码来自:https://www6.software.ibm.com/developerworks/cn/education/java/wa-ajax/index.html
分享到:
评论

相关推荐

    ibm的ajax教程

    ### IBM的Ajax教程知识点概述 #### 一、Ajax基础概念 ...通过以上内容的学习,开发者不仅能够掌握 Ajax 技术的基础知识,还能了解如何将其与其他 Web 技术相结合,从而构建出功能丰富且用户体验优秀的 Web 应用程序。

    IBM的AJAX教程

    相较于传统的Web应用程序,Ajax应用具有以下显著优势: 1. **提高响应速度**:由于数据的异步加载,用户在进行操作时无需等待整个页面的重新加载,大大减少了等待时间。 2. **增强用户体验**:通过局部更新页面内容...

    Ajax中文手册(快速上手).chm 掌握ajax--ibm.chm

    这一技术由IBM等公司推动发展,为Web应用程序带来了更快的响应时间和更流畅的用户体验。 **核心组件** 1. **XMLHttpRequest对象**:Ajax的核心是XMLHttpRequest对象,它提供了一个在后台与服务器通信的接口,允许...

    大名鼎鼎的IBM公司 Ajax 培训资料

    Ajax并非一种全新的编程语言,而是一种构建网站的新方法,它利用现有的技术,如HTML和JavaScript,将桌面应用程序的响应速度和交互性引入到Web应用程序中。 Ajax技术的普及,也影响了Web开发人员的学习方向。比如在...

    PHP程序员的Ajax指南

    #### 四、构建Ajax应用程序 在本部分,我们将构建一个简单的PHP Ajax应用程序,该应用程序将显示之前编写的教程中的面板集合。点击某个面板链接时,仅内容区域会被重新加载,并替换为所选面板的内容,这样可以节省...

    ajax IBM 官方资料 非常不错

    这包括使用DOM事件处理、CSS样式以及各种DOM操作方法来构建动态且反应灵敏的应用程序。 #### 七、在请求和响应中使用XML 尽管Ajax名称中包含“XML”,但实际上XML并不是必需的。然而,在许多情况下,XML仍然是传递...

    IBM.AJAX.information.module.tutorial.rar_The Information

    【IBM.AJAX.information.module.tutorial.rar_The Information】是一个关于IBM公司使用AJAX技术进行信息模块开发的经典教程资源。这个压缩包包含了丰富的学习材料,旨在帮助开发者深入理解和掌握AJAX在构建信息模块...

    ajax入门到精通 IBM资深专栏作家作品

    这部分将介绍如何设计和构建这样的应用程序,包括事件处理、动画效果以及如何优化DOM操作性能。 7. **在请求和响应中使用XML** 虽然XML在Ajax中起初被广泛使用,但现代实践中JSON更常见。这部分将讨论如何发送和...

    WEBSRVUTL:在IBM i上运行的Web服务实用程序,用于提供超快速的Web服务并运行由AJAX支持的Web应用程序

    Rainer Ross是酒店搜索引擎的开发人员-该应用程序由IBM i提供支持,并使用HTML5,CSS3,JavaScript,Db / 2 inMemory,对称多处理,Watson Content Analytics构建,并在服务器端与纯免费的RPG Web服务。 myhofi.com...

    使用WSAD开发WEB应用(IBM Software Institute)

    J2EE是Oracle公司(原Sun Microsystems)推出的一种开放标准,它的目标是提供一个统一的框架,以便开发者能够创建可移植、高扩展性的企业应用程序。 J2EE架构的核心是分层模型,它通常包括以下几层: 1. 客户端层...

    ajax在线感知

    DOMINO与Ajax的结合,主要是通过DOMINO Web应用程序接口(XPages、SSJS、SSO等)来实现的。开发者可以通过这些接口,利用Ajax技术创建动态、交互性强的Web应用。 **在线感知功能** 在线感知功能是DOMINO中的一种...

    AJAX试题

    而GMaps(Google Maps)、Flickr以及Windows Live等服务都是使用了AJAX技术的现代Web应用。 3. **不属于Ajax技术体系的组成部分** - **问题**: 以下哪个技术不是Ajax技术体系的组成部分? - **选项**: a....

    分析Ajax技术及其在WEB开发中的应用.pdf

    总结来说,Ajax技术通过异步通信和局部页面更新,提升了Web应用程序的性能和互动性。它简化了用户与Web服务的交互,减少了服务器压力,优化了网络带宽使用。随着技术的发展,Ajax已经成为现代Web开发不可或缺的一...

    IBM教育学院javaWEB 认证题库

    以上是IBM教育学院Java Web认证题库可能涉及的一些主要知识点,通过深入学习和实践,开发者可以掌握构建高效、可扩展的Web应用程序所需的技能。同时,了解IBM的开发工具和最佳实践,如Rational Application ...

    IBM JSF学习资料

    JSF通过Model-View-Controller(MVC)架构来组织应用程序,简化了前后端交互,使得开发者能够专注于业务逻辑而无需过多关注底层细节。 **2. IBM的JSF实现** IBM提供了自己的JSF实现,称为`com.ibm.jsf`,它在标准...

Global site tag (gtag.js) - Google Analytics