亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1025 | 回復(fù): 0
打印 上一主題 下一主題

XML和JSP [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2007-06-29 17:30 |只看該作者 |倒序瀏覽
XML和JSP
概覽:
   XML和JSP是這些日子中最熱的東西。本文介紹如何聯(lián)合這兩
   種技術(shù)來建設(shè)動態(tài)網(wǎng)站。你還可以同時看一下DOM,XPath,XSL,
   和其它Java-XML技術(shù)的示例代碼。
   我們在此假設(shè)你已經(jīng)了解JavaServer Pages(JSP)和Extensible Markup Language (XML)。但也許你對該如何綜合使用它們?nèi)匀挥行┟曰蟆?
   JSP的應(yīng)用很容易,你可以用它設(shè)計網(wǎng)頁,使之看起來似乎和HTML一
   樣。唯一的不同是JSP是動態(tài)執(zhí)行的。例如,它們可以處理表單form
   和讀寫數(shù)據(jù)庫。
   XML的應(yīng)用的說明則比較困難。似乎所有的產(chǎn)品都支持它,每個人也
   好象都以各種不同目的在使用它。
   在本文中,你可以看到如何使用一種相當先進的方式用XML來設(shè)計一
   個系統(tǒng)。許多站點有巨量數(shù)據(jù)收集并以一種很標準或很不標準的方式
   來顯示它們。我將設(shè)計一個系統(tǒng),它使用XML文件在web服務(wù)器上進行
   存儲,并用JSP來顯示數(shù)據(jù)。
   XML vs 關(guān)系型數(shù)據(jù)庫
   "等一下!"你可能問,"你用XML文件存儲數(shù)據(jù)嗎?為什么不使用數(shù)據(jù)庫?"
   這個問題問的很好。我的回答是,對很多目的用途來說,用數(shù)據(jù)庫太
   過浪費了。.要使用一個數(shù)據(jù)庫,你必須安裝和支持一個分離的服務(wù)器處理進程(a separate server process),它常要求有安裝和支持它的administrator。你必須學習SQL, 并用SQL寫查詢,然后轉(zhuǎn)換數(shù)據(jù),再返回。而如果你用XML文件存儲數(shù)據(jù),將可減少額外的服務(wù)器的負荷。還有,你還找到了一個編輯數(shù)據(jù)的簡單方法。你只要使用文本編輯器,而不必使用復(fù)雜的數(shù)據(jù)庫工具。XML文件很容易備份,和朋友共享,或下載到你的客戶端。同樣的,你可以方便地通過ftp上載新的數(shù)據(jù)到你的站點。
   XML還有一個更抽象的優(yōu)點,即作為層次型的格式比關(guān)系型的更好。
   它可以用一種很直接的方式來設(shè)計數(shù)據(jù)結(jié)構(gòu)來符合你的需要。你不需
   要使用一個實體-關(guān)系編輯器,也不需要使你的圖表(schema)標準
   化。 如果你有一個元素(element)包含了另一個元素,你可以直接在格式中表示它,而不需要使用表的關(guān)聯(lián)。
   注意,在很多應(yīng)用中,依靠文件系統(tǒng)是不夠充分的。如果更新很多,
   文件系統(tǒng)會因為同時寫入而受到破壞。數(shù)據(jù)庫則通常支持事務(wù)處理,
   可以應(yīng)付所發(fā)生的請求而不至于損壞。對于復(fù)雜的查詢統(tǒng)計要有反復(fù)
   、及時的更新,此時數(shù)據(jù)庫表現(xiàn)都很優(yōu)秀。當然,關(guān)系型數(shù)據(jù)庫還
   有很多優(yōu)點,包括豐富的查詢語言,圖表化工具,可伸縮性,存取
   控制等等。
   (注意:你可以使用簡單的文件鎖定來提供一個事務(wù)處理服務(wù)器,你還可以在java中執(zhí)行一種 XML index-and-search工具,不過這已經(jīng)是另外一篇文章的主題了。)
   在下面這樣的案例中,正如大多數(shù)中小規(guī)模的、基于發(fā)布信息的站
   點一樣,你可能涉及的大多數(shù)數(shù)據(jù)存取都是讀,而不是寫,數(shù)據(jù)雖
   然可能很大,但相對來說并沒有經(jīng)常的更新變化,你也不需要做很
   復(fù)雜的查詢,即使你需要做,也將用一個獨立的查詢工具,那么成
   熟的RDBMS的優(yōu)點消失了,而面向?qū)ο笮偷臄?shù)據(jù)模型的優(yōu)點則可以得
   到體現(xiàn)。
   最后,為你的數(shù)據(jù)庫提供一個查詢器外殼來進行SQL查詢并將他們轉(zhuǎn)
   化進入XML stream也是完全有可能的。
   所以你可以選擇這二種方式之一。XML正變成一種非常健壯的,便于
   編程的工具,作為某個成熟的數(shù)據(jù)庫的前端工具來進行存儲和查詢。
   (Oracle的XSQL servlet即是這種技術(shù)的一個很好的例子。)
   應(yīng)用篇:一個在線相冊
   所有人都喜歡照相!他們喜歡展示自己的,親人的,朋友的,度假
   時的照片,而 Web 是他們展示的好地方。-- 即使千里之外的親戚
   都可以看到。我將著重于定義一個單獨的Picture對象。(這一應(yīng)用的
   源代碼在Resources中可以取得) 。該對象描述了表示一張照片所需要的字段:title,date,一個可選的標題,以及對圖片來源的一個指向。
   一個圖象,需要它自己的一些字段:源文件( GIF/JPEG)的定位,寬度和高度像素(以協(xié)助建立 標記。 這里可以看到一個很簡單優(yōu)點,即使用文件系統(tǒng)來代替數(shù)據(jù)庫的時候,你可以將圖形文件存放在與數(shù)據(jù)文件相同的目錄中。
   最后,讓我們來用一個元素擴展圖片記錄,該元素定義了一套縮略
   圖(thumbnail)來用于內(nèi)容表或其它地方。這里我用了和先前同樣
   定義的圖片內(nèi)容。
   一張圖片的XML表示可以是這樣的:
  


   注意,通過使用XML, 你將一張單獨圖片的全部信息放到了一個單獨
   的文件中,而不是將它分散放入3-4個表中。
   我們將這稱為 .pix file
   -- 于是你的文件系統(tǒng)會是這樣的:
   summer99/alex-beach.pix
   summer99/alex-beach.jpg
   summer99/alex-beach-sm.jpg
   summer99/alex-beach-med.jpg
   summer99/alex-snorkeling.pix
   etc.
   技術(shù)篇
   俗話說,要剝下貓的皮的方法何止一種。同樣,將XML數(shù)據(jù)放到JSP
   中也不止一種辦法。這里列舉了其中一些方法,(其實,很多其它工
   具也可以做得同樣出色。)
   DOM: 你可以使用類(classes)來調(diào)用DOM接口(interface)對XML
   文件進行分析檢查。
   XMLEntryList: 你可以使用我的代碼來將XML加載到name-value
   pairs 的java.util.List中。
   XPath: 你可以使用一個 XPath處理器(如Resin)通過路徑名在XML
   文件中定位元素。
   XSL:你可以使用某種XSL處理器將XML轉(zhuǎn)換成為HTML。
   Cocoon: 你可以使用開放源碼的Cocoon framework
   運行你自己的bean: 你可以寫一個外殼類(wrapper class),使用某
   種其它技術(shù)來將數(shù)據(jù)加載到字定義的JavaBean中。
   請注意這些技術(shù)將和一個你從另外來源取得的XML stream執(zhí)行得同樣
   出色,例如一個客戶端或者一個應(yīng)用服務(wù)器。
   JavaServer Pages
   JSP規(guī)范有很多替身,不同的JSP產(chǎn)品表現(xiàn)也不盡相同,不同版本之間
   也有差別。我選擇了Tomcat,這基于以下原因:
   它支持大多數(shù)最新的JSP/servlet規(guī)范
   它受到 Sun和Apache認同
   你可以獨立運行它而不需要另外配置一個Web服務(wù)器。
   它是開放源碼的
   你可以選擇任何你喜歡的JSP引擎,但要自己配置它,它必須至少支
   持JSP 1.0規(guī)范。0.91和1.0之間有了許多區(qū)別。而JSWDK
   (Java Server Web Development Kit) 可能剛剛好地適合要求。
   JSP結(jié)構(gòu)
   當創(chuàng)建一個jsp網(wǎng)站 (Webapp), 我喜歡將公用的函數(shù)、導入、常量、
   變量聲明都放入到一個單獨的文件init.jsp中。 然后用
   加載到每一個文件中去。
   就象C語言的 #include, include在編譯時使其中的
   文本作為一個部分被加入并一起進行編譯,相對地,
   標記則是使其中的文件被獨立地進行編譯,然后在文件中嵌入一個對
   它的調(diào)用。
   查找文件
   當JSP啟動時,初始化后第一件事情就是查找你要的XML文件。它是怎
   么知道在眾多文件中你要找的是哪一個? 它來自與一個參數(shù),使用者
   會在調(diào)用jsp的URL中加入?yún)?shù): picture.jsp?file=summer99/alex-beach.pix
   (或者通過HTML表單來傳遞文件參數(shù))。
   但是,當JSP接受此參數(shù)以后,你仍然只完成了一半工作,因為還要
   知道文件系統(tǒng)的根目錄在哪里。例如,在Unix系統(tǒng)中,實際文件可能
   在這樣的路徑:
   /home/alex/public_html/pictures/summer99/alex-beach.pix。
   JSP文件在執(zhí)行狀態(tài)時沒有當前路徑概念。所以你為java.io包要給出
   一個絕對路徑。
   Servlet API可以提供一個方法來將一個URL路徑,從相對于當前JSP
   或Servlet的路徑轉(zhuǎn)化成為一個絕對的文件系統(tǒng)路徑。方法是:
   ServletContext.getRealPath(String)。
   每一個JSP有一個叫做application的 ServletContext對象。所以代
   碼可以是:
   String picturefile =
   application.getRealPath("/" + request.getParameter("file"));
   或者
   String picturefile =
   getServletContext().getRealPath("/" + request.getParameter("file"));
   它也可以在servlet中工作。(你必須加上 / 因為此方法需要傳遞request.getPathInfo
   ()的結(jié)果。)
   這里有一個重要的提示:每當你存取本地的資源,要非常小心地檢查輸入數(shù)據(jù)的合法性
   。
   黑客或者粗心的用戶,可能發(fā)送偽造的或錯誤的數(shù)據(jù)來破壞你的站
   點。例如,請想一下以下的表達會發(fā)生什么結(jié)果:
   如果輸入了file=../../../../etc/passwd。這樣用戶回讀到你的
   服務(wù)器的password文件!
   DOM (Document Object Model)
   DOM 代表文檔對象模型Document Object Model。它是瀏覽XML文檔
   的一種標準API,由World Wide Web Consortium (W3C)發(fā)展。 接口
   在org.w3c.dom包中,文檔參見W3C站點。
   有許多可用的DOM分析器工具。我選擇了 IBM的XML4J。但你可以使用
   任何其它的DOM分析器。這是因為DOM是一套接口,而不是類 --所有的
   DOM分析器(parser)必須返回同樣地處理這些接口的對象。
   遺憾的是,雖然很標準,DOM還是有兩大缺陷:
   1 API雖然也是面向?qū)ο蟮,還是相當笨重。
   DOM parser并沒有標準的API,所以, 當每一個分析器返回一
   個org.w3c.dom對象,文檔對象--分析器初始化和文件自身加載的方
   式,對應(yīng)于不同分析器通?偸翘囟ǖ。
   這個簡單的上面已描述的圖片文件在DOM中可以在一個樹結(jié)構(gòu)中通
   過一些對象表示如下:


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/26836/showart_331139.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP