《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > 用XML實現程序中基于瀏覽器的Web服務

用XML實現程序中基于瀏覽器的Web服務

2008-12-20
作者:邱揚

1. 前言
??? 在一些多功能服務系統的開發過程中,我們遇到了這樣的問題:作為體系框架的應用程序和基于瀏覽器和WEB頁面的網絡服務很難溝通起來。有什么方法能夠把這兩種傳統意義上大相徑庭的開發方式高效、穩定地集成,以盡可能地發揮其各自的優勢呢?

2. 問題與思考

??? 運行在瀏覽器上的HTML語言有著高效,靈活的優勢,在JAVA程序中,通過內嵌" title="內嵌">內嵌開放式的JAVA瀏覽器Mozilla,用WEB頁面的形式實現一些用戶操作界面,能夠節約很多開發的精力。但瀏覽器的編程接口一般限于導航,對網頁內部的構件和數據的訪問支持不夠。當主程序" title="主程序">主程序中采集到的數據參數需要經由HTTP協議提交到數據遠程服務器,并由瀏覽器顯示返回的結果頁面時,如何將這些參數傳遞給瀏覽器的提交頁面,同時又使主程序能得到遠程返回的數據,便成為了一個需要解決的問題。

圖1. 問題所在——主程序與瀏覽器頁面的數據傳遞

??? 傳統的基于瀏覽器的Web服務模式是:瀏覽器與服務器直接建立連接關系,服務器直接返回Web頁面。如果嘗試打破這種模式,由主程序提交數據,服務器以XML文件的形式返回必要的結果數據,交由程序處理,那么數據共享的問題就得以解決。同時根據預先制定的HTML模板生成本地頁面文件,再通過瀏覽器向用戶顯示,也能達到與遠程頁面相同的效果。


圖2. 問題的解決——另一種數據傳輸模式

?

3.基本原理
??? 由JAVA實現程序的主框架,內嵌Mozilla的WebClient瀏覽器組件。發生服務請求時,在程序中利用Http網絡對象將參數以Post的方式提交至遠程Servlet數據服務器。服務端" title="服務端">服務端處理請求后返回一個包含結果數據的XML頁面。客戶端" title="客戶端">客戶端得到XML文件后使用DOM對象解析出結果數據,并根據預先設計的HTML頁面模板,通過關鍵字替換的方式在本地生成結果頁面。最后在程序中調用瀏覽器的SetURL接口指定瀏覽器打開本地頁面。

4.JAVA中的Http請求
??? Sun的jdk1.3.1中,java.net包提供了一些網絡訪問功能的對象。其中網絡地址對象URL和連接對象HttpURLConnection類用于建立一個遠程的Http訪問。
???下面是它們的一些主要方法及描述。
URL類:


?

??? 下面是使用這兩個對象對網絡上的Servlet服務器進行數據查詢的例子。
??? 使用查詢腳本的地址描述作為參數創建一個URL對象實例,調用URL的openConnection方法打開連接。此時程序試圖連接遠端并請求腳本服務,如成功即返回一個HttpURLConnection連接實例。
??? 用連接實例的getOutputStream方法取得它的輸出流,在輸入參數字串" title="字串">字串后,服務器從后臺數據庫中查詢出結果數據,組成XML字符流并輸出,客戶端由getInputStream得到的輸入流取得并保存XML文件。寫入參數前可以通過setRequestMethod方法設置提交方法,建議在參數較復雜時使用“POST”方法。根據HTML的協議規范,參數之間用“&”號隔開。
??? 以下是主要程序代碼,已通過jdk1.3.1調試。

//指定遠程的查詢服務腳本地址
URL url = new URL("http://192.168.0.176:7001/WebApp/BasicInfQuery");
//打開Http連接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
//提交參數pid和name
PrintWriter out = new PrintWriter(connection.getOutputStream());
String pid = "pid="+URLEncoder.encode(“97133225");
String name = "name="+URLEncoder.encode("yang");
out.println(pid+“&”+name);
out.close();
//讀取查詢服務返回的數據
BufferedReader in
= new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
}

5.XML數據結構定義和文件解析
??? 以一個學生信息查詢為例,為XML作如下的數據結構定義:以“學生信息”為根,“學生”為節點,每個節點有一個屬性“性別”,及“姓名”、“年齡”、“電話”三個子節點。
??? 客戶端程序在提交查詢后,得到服務端程序動態生成的XML文件,然后利用JAVA下的DOM對象將文件中的數據解析出來?!拔臋n對象模型”DOM是W3C制定的XML數據概念描述,它允許開發者在 XML 結構內引用、檢索和更改 XML 結構中的各項。在Sun的jdk1.4.1中包含了XML解析接口javax.xml.parser和DOM對象,它們對XML文件的處理提供了很完整的一套接口。
??? DOM在處理XML文件之前,首先將XML文件解析成對象化的文檔(Document)。javax.xml.parsers中的DocumentBuilder通過parse方法對一個XML文件進行解析,生成一個Document對象。簡單要代碼如下:

//為解析XML作準備,創建DocumentBuilderFactory實例,指定DocumentBuilder
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
//解析指定的XML文件,創建Document對象
Document doc = db.parse(inFile);

??? 解析后的Document將所有數據以父子的節點層次結構裝入內存,這些節點可以是元素、文本、屬性或其它節點類型。節點元素對象Element提供了對其元素的值和子節點的訪問。下面是Element對象的一些方法定義和描述。
?
方法?描述???
GetAttribute(String name)?取得指定屬性名的屬性值???
GetElementsByTagName(String name)?取得指定節點名的子節點隊列?
getElementsByTagName 返回的NodeList對象實質是一個Element的隊列,其item(n)方法返回其中的第n個Element對象。
?以下一段代碼用于讀取Document對象中樹形節點的值:

Element root = doc.getDocumentElement();
//取"學生"元素列表
NodeList students = root.getElementsByTagName("學生");
for (int i = 0; i < students.getLength(); i++)
{
?//依次取每個"學生"元素
?Element student = (Element) students.item(i);
?//取學生的性別屬性
?String sex = student.getAttribute("性別");
//取"姓名"元素,其他類同
?NodeList names = student.getElementsByTagName("姓名");
?if (names.getLength() == 1) {
??Element e = (Element) names.item(0);
??Text t = (Text) e.getFirstChild();
??String name = t.getNodeValue();
?}
}

注:在Apache提供的XML開發工具包crimson的幫助下,DOM對象也能用于將一個Document的數據寫入XML文件。在我們的數據服務器端,因為生成XML文件相比較解析文件來的簡單,我們并沒有使用這一功能,但在一些XML結構較復雜的情況下,使用一個清晰的文檔對象也是很有必要的。相關的資料可參考Apache網站上crimson的開發文檔。

6.HTML模板定義和頁面的動態創建
??? HTML模板是在源碼中添加了一些自定義的標記(tag)的HTML文件,這些tag用于在動態創建頁面時指示數據字串的插入位置。
??? 對于預先設計的HTML頁面,以文本方式編輯他們的源碼。在顯示數據的位置用自定義的tag作出標記,這些tag以一個在HTML語法中不常出現的特殊符號作為起始和終止符,如”%”,以它們的數據意義來命名。例如姓名的tag定義為”%name%”,性別為”%sex%”,類似。下面是一個模板中部分代碼的舉例:


?

?

?

姓名%name%
性別%sex%
年齡%age%

??? 在創建頁面時,程序將模板以文本方式讀入一個String類型變量中,然后依次查找每個數據所對應的tag的位置,用表示數據的字串替換它。在Java中實現字串替換的代碼如下:
? public void ReplaceStr(String sTag, String sData){
??? int index;
??? while((index=sHTML.indexOf(sTag))>=0)
????? sHTML=sHTML.substring(0,index)+sData+sHTML.substring(index+sTag.length(),sHTML.length());
? }

??? 把所有定義的tag替換之后,就創建出一個表示當前操作的結果數據的動態HTML頁面。通過程序內置的瀏覽器在本地打開這個HTML頁面,最終實現了將服務結果向用戶輸出。

7.方法的優缺點討論
優點:
??? 成功解決了數據共享的問題,因而極大地拓展了瀏覽器在服務系統開發中的應用領域,從而能夠充分利用開發資源,高效的開發出基于網絡的數據服務。
??? 以XML作為數據載體,直接以數據的形式返回結果,可讀性強,易于調試。
??? XML的體積較小,可以減輕服務器和網絡的負擔。
??? 方法不僅限于JAVA程序,在其他開發平臺上也可以通過類似的辦法實現。
??? 可以通過XSL擴展XML在瀏覽器上的顯示功能,省去創建動態網頁的步驟。
缺點:
??? 文本形式的XML存在著不小的安全問題,對一些機密的數據需要加密后傳輸。
??? 將HTML頁面存放在客戶端的形式在多臺客戶機的情況下會對維護和更新頁面造成一定的難度,可以考慮在客戶端建立一個被動式的遠程頁面更新服務。

8.結束語
??? 因為篇幅有限,這里只舉了一個最簡單的例子,但我們仍然能體會到在應用程序的Web服務中使用瀏覽器所帶來的便捷和強大的功能。這種方法突破了數據訪問上的束縛,能夠最大限度的發揮各自的優勢,提高了軟件的整體性能,又節約了寶貴的開發時間和精力。

參考文獻
1.Mark Birbect 等著,裴劍鋒 等譯,XML 高級編程(第2版),2002
2.Tom Myers Alexander Nakhimovsky 著,王輝 等譯,Java XML編程指南, 2001
3.Bruce Eckel 著,侯捷 譯,Java編程思想(第2版),2002
4.Dan Becker, Explore online XML data with Java programming,IBM developerWorks journal.,August 2002

?

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产精品久久婷婷六月丁香| 午夜精品视频一区| 欧美一区二区在线观看| 欧美国产精品va在线观看| 亚洲黄色尤物视频| 欧美性色综合| 国产亚洲美州欧州综合国| 国产欧美在线观看| 欧美喷潮久久久xxxxx| 久久在线免费视频| 免费观看在线综合色| 国产欧美日韩亚洲精品| 亚洲国产精品www| 日韩一区二区免费看| 一本久久知道综合久久| 另类图片综合电影| 欧美精品激情blacked18| 亚洲欧美日韩精品在线| 欧美精品久久久久久久免费观看| 欧美激情一区二区| 亚洲精品日韩一| 亚洲日本在线视频观看| 亚洲网站在线| 欧美在线观看日本一区| 另类人畜视频在线| 欧美日韩另类丝袜其他| 91久久综合亚洲鲁鲁五月天| 亚洲欧美日韩专区| 久久视频国产精品免费视频在线| 91久久精品www人人做人人爽| 欧美一级午夜免费电影| 精品不卡一区| 激情五月综合色婷婷一区二区| 国产精品国产三级国产aⅴ无密码| 一区二区三区鲁丝不卡| 99精品欧美一区二区三区| 欧美大片在线影院| 欧美日韩国产丝袜另类| 在线性视频日韩欧美| 国产乱子伦一区二区三区国色天香| 亚洲精品一区二区三区樱花| 久久久久免费观看| 亚洲一区免费看| 国产亚洲网站| 欧美激情aⅴ一区二区三区| 久久久精彩视频| 国产精品自在在线| 亚洲精品久久久久中文字幕欢迎你| 亚洲午夜免费视频| 性久久久久久| 国产精品日本精品| 国产亚洲免费的视频看| 欧美国产综合视频| 亚洲无吗在线| 国产小视频国产精品| 国产精品久久久久一区二区三区| 欧美三日本三级少妇三2023| 亚洲国产精品va在线看黑人| 香蕉av福利精品导航| 女女同性精品视频| 国产精品久久久久7777婷婷| 一级日韩一区在线观看| 亚洲激情不卡| 99这里有精品| 在线欧美电影| 欧美日韩亚洲一区二区三区在线观看| 亚洲高清不卡av| 亚洲另类在线视频| 9人人澡人人爽人人精品| 欧美激情一级片一区二区| 亚洲精品偷拍| 亚洲福利在线观看| 欧美国产91| 日韩视频欧美视频| 免费在线日韩av| 亚洲一区高清| 在线色欧美三级视频| 一区二区三区欧美亚洲| 最近中文字幕日韩精品| 亚洲美女区一区| 国产欧美一区二区白浆黑人| 久久久久久久久久看片| 欧美日韩p片| 欧美激情 亚洲a∨综合| 亚洲尤物在线视频观看| 91久久精品国产91久久| 久久久久久网址| 1000部精品久久久久久久久| 国产日韩欧美亚洲一区| aa亚洲婷婷| 夜夜爽99久久国产综合精品女不卡| 国产综合激情| 亚洲精品在线一区二区| 国产一区二区黄| 欧美中文字幕久久| 性欧美xxxx大乳国产app| 欧美日韩国产精品一卡| 午夜精品福利一区二区三区av| 日韩视频在线免费观看| 亚洲自拍偷拍福利| 国产精品黄视频| 这里只有精品视频| 久久久精品一区二区三区| 久久er99精品| 亚洲欧洲在线免费| 国产一区免费视频| 亚洲人成在线免费观看| 欧美伊久线香蕉线新在线| 国产精品扒开腿爽爽爽视频| 国产精品久久国产精品99gif| 黄色日韩精品| 中国亚洲黄色| 另类天堂视频在线观看| 国产精品日韩一区| 久久综合电影一区| 在线综合亚洲欧美在线视频| 一区二区视频欧美| 亚洲综合色丁香婷婷六月图片| 欧美+亚洲+精品+三区| 国产日韩精品入口| 亚洲人精品午夜在线观看| 欧美日韩精品欧美日韩精品一| 国产精品欧美日韩久久| 国产精品magnet| 欧美黑人一区二区三区| 国产一区二区三区久久| 亚洲丶国产丶欧美一区二区三区| 国内精品久久久久久久果冻传媒| 亚洲一区二区三区三| 欧美色精品天天在线观看视频| 欧美理论大片| 欧美另类一区二区三区| 国产亚洲精品aa午夜观看| 亚洲狠狠丁香婷婷综合久久久| 亚洲三级免费观看| 亚洲国产成人精品女人久久久| 国产精品a久久久久| 亚洲影视在线| 狠狠色丁香婷婷综合影院| 欧美色欧美亚洲另类七区| 国内精品视频久久| 国产精品福利网| 国产精品xvideos88| 狠狠色综合网站久久久久久久| 国产精品影片在线观看| 欧美视频网站| 亚洲一二三四久久| 日韩一级网站| 亚洲午夜精品久久久久久浪潮| 91久久国产综合久久91精品网站| 国产精品免费aⅴ片在线观看| 国产精品二区在线观看| 欧美日韩免费观看一区=区三区| 一本色道久久综合亚洲精品小说| 亚洲福利视频一区二区| 合欧美一区二区三区| 久久久久国产免费免费| 一区在线观看| 99视频在线观看一区三区| 一卡二卡3卡四卡高清精品视频| 午夜视频久久久久久| 久久久久国产成人精品亚洲午夜| 欧美四级电影网站| 亚洲日本免费| 国产三区精品| 美国十次成人| 日韩写真视频在线观看| 在线亚洲电影| 欧美国产精品va在线观看| 欧美极品欧美精品欧美视频| 亚洲欧美日韩国产一区| 欧美在线视频观看免费网站| 久久久久综合一区二区三区| 久久精品免视看| 日韩亚洲欧美成人| 欧美日韩一区二区在线视频| 国产精品豆花视频| 欧美国产1区2区| 久久亚洲不卡| 亚洲欧洲精品成人久久奇米网| 一区二区三区在线看| 麻豆国产精品va在线观看不卡| 国产精品久久久久久久久| 亚洲欧美激情视频在线观看一区二区三区| 国产麻豆精品久久一二三| 亚洲欧洲视频在线| 亚洲天堂成人在线观看| 欧美小视频在线观看| 亚洲精品综合精品自拍| 一本高清dvd不卡在线观看| 午夜老司机精品| 欧美成人精品在线观看| 欧美日韩国产高清视频| 久久深夜福利| 国产最新精品精品你懂的| 午夜精彩视频在线观看不卡| 亚洲国产高清aⅴ视频| 国产精品www网站| 久久精品国产精品亚洲精品| 久热精品视频在线观看| 国产精品夜夜夜| 99re热这里只有精品免费视频| 在线日韩av片| 欧美1级日本1级| 国产一区二区黄| 久久九九全国免费精品观看| 亚洲国产美女| 国产亚洲视频在线观看| 亚洲人成在线播放网站岛国| 欧美日韩成人一区二区| 亚洲专区免费| 亚洲欧美激情一区| 国产乱码精品| 欧美少妇一区二区| 国产精品亚洲一区二区三区在线| 久久免费视频网站| 久久精品国产清自在天天线| 亚洲福利视频在线| 亚洲一区在线直播| 亚洲一区在线免费观看| 在线成人性视频| 久久国产精品99国产| 亚洲日本va午夜在线影院| 欧美揉bbbbb揉bbbbb| 午夜性色一区二区三区免费视频| 一区二区三区日韩欧美| 亚洲伦伦在线| 亚洲一区二区三区四区五区黄| 国产日韩欧美一二三区| 国产日韩欧美精品在线| 亚洲午夜一区二区三区| 亚洲电影免费观看高清完整版在线| 国内精品视频久久| 一区二区精品在线| 欧美日韩一区二区免费视频| 欧美午夜在线视频| 欧美成人在线免费观看| 亚洲视频观看| 国产精品v欧美精品v日韩| 欧美一区二区在线免费观看| 欧美成人午夜视频| 久久香蕉国产线看观看网| 中文一区二区在线观看| 亚洲欧美日韩国产中文| 国产精品实拍| 欧美人成在线视频| 老司机aⅴ在线精品导航| 黄色成人免费网站| 日韩视频专区| 亚洲毛片网站| 欧美高清在线一区二区| 亚洲三级视频| 国产亚洲欧美日韩精品| 欧美黄色aaaa| 99亚洲伊人久久精品影院红桃| 中文国产亚洲喷潮| 伊人精品在线| 欧美日韩不卡一区| 久久一区二区三区四区五区| 久久偷看各类wc女厕嘘嘘偷窃| 一本久久知道综合久久| 亚洲精品国精品久久99热| 国产精品一区二区三区久久| 欧美手机在线视频| 国产精品午夜视频| 欧美激情一级片一区二区| 亚洲欧美一区二区三区在线| 欧美高清不卡| 亚洲福利视频一区| 欧美日韩在线综合| 亚洲午夜久久久久久久久电影网| 性视频1819p久久| 欧美性大战xxxxx久久久| 久久久精品tv| 亚洲综合999| 亚洲国产精品久久| 欧美午夜在线一二页| 日韩一区二区福利| 欧美日韩精品久久| 永久免费视频成人| 亚洲二区精品| 国产视频丨精品|在线观看| 国产精品久久久久久久久久妞妞| 国内久久精品| aⅴ色国产欧美| 欧美精品一区二区三区四区| 国产精品你懂的在线| 亚洲精品日韩综合观看成人91| 国产日韩综合一区二区性色av| 卡一卡二国产精品| 好看不卡的中文字幕| 亚洲国产va精品久久久不卡综合| 亚洲国产精品国自产拍av秋霞| 亚洲视频在线观看三级| 欧美黄色aa电影| 久久天天躁夜夜躁狠狠躁2022| 国产精品日日摸夜夜添夜夜av| 伊人久久久大香线蕉综合直播| 美玉足脚交一区二区三区图片| 亚洲色图自拍| 久久国产精品第一页| 99香蕉国产精品偷在线观看| 亚洲视频电影图片偷拍一区| 欧美成人中文字幕在线| 欧美精品综合| 亚洲香蕉视频| 午夜精品一区二区三区四区| 久久精品国语| 国产乱理伦片在线观看夜一区| 欧美精品久久久久久| 欧美在线观看日本一区| 亚洲精品综合| 欧美伦理91i| 国产精品毛片高清在线完整版| 国产欧美一区二区三区久久| 国产精品电影在线观看| 国产精品黄页免费高清在线观看| 国产精品伦子伦免费视频| 久久久www成人免费无遮挡大片| 99亚洲视频| 国产一区二区三区在线播放免费观看| 亚洲国产三级| 亚洲精品一区二区三区在线观看| 国产精品日韩精品欧美在线| 欧美 亚欧 日韩视频在线| 极品裸体白嫩激情啪啪国产精品| 国产精品v亚洲精品v日韩精品| 亚洲一二三区视频在线观看|