?? 0148.htm
?? JspServlet教程專欄
對(duì)javaservlet講述的非常詳細(xì)
?? HTM
字號(hào):
??
<html>
<head>
<title>新時(shí)代軟件教程:操作系統(tǒng) 主頁(yè)制作 服務(wù)器 設(shè)計(jì)軟件 網(wǎng)絡(luò)技術(shù) 編程語(yǔ)言 文字編輯</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋體}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1 {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
<p align="center"><big><strong>XML和JSP交互技術(shù)(3)</strong></big></p>
<div align="right">---摘自《JSP愛好者》 (文/劉玉鋒)</div>
<br> 4) 實(shí)施HandlerBase接口<br>
<br>
在這里我們編寫一個(gè)myHandler的類,它用來(lái)實(shí)施HandlerBase接口,并且覆蓋接口的三個(gè)主要方法startElement(String tag, AttributeList attrs)、characters(char[] ch, int start, int length)、endElement(String name)以便能對(duì)XML文件進(jìn)行操作。<br>
<br>
為了保存數(shù)據(jù)以便外部程序能夠調(diào)用本類中的數(shù)據(jù),我們采用了哈希表結(jié)構(gòu)來(lái)保存解析XML文件后的所有節(jié)點(diǎn)名字以及節(jié)點(diǎn)的數(shù)據(jù)值,startElement()方法主要用來(lái)讀取XML文件中的節(jié)點(diǎn)名稱,characters()方法主要用來(lái)根據(jù)節(jié)點(diǎn)名稱讀取節(jié)點(diǎn)數(shù)據(jù),endElement()方法主要是在一個(gè)XML節(jié)點(diǎn)處理完畢后將這對(duì)節(jié)點(diǎn)名稱和節(jié)點(diǎn)數(shù)據(jù)保存在哈希表中。<br>
<br>
在外部程序中我們只需要調(diào)用getTable()方法返回一個(gè)哈希表對(duì)象就可以讀取所有的節(jié)點(diǎn)和節(jié)點(diǎn)數(shù)據(jù)值了。<br>
<br>
代碼不多,而且我在下面添加了很多注釋,應(yīng)該很好看懂了。<br>
<br>
myHandler.java文件<br>
<br>
file://文件放置在包c(diǎn)om.jsp21.www中<br>
<br>
package com.jsp21.www;<br>
<br>
file://導(dǎo)入相關(guān)的java API<br>
<br>
import java.io.*;<br>
<br>
import org.w3c.dom.*;<br>
<br>
import org.xml.sax.*;<br>
<br>
import javax.xml.parsers.SAXParser;<br>
<br>
import javax.xml.parsers.SAXParserFactory;<br>
<br>
import java.util.Hashtable;<br>
<br>
import java.util.Enumeration;<br>
<br>
// myHandler類實(shí)現(xiàn)HandlerBase接口;<br>
<br>
public class myHandler extends HandlerBase {<br>
<br>
private String myElement = null; file://XML文件中的標(biāo)記名稱;<br>
<br>
private String myValue = null; file://XML文件中標(biāo)記對(duì)應(yīng)的值;<br>
<br>
private Hashtable mytable = new Hashtable(); file://用來(lái)保存XML文件中所有的數(shù)據(jù);<br>
<br>
file://得到保存有XML數(shù)據(jù)的哈希表Hashtable;<br>
<br>
public Hashtable getTable() {<br>
<br>
return mytable;<br>
<br>
}<br>
<br>
file://覆蓋HandlerBase接口中的startElement方法,讀取一行XML數(shù)據(jù)的開始標(biāo)記時(shí)候執(zhí)行此方法;<br>
<br>
// tag代表XML中的標(biāo)記,如前面XML文件中的NAME AGE等;<br>
<br>
public void startElement(String tag, AttributeList attrs)<br>
<br>
throws SAXException {<br>
<br>
myElement = tag;<br>
<br>
}<br>
<br>
file://覆蓋HandlerBase接口中的characters方法,主要用來(lái)得到和之間具體的數(shù)據(jù);<br>
<br>
// 當(dāng)對(duì)應(yīng)myElement的標(biāo)記發(fā)現(xiàn)值后,也就是startElement方法執(zhí)行完畢后,就會(huì)觸發(fā)這個(gè)characters方法來(lái)得到具體的數(shù)值;<br>
<br>
file://如myElement="姓名"時(shí)候,myValue就會(huì)等于"劉玉鋒";<br>
<br>
public void characters(char[] ch, int start, int length)<br>
<br>
throws SAXException {<br>
<br>
myValue = new String(ch, start, length);<br>
<br>
}<br>
<br>
file://覆蓋HandlerBase接口中的endElement方法,主要用來(lái)在一行XML數(shù)據(jù)讀取完畢后進(jìn)行自己的處理;<br>
<br>
// 當(dāng)XML文件中一行標(biāo)記讀取完畢后,觸發(fā)此endElement方法;<br>
<br>
file://如果存在對(duì)應(yīng)的結(jié)束標(biāo)記,就將前面得到的標(biāo)記myElement和值myValue<br>
<br>
file://放入到mytable哈希表中;<br>
<br>
public void endElement(String name) throws SAXException {<br>
<br>
if ( myElement.equals(name) ) {<br>
<br>
mytable.put(myElement, myValue);<br>
<br>
}<br>
<br>
}<br>
<br>
}<br>
<br>
好了,編譯這個(gè)class,并把myHandler.class文件放置在CLASSPATH能找到的路徑中,比如Tomcat中應(yīng)用程序的Web-inf\classes\com\jsp21\www目錄下。
</table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -