XML和JSP交互技術(下)

4) 實施HandlerBase接口

在這裏我們編寫一個myHandler的類,它用來實施HandlerBase接口,並且覆蓋接口的三個主要方法startElement(String tag, AttributeList attrs)、characters(char[] ch, int start, int length)、endElement(String name)以便能對XML文件進行操作。

爲了保存數據以便外部程序能夠調用本類中的數據,我們采用了哈希表結構來保存解析XML文件後的所有節點名字以及節點的數據值,startElement()方法主要用來讀取XML文件中的節點名稱,characters()方法主要用來根據節點名稱讀取節點數據,endElement()方法主要是在一個XML節點處理完畢後將這對節點名稱和節點數據保存在哈希表中。

在外部程序中我們只需要調用getTable()方法返回一個哈希表對象就可以讀取所有的節點和節點數據值了。

代碼不多,而且我在下面添加了很多注釋,應該很好看懂了。

myHandler.java文件

file://文件放置在包com.jsp21.www中

package com.jsp21.www;

file://導入相關的java API

import java.io.*;

import org.w3c.dom.*;

import org.xml.sax.*;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import java.util.Hashtable;

import java.util.Enumeration;

// myHandler類實現HandlerBase接口;

public class myHandler extends HandlerBase {

private String myElement = null; file://XML文件中的標記名稱;

private String myValue = null; file://XML文件中標記對應的值;

private Hashtable mytable = new Hashtable(); file://用來保存XML文件中所有的數據;

file://得到保存有XML數據的哈希表Hashtable;

public Hashtable getTable() {

return mytable;

}

file://覆蓋HandlerBase接口中的startElement方法,讀取一行XML數據的開始標記時候執行此方法;

// tag代表XML中的標記,如前面XML文件中的NAME AGE等;

public void startElement(String tag, AttributeList attrs)

throws SAXException {

myElement = tag;

}

file://覆蓋HandlerBase接口中的characters方法,主要用來得到和之間具體的數據;

// 當對應myElement的標記發現值後,也就是startElement方法執行完畢後,就會觸發這個characters方法來得到具體的數值;

file://如myElement="姓名"時候,myValue就會等于"劉玉鋒";

public void characters(char[] ch, int start, int length)

throws SAXException {

myValue = new String(ch, start, length);

}

file://覆蓋HandlerBase接口中的endElement方法,主要用來在一行XML數據讀取完畢後進行自己的處理;

// 當XML文件中一行標記讀取完畢後,觸發此endElement方法;

file://如果存在對應的結束標記,就將前面得到的標記myElement和值myValue

file://放入到mytable哈希表中;

public void endElement(String name) throws SAXException {

if ( myElement.equals(name) ) {

mytable.put(myElement, myValue);

}

}

}

好了,編譯這個class,並把myHandler.class文件放置在CLASSPATH能找到的路徑中,比如Tomcat中應用程序的Web-inf\classes\com\jsp21\www目錄下。

||||||5)Jsp程序調用XML

在這裏,我們寫了一個比較簡單的Jsp程序來調用前面的myHandler類,並通過這個類來讀取personal.xml文件中的內容,最後顯示在Jsp頁面中。

首先我們創建一個SAXParserFactory的實例saxpF,然後通過這個實例來創建一個SAXParser的實例saxpser(可以用來解析XML文件內容),當然還要創建myHandler類的實例,最後通過saxpser.parse()方法將XML文件和myHandler類實例關聯起來(這樣會執行myHandler中的幾個事件處理方法)。

(說明:SAXParserFactory是一個抽象類,定義了一個factory API可以讓Java應用程序配置或者是獲得一個SAX的解析器(SAX parser)。SAXParser也是一個抽象類,通過這個類應用程序可以解析XML文件的內容。)

到這時候XML所有內容都保存在了myHandler類實例中的哈希表中,最後通過getTable()方法得到這個哈希表對象,將哈希表中的鍵保存在集合Enumeration中,使用一個循環來讀取哈系表中的數據並顯示在Jsp頁面上。我們用集合的目的在于使這個Jsp程序盡量通用,傳遞一個XML文件名字就可以讀出所有內容,當然你也可以不使用集合而使用(String)hshTable.get("姓名")這樣的方法來讀取特定的節點值。

http://192.168.0.98:7070/welcome_html/jspxml.jsp?file=e:\\personal.xml,注意必須使用參數?file=路徑\\personal.xml (路徑根據你保存在硬盤中的目錄而定,Java表示:Windows系統下"\\"代表一個"\"),運行後的效果如下面所示:

可以看到,XML文件中的所有數據都通過這個Jsp文件讀取出來了,因爲這個Jsp程序是文件無關的,你也可以將file=e:\\personal.xml中的xml文件名字換爲其他的XML文件看看最後運行效果。

要說明一點的就是本人在最後實際采用的是JAXP1.01版本的API,有可能是本人的系統原因,發現程序在1.1版本下可以編譯通過,但運行的時候會出現下面錯誤(即使JAXP1.1包中自帶的例子main.java也這樣):

java.lang.NoClassDefFoundError: org.apache.crimson.jaxp.SAXParserFactoryImpl

所以最後換作了1.01版本的JAXP來運行程序,1.01版本的JAXP在上面的地址同樣可以下載。

XML和JSP交互技術(上)
XML和JSP都是近兩年才出現的技術,目前已經成爲了很多程序員的熱點話題。XML(可擴展的標記語言)是用來定義文檔標記語言的框架,主要用來存儲和發送數據信息,以便各種基于WEB的應用之間能更方便的交換數據。而Jsp...查看完整版>>XML和JSP交互技術(上)
 
XML和JSP交互技術(下)
4) 實施HandlerBase接口  在這裏我們編寫一個myHandler的類,它用來實施HandlerBase接口,並且覆蓋接口的三個主要方法startElement(String tag, AttributeList attrs)、characters(char[] ch, int start, int leng...查看完整版>>XML和JSP交互技術(下)
 
也談JSP與XML的交互
使用JavaServer Pages有三種不同的方法用于處理XML文檔,每種方法都有利于提高分離頁面代碼與XML數據的水平,有利于簡化開發網頁的複雜度並且改善提高組件與頁面代碼的可重用性。   JavaServer Pages ( JSP)和XML是...查看完整版>>也談JSP與XML的交互
 
也談JSP與XML的交互
  使用JavaServer Pages有三種不同的方法用于處理XML文檔,每種方法都有利于提高分離頁面代碼與XML數據的水平,有利于簡化開發網頁的複雜度並且改善提高組件與頁面代碼的可重用性。   JavaServer Pages ( JSP)和...查看完整版>>也談JSP與XML的交互
 
jsp中 java ,html/javascript 交互
一、說明幾點:(1)過程描述: Jsp文件首先在服務器端生成中間的Java文件,再生成Class,然後以html的形式返回到客戶端。所以說,一個jsp文件首先執行其中的java代碼,然後生成html。(2)類型 a.java類型(就不...查看完整版>>jsp中 java ,html/javascript 交互
 
JSP數據和JavaScirpt數據交互使用問題的一種解決方法
JSP數據和JavaScirpt數據交互使用問題的一種解決方法 對于WEB程序來說,前端(JavaScript)和後端(JSP/Servlet)是沒法共用數據的,只能是後端程序(JSP)把數據輸出,生成頁面到前端,這時候生成的頁面中的Jav...查看完整版>>JSP數據和JavaScirpt數據交互使用問題的一種解決方法
 
XML和JSP
  概覽:XML和JSP是這些日子中最熱的東西。本文介紹如何聯合這兩種技術來建設動態網站。你還可以同時看一下DOM,XPath,XSL,和其它Java-XML技術的示例代碼。我們在此假設你已經了解JavaServer Pages(JSP)和Extens...查看完整版>>XML和JSP
 
JSP讀取大對象CLOB並生成xml文件示例
  這個程序是我在一個用XML做外部數據交換平台的項目中最初用到的,雖然後來用到其它方式解決,但其思路還是有一定參考價值,程序很簡單,不難看懂,還請專家們不吝指教……  <%@ page contentType="text/htm...查看完整版>>JSP讀取大對象CLOB並生成xml文件示例
 
JSP與XML的結合
  綜述:可擴展標注語言(eXtensible Markup Language,XML)正被迅速的運用于業界,它已作爲與平台、語言和協議無關的格式描述和交換數據的廣泛應用標准。XML和它的輔助規範可用于描述數據的文檔表現,描述XML文檔...查看完整版>>JSP與XML的結合
 
 
回到王朝網路移動版首頁