軟體項目實訓及課程設計指導——如何應用XML +XSLT +AJAX組合技術實現無刷新的數據查詢的應用實例
1、在Web應用系統項目中添加一個實現查詢的請求頁面searchBook.jsp
(1)創建searchBook.jsp頁面文件的過程示圖
在MyEclipse開發工具中選擇文件中的新建菜單項目,然後創建出一個JSP頁面文件,文件名稱為searchBook.jsp,創建searchBook.jsp頁面文件的過程示圖參看如下的示例圖所示。
(2)searchBook.jsp頁面最終的代碼示例如下,在頁面中包含有一個簡單的查詢表單
<%@ page contentType="text/html; charset=gb2312" %>
<script language="javascript" src="searchBook.js"></script>
<form name="search" method="post" action="">
請輸入書名:<input id="bookkey" type="text" size="20" >
<input type="button" name="search" value="搜索" onclick=getBooks('bookkey')>
<div id="showBookInfo"></div>
</form>
2、在Web應用系統項目中添加一個searchBook.js程序文件
(1)searchBook.js程序文件創建的過程示圖
在MyEclipse開發工具中選擇文件中的新建菜單項目,然後創建出一個JavaScript腳本類型的*.js文件,文件名稱為searchBook.js,創建searchBook.js腳本文件的過程示圖參看如下的示例圖所示。
(2)輸入文件名稱searchBook.js,並點擊「完成」按鈕, 創建的過程示圖參看如下的示例圖所示。
(3)searchBook.js程序的代碼示例
var httpRequest;
function getHTTPRequestObject(){
var httpRequestObject;
if (window.XMLHttpRequest){ // 適用於Mozilla, Safari 等瀏覽器, ...
httpRequestObject = new XMLHttpRequest();
}
else if (window.ActiveXObject){ //適用於 IE等瀏覽器, ...
try{
httpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){
try{
httpRequestObject= new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e2){
alert("您的瀏覽器有問題!");
}
}
}
return httpRequestObject;
}
function getBooks(bookkey){ //向searchbookservlet發送請求
httpRequest=getHTTPRequestObject();
var url="searchbookservlet?bookkey="+document.getElementById(bookkey).value;
httpRequest.onreadystatechange = showRetrunBooks;
httpRequest.open("GET",url,true);
httpRequest.send(null);
}
function showRetrunBooks() { //將返回的數據顯示在指定的節點下
if (httpRequest.readyState == 4) {
if (httpRequest.status == 200){
var allBooksDomDocument =httpRequest.responseXML;
varbookXSLDocument= new ActiveXObject('Microsoft.XMLDOM');
bookXSLDocument.async=false;//直接加載bookDetail.xsl
bookXSLDocument.load("bookDetail.xsl");
document.getElementById('showBookInfo').innerHTML=
allBooksDomDocument.transformNode(bookXSLDocument);
}
else if(httpRequest.status == 404){
document.getElementById('showBookInfo').innerHTML =
"沒有找到與所請求的文件相匹配的資源!";
}
else{
document.getElementById('showBookInfo').innerHTML =
"你所請求的頁面發生異常,錯誤代碼為:"+httpRequest.status;
}
}
else{
document.getElementById('showBookInfo').innerHTML = "查找中,請稍等...";
}
}
3、在Web應用系統項目中添加一個bookDetail.xsl文件
(1)bookDetail.xsl文件創建的過程示圖
在MyEclipse開發工具中選擇文件中的新建菜單項目,然後創建出一個XSLT轉換文件,文件名稱為bookDetail.xsl,創建bookDetail.xsl文件的過程示圖參看如下的示例圖所示。
(2)bookDetail.xsl文件的代碼示例
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<h2>您搜索的書籍如下:</h2> <xsl:apply-templates select="Books"/>
</xsl:template>
<xsl:template match="Books">
<Table border="1" width="80%">
<TR><TD>書名</TD><TD>作者</TD><TD>出版社</TD><TD>價格</TD><TD>出版時間</TD><TD>內容簡介</TD></TR>
<xsl:apply-templates select="Book"/>
</Table>
</xsl:template>
<xsl:template match="Book">
<TR>
<TD><xsl:value-of select="BookName"/></TD>
<TD><xsl:value-of select="Writer"/></TD>
<TD><xsl:value-of select="Publisher"/></TD>
<TD><xsl:value-of select="Price"/></TD>
<TD><xsl:value-of select="PublishTime"/></TD>
<TD><xsl:value-of select="Content"/></TD>
</TR>
</xsl:template>
</xsl:stylesheet>
4、在Web應用系統項目中添加後臺Java Servlet程序
(1)程序類名稱為SearchBookServlet,程序包名稱為com.px1987.webajax.servlet
在MyEclipse開發工具中選擇文件中的新建菜單項目,然後創建出一個Servlet類型的文件,程序類名稱為SearchBookServlet,程序包名稱為com.px1987.webajax.servlet,創建SearchBookServlet程序的過程示圖參看如下的示例圖所示。
(2)該Servlet的名稱為searchbookservlet,參看如下的示例圖所示。
(3)編程該Servlet中的doGet方法
package com.px1987.webajax.servlet;
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.*;
import org.jdom.output.*;
public class SearchBookServlet extends HttpServlet {
Document xmlDoc=null;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String bookName=request.getParameter("bookkey");
//然後根據bookName查詢資料庫表以獲得具體的結果數據,在此加以省略
buildBooksXMLTree();
response.setContentType("text/xml; charset=gb2312");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
responseXMLDataToBrowser(out);
out.close();
}
public void buildBooksXMLTree() { //利用JDom動態地創建XML的節點樹
treeRoot=new Element("Books");
xmlDoc=new Document(treeRoot);
tagName=new Element("Book");
treeRoot.addContent(tagName);
/**下面的數據在實際系統中應該來自於資料庫表,為了簡化示例在程序中動態創建出對應的XML標籤 */
childTagName=new Element("BookName");
childTagName.setText("AJAX技術與應用");
tagName.addContent(childTagName);
childTagName=new Element("Writer");
childTagName.setText("張三");
tagName.addContent(childTagName);
childTagName=new Element("Publisher");
childTagName.setText("電子工業出版社");
tagName.addContent(childTagName);
childTagName=new Element("Price");
childTagName.setText("45.5");
tagName.addContent(childTagName);
childTagName=new Element("PublishTime");
childTagName.setText("2007年12月");
tagName.addContent(childTagName);
childTagName=new Element("Content");
childTagName.setText("本書是介紹AJAX技術與應用方面的圖書");
tagName.addContent(childTagName);
}
public void responseXMLDataToBrowser(PrintWriter out) throws IOException{
Format format=Format.getCompactFormat();
format.setEncoding("gb2312");
format.setIndent(" ");
XMLOutputter XMLOut=new XMLOutputter(format);
XMLOut.output(xmlDoc,out);
}
}
5、在Web應用系統項目中導入JDom的系統包文件,實現對XML文檔的動態解析
在Web應用系統項目中導入JDom的系統包文件jdom.jar,利用JDom實現對XML文檔的動態解析,參看如下的示例圖所示。
6、部署Web應用系統項目和啟動伺服器
(1)部署Web應用系統項目
(2)啟動Tomcat伺服器
7、測試本示例的應用功能的正確性
(1)啟動測試頁面,並在查詢表單中輸入查詢的數據(本示例為某書名)
(2)點擊測試頁面中的Web表單內的「搜索」按鈕後將出現如下的查詢結果
查詢的結果是來自於伺服器端處理的結果,並且直接在Web表單的下面顯示,頁面沒有產生傳統的Web頁面的提交後頁面更換的效果。
課程設計指導——應用AJAX技術提高Web應用系統的整體響應性能
如何在Web應用中實現Velocity 與Struts2框架相互集成的應用實例
如何在Web應用中實現Velocity 與Struts 框架相互集成的應用實例
如何利用MyEclipse開發工具開發基於Velocity模板的Web應用
如何在Web應用系統表示層開發實現中應用Velocity模板技術