----- library.js -----
----- LibraryServlet.java -----
----- order.jsp -----
----- web.xml -----
转载请注明 代码来自:https://www6.software.ibm.com/developerworks/cn/education/java/wa-ajax/index.html
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[] {" "}); 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)"/> <!-- 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')" /> <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%"> </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 /> <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教程知识点概述 #### 一、Ajax基础概念 ...通过以上内容的学习,开发者不仅能够掌握 Ajax 技术的基础知识,还能了解如何将其与其他 Web 技术相结合,从而构建出功能丰富且用户体验优秀的 Web 应用程序。
相较于传统的Web应用程序,Ajax应用具有以下显著优势: 1. **提高响应速度**:由于数据的异步加载,用户在进行操作时无需等待整个页面的重新加载,大大减少了等待时间。 2. **增强用户体验**:通过局部更新页面内容...
这一技术由IBM等公司推动发展,为Web应用程序带来了更快的响应时间和更流畅的用户体验。 **核心组件** 1. **XMLHttpRequest对象**:Ajax的核心是XMLHttpRequest对象,它提供了一个在后台与服务器通信的接口,允许...
Ajax并非一种全新的编程语言,而是一种构建网站的新方法,它利用现有的技术,如HTML和JavaScript,将桌面应用程序的响应速度和交互性引入到Web应用程序中。 Ajax技术的普及,也影响了Web开发人员的学习方向。比如在...
#### 四、构建Ajax应用程序 在本部分,我们将构建一个简单的PHP Ajax应用程序,该应用程序将显示之前编写的教程中的面板集合。点击某个面板链接时,仅内容区域会被重新加载,并替换为所选面板的内容,这样可以节省...
这包括使用DOM事件处理、CSS样式以及各种DOM操作方法来构建动态且反应灵敏的应用程序。 #### 七、在请求和响应中使用XML 尽管Ajax名称中包含“XML”,但实际上XML并不是必需的。然而,在许多情况下,XML仍然是传递...
【IBM.AJAX.information.module.tutorial.rar_The Information】是一个关于IBM公司使用AJAX技术进行信息模块开发的经典教程资源。这个压缩包包含了丰富的学习材料,旨在帮助开发者深入理解和掌握AJAX在构建信息模块...
这部分将介绍如何设计和构建这样的应用程序,包括事件处理、动画效果以及如何优化DOM操作性能。 7. **在请求和响应中使用XML** 虽然XML在Ajax中起初被广泛使用,但现代实践中JSON更常见。这部分将讨论如何发送和...
Rainer Ross是酒店搜索引擎的开发人员-该应用程序由IBM i提供支持,并使用HTML5,CSS3,JavaScript,Db / 2 inMemory,对称多处理,Watson Content Analytics构建,并在服务器端与纯免费的RPG Web服务。 myhofi.com...
J2EE是Oracle公司(原Sun Microsystems)推出的一种开放标准,它的目标是提供一个统一的框架,以便开发者能够创建可移植、高扩展性的企业应用程序。 J2EE架构的核心是分层模型,它通常包括以下几层: 1. 客户端层...
DOMINO与Ajax的结合,主要是通过DOMINO Web应用程序接口(XPages、SSJS、SSO等)来实现的。开发者可以通过这些接口,利用Ajax技术创建动态、交互性强的Web应用。 **在线感知功能** 在线感知功能是DOMINO中的一种...
而GMaps(Google Maps)、Flickr以及Windows Live等服务都是使用了AJAX技术的现代Web应用。 3. **不属于Ajax技术体系的组成部分** - **问题**: 以下哪个技术不是Ajax技术体系的组成部分? - **选项**: a....
总结来说,Ajax技术通过异步通信和局部页面更新,提升了Web应用程序的性能和互动性。它简化了用户与Web服务的交互,减少了服务器压力,优化了网络带宽使用。随着技术的发展,Ajax已经成为现代Web开发不可或缺的一...
以上是IBM教育学院Java Web认证题库可能涉及的一些主要知识点,通过深入学习和实践,开发者可以掌握构建高效、可扩展的Web应用程序所需的技能。同时,了解IBM的开发工具和最佳实践,如Rational Application ...
JSF通过Model-View-Controller(MVC)架构来组织应用程序,简化了前后端交互,使得开发者能够专注于业务逻辑而无需过多关注底层细节。 **2. IBM的JSF实现** IBM提供了自己的JSF实现,称为`com.ibm.jsf`,它在标准...