jsp基于Web的可維護的數(shù)據(jù)庫瀏覽器(源代碼+論文+答辯PPT)
jsp基于Web的可維護的數(shù)據(jù)庫瀏覽器(源代碼+論文+答辯PPT),jsp,基于,Web,維護,數(shù)據(jù)庫,瀏覽器,源代碼,論文,答辯,PPT
可維護的數(shù)據(jù)庫瀏覽器指導教師 學 生功能簡介:基于基于WebWeb采用三層結構采用三層結構,用用MVCMVC模式組合模式組合JSP JSP ServletServlet和和JavaBeanJavaBean Web Web界面的要求是允許用戶瀏覽相關數(shù)據(jù)庫界面的要求是允許用戶瀏覽相關數(shù)據(jù)庫中的內容中的內容.該界面使用戶可以通過指定一個該界面使用戶可以通過指定一個JDBCJDBC驅動器或驅動器或URLURL來與一個數(shù)據(jù)庫連接。接著,應用來與一個數(shù)據(jù)庫連接。接著,應用程序會允許用戶瀏覽數(shù)據(jù)庫中定義的所有表,并程序會允許用戶瀏覽數(shù)據(jù)庫中定義的所有表,并且可以選擇任何一個表對其數(shù)據(jù)進行處理。同樣,且可以選擇任何一個表對其數(shù)據(jù)進行處理。同樣,用戶還可以輸入用戶還可以輸入SQLSQL查詢語句并查看這些查詢操查詢語句并查看這些查詢操作產生的列表數(shù)據(jù)。在用戶使用會話的任何時間作產生的列表數(shù)據(jù)。在用戶使用會話的任何時間內,必須確保用戶可以很容易地斷開數(shù)據(jù)庫,并內,必須確保用戶可以很容易地斷開數(shù)據(jù)庫,并連接到另一個數(shù)據(jù)庫上。連接到另一個數(shù)據(jù)庫上。三層結構:優(yōu)點優(yōu)點:三層結構是個更靈活的三層結構是個更靈活的體系結構,它把顯示邏輯從體系結構,它把顯示邏輯從業(yè)務邏輯中分離出來,這就業(yè)務邏輯中分離出來,這就意味著業(yè)務代碼是獨立的,意味著業(yè)務代碼是獨立的,可以不關心怎樣顯示和在哪可以不關心怎樣顯示和在哪里顯示。里顯示。業(yè)務邏輯層現(xiàn)在處于中業(yè)務邏輯層現(xiàn)在處于中間層,不需要關心由哪種類間層,不需要關心由哪種類型的客戶來顯示數(shù)據(jù),也可型的客戶來顯示數(shù)據(jù),也可以與后端系統(tǒng)保持相對獨立以與后端系統(tǒng)保持相對獨立性,有利于系統(tǒng)擴展。性,有利于系統(tǒng)擴展。三層結構:TomcatTomcat作為作為WebServerWebServerServletServlet控制類實現(xiàn)業(yè)務控制類實現(xiàn)業(yè)務邏輯控制邏輯控制多種數(shù)據(jù)庫連接多種數(shù)據(jù)庫連接MVC模式:模型模型:應用程序的業(yè)務邏應用程序的業(yè)務邏輯輯視圖視圖:應用程序的表示層應用程序的表示層控制器控制器:用用ServletServlet實現(xiàn)實現(xiàn)表示層表示層-視圖標志庫視圖標志庫 所有的所有的.JSP.JSP都是表示都是表示層層 表示層的核心是請求表示層的核心是請求控制器,控制器,controller.jspcontroller.jsp。它可以用來創(chuàng)建它可以用來創(chuàng)建RequestControllerRequestController會話會話beanbean的一個實例,該實的一個實例,該實例可以實現(xiàn)頁面流程邏例可以實現(xiàn)頁面流程邏輯,并可以推動控制器輯,并可以推動控制器定義的定義的JSPJSP視圖對請求做視圖對請求做出響應。是入口點。出響應。是入口點。controller.jspcontroller.jspchooseTable.jspchooseTable.jspcsvView.jspcsvView.jspeditTable.jspeditTable.jsptableView.jsptableView.jspsystemError.jspsystemError.jspupdateOK.jspupdateOK.jsplogout.jsplogout.jsp邏輯(模型):程序中的業(yè)務邏輯程序中的業(yè)務邏輯封裝到組件封裝到組件(Bean)(Bean)中有中有利于測試改進質量和重利于測試改進質量和重用用RequestHandler.javaRequestHandler.javaBrowseSession.javaBrowseSession.javaChooseTable.javaChooseTable.javaNewConnection.javaNewConnection.javaDBConnect.javaDBConnect.java控制類:ServletServlet和幫助類和幫助類RequestController.javaRequestController.javaUpdateTable.javaUpdateTable.javaLogout.javaLogout.java 等等數(shù)據(jù)層數(shù)據(jù)層-Web.xml JDBCJDBC功能的核心包含在功能的核心包含在JDBCTableModelJDBCTableModel類中。類中。JDBCTableModel.javaJDBCTableModel.java該類將運行該類將運行SQLSQL查詢,并維查詢,并維護護ResultSetsResultSets建立的內部數(shù)據(jù)建立的內部數(shù)據(jù)結構。結構。實現(xiàn)應用程序所需的最后實現(xiàn)應用程序所需的最后一個文件是一個文件是WARWAR的的web.xmlweb.xml文件。它有兩項文件。它有兩項任務;首先,必須告訴任務;首先,必須告訴JSPJSP引擎到那里去尋找描述引擎到那里去尋找描述視圖標志庫所需的標志庫視圖標志庫所需的標志庫描述符;其次,還必須把描述符;其次,還必須把應用程序的應用程序的“welcome welcome page”page”設為設為“controller.jspcontroller.jsp”。將。將應用程序的環(huán)境設為應用程序的環(huán)境設為dbexploredbexplore。web.xmlweb.xml狀態(tài)圖:目錄
1緒論 1
1.1Web應用系統(tǒng) 1
1.2體系結構 1
2開發(fā)語言 4
2.1Servlet 4
2.2JSP 4
2.3JDBC接口技術 5
2.3.1ODBC簡介 5
2.3.2JDBC技術 5
2.3.3JDBC兩層模型和三層模型 7
3系統(tǒng)結構 8
3.1JSP Servlets和JavaBean來構成系統(tǒng) 8
3.1.1體系結構 9
3.2Web 應用程序模型 11
3.2.1應用程序的基本功能單元 11
3.2.2多層客戶服務器應用模型 12
3.2.3分布式系統(tǒng) 12
3.2.4基于Web的多層應用模型 13
4可維護與實現(xiàn) 14
4.1采用靈活與可維護的設計模式 14
4.1.1模型-視圖-控制器 14
4.2要求 15
4.3設計 17
4.4實現(xiàn) 19
4.4.1表示層-視圖標志庫 19
4.4.2邏輯 19
4.4.3應用程序預排 20
4.4.4數(shù)據(jù)層-datasources和datasources.db軟件包 25
4.4.5部署應用程序 25
5結論 25
致 謝 26
參考文獻: 27
附錄 安裝Servelet/JSP環(huán)境 28
安裝Tomcat4.0 29
1緒論
1.1Web應用系統(tǒng)
近十年來,基于Internet的應用正以前所未有的高速度發(fā)展,其中一個重要的方向就是基于Web的應用系統(tǒng)的發(fā)展。在此期間,隨著技術的不斷更新和應用的不斷深入,Web應用系統(tǒng)的發(fā)展也經歷了幾個階段性的跨越。
(圖1.1)
在Web發(fā)展的初期,人們通常使用Web服務器作為信息發(fā)布工具,它接收用戶的HTTP請求,然后根據(jù)請求提供所對應的HTML文檔,除了顯示手段更為豐富的特點之外,HTML文檔與普通靜態(tài)文本并沒有本質差別。隨后產生了動態(tài)頁面和更多交互能力的需要,新的應用需要根據(jù)客戶請求,從數(shù)據(jù)庫中動態(tài)獲取數(shù)據(jù)并予以顯示。由此所產生的技術手段有CGI和Web服務器內置API等。這些手段在一定程度上滿足了應用需求,但也都存在著各自的局限性:CGI效率低、速度較慢,而內置API開發(fā)困難,移植性差。
隨著Web應用范圍的擴大,基于商業(yè)應用的Web開始出現(xiàn),人們需要Web服務器端提供更為復雜的和更為靈活的應用開發(fā)支持。JavaScript、VBScript等技術的運用,Web中對象和組件的應用使基于Web的商業(yè)程序開發(fā)得以迅速發(fā)展。但這種應用通常只適用于構建規(guī)模不大的商業(yè)系統(tǒng),當商業(yè)系統(tǒng)進一步擴大時,其擴展性受到了限制,因為在Web服務器最初的設計目的中并不包括對大規(guī)模、高性能和高可靠性商業(yè)應用的支持。應用程序服務器(Application Server)的產生正是為了突破這一瓶頸。
1.2體系結構
應用程序服務器的產生與軟件體系結構的演變發(fā)展也是密切相關的。讓我們簡單回顧一下軟件體系結構的發(fā)展歷史。與最初的大型中央主機相適應,最初的軟件結構體系也是Mainframe結構,該結構下客戶、數(shù)據(jù)和程序被集中在主機上,通常只有少量的GUI界面,對遠程數(shù)據(jù)庫的訪問比較困難。隨著PC的廣泛應用,該結構逐漸在應用中被淘汰。
在80年代中期出現(xiàn)了Client/Server分布式計算結構,應用程序的處理在客戶(PC機)和服務器(Mainframe或Server)之間分擔;請求通常被關系型數(shù)據(jù)庫處理,PC機在接受到被處理的數(shù)據(jù)后實現(xiàn)顯示和業(yè)務邏輯;系統(tǒng)支持模塊化開發(fā),通常有GUI界面。Client/Server結構因為其靈活性得到了極其廣泛的應用。但對于大型軟件系統(tǒng)而言,這種結構在系統(tǒng)的部署和擴展性方面還是存在著不足。
Internet的發(fā)展給傳統(tǒng)應用軟件的開發(fā)帶來了深刻的影響?;贗nternet和Web的軟件和應用系統(tǒng)無疑需要更為開放和靈活的體系結構。隨著越來越多的商業(yè)系統(tǒng)被搬上Internet,一種新的、更具生命力的體系結構被廣泛采用,這就是為我們所知的“三層/多層計算”。
一個典型的三層模型如如下圖所示:
(圖1.2)
客戶層(client tier) 用戶接口和用戶請求的發(fā)出地,典型應用是網絡瀏覽器和胖客戶(如Java程序)服務器層(server tier) 典型應用是Web服務器和運行業(yè)務代碼的應用程序服務器數(shù)據(jù)層(data tier) 典型應用是關系型數(shù)據(jù)庫和其他后端(back-end)數(shù)據(jù)資源, 如 Oracle和SAP、 R/3等三層體系結構中,客戶(請求信息)、程序(處理請求)和數(shù)據(jù)(被操作)被物理地隔離。三層結構是個更靈活的體系結構,它把顯示邏輯從業(yè)務邏輯中分離出來,這就意味著業(yè)務代碼是獨立的,可以不關心怎樣顯示和在哪里顯示。業(yè)務邏輯層現(xiàn)在處于中間層,不需要關心由哪種類型的客戶來顯示數(shù)據(jù),也可以與后端系統(tǒng)保持相對獨立性,有利于系統(tǒng)擴展。三層結構具有更好的移植性,可以跨不同類型的平臺工作,允許用戶請求在多個服務器間進行負載平衡。三層結構中安全性也更易于實現(xiàn),因為應用程序已經同客戶隔離。
1.3應用程序服務器
應用程序服務器是三層/多層體系結構的組成部分,應用程序服務器位于中間層。如上圖所示,應用程序服務器運行于瀏覽器和數(shù)據(jù)資源之間,一個簡單的實例是,顧客從瀏覽器中輸入一個定單,web服務器將該請求發(fā)送給應用程序服務器,由應用程序服務器執(zhí)行處理邏輯,并且獲取或更新后端用戶數(shù)據(jù)。
在企業(yè)級應用中,應用程序服務器是位于企業(yè)數(shù)據(jù)(以及其他企業(yè)遺留系統(tǒng))和訪問企業(yè)數(shù)據(jù)的客戶之間的中間件,它提供了業(yè)務代碼的存放和運行的環(huán)境。它從物理上把業(yè)務邏輯(Business logic)同客戶端和數(shù)據(jù)資源分離開來。應用程序服務器可使一個商業(yè)系統(tǒng)得以快速簡便的開發(fā)和部署,也可以適應商業(yè)系統(tǒng)的用戶增加而無需重構系統(tǒng),這一切都是因為它處于一個相對獨立的結構層。在實際應用中,一個企業(yè)系統(tǒng)可以由多個應用程序服務器、多個Web服務器和多個數(shù)據(jù)庫服務器組成,應用程序代碼可以分布在這多個應用程序服務器上。
應用程序服務器是企業(yè)級web應用的必經之路,新的企業(yè)級應用需要關鍵性應用能對不斷增加的用戶數(shù)量保持持續(xù)可用,此外企業(yè)應用還需要高的安全性和可靠性,無論訪問系統(tǒng)的用戶數(shù)量發(fā)生變化,還是系統(tǒng)數(shù)據(jù)資源發(fā)生變化,應用程序服務器都應始終保持運行。在應用程序服務器之前,Web應用程序通常運行在Web服務器中,但Web服務器最初只是被設計用來提供Web頁面相關服務的,因此開發(fā)/運行Web應用程序是緩慢而復雜的。而應用程序服務器的強大功能則能夠為企業(yè)級應用系統(tǒng)的開發(fā)和部署提供有力的保證。
一個對應用程序服務器的定義如下:采用具有分布式計算能力的集成結構、支持瘦客戶機的軟件服務器產品。應用程序服務器的基本用途包括:管理客戶會話、管理業(yè)務邏輯、管理與后端計算資源(包括數(shù)據(jù)、事務和內容)的連接。
上述定義的涵蓋范圍是應用程序服務器本身,我們認為實際上應用程序服務器還應該包括其開發(fā)環(huán)境。每一個應用程序服務器產品都有自己的API。為了充分利用應用程序服務器所提供的功能,開發(fā)人員必須學會用這些API編程。服務器的API對實用系統(tǒng)的開發(fā)至關重要,掌握API方法和它們提供的功能需要花一定的學習時間。
越來越多地,應用程序服務器采用諸如COM、CORBA、Enterprise JavaBeans(EJB)和Java Servlets等標準化技術(其中CORBA和EJB更為常用),上述標準化技術的采用使開發(fā)變得更加容易,因為它們?yōu)橥ㄓ梅掌鞴芾砉δ芴峁┝藰藴驶疉PI,遵循標準保證了當更改應用程序服務器時原有組件可移植。
2開發(fā)語言
2.1Servlet
Servlet是使用Java Servlet 應用程序設計接口(API)及相關類和方法的 Java 程序。除了 Java Servlet API,Servlet 還可以使用用以擴展和添加到 API 的 Java 類軟件包。Servlet 在啟用 Java 的 Web 服務器上或應用服務器上運行并擴展了該服務器的能力。Java servlet對于Web服務器就好象Java applet對于Web瀏覽器。Servlet裝入Web服務器并在Web服務器內執(zhí)行,而applet裝入Web瀏覽器并在Web瀏覽器內執(zhí)行。Java Servlet API 定義了一個servlet 和Java使能的服務器之間的一個標準接口,這使得Servlets具有跨服務器平臺的特性。
Servlet 通過創(chuàng)建一個框架來擴展服務器的能力,以提供在 Web 上進行請求和響應服務。當客戶機發(fā)送請求至服務器時,服務器可以將請求信息發(fā)送給 Servlet,并讓 Servlet 建立起服務器返回給客戶機的響應。 當啟動 Web 服務器或客戶機第一次請求服務時,可以自動裝入 Servlet。裝入后, Servlet 繼續(xù)運行直到其它客戶機發(fā)出請求。Servlet 的功能涉及范圍很廣。例如,Servlet 可完成如下功能:
(1) 創(chuàng)建并返回一個包含基于客戶請求性質的動態(tài)內容的完整的 HTML頁面。
(2) 創(chuàng)建可嵌入到現(xiàn)有 HTML 頁面中的一部分 HTML 頁面(HTML 片段)。
(3) 與其它服務器資源(包括數(shù)據(jù)庫和基于 Java 的應用程序)進行通信。
(4) 用多個客戶機處理連接,接收多個客戶機的輸入,并將結果廣播到多個客戶機上。
(5) 當允許在單連接方式下傳送數(shù)據(jù)的情況下,在瀏覽器上打開服務器至applet的新連接,并將該連 接保持在打開狀態(tài)。當允許客戶機和服務器簡單、高效地執(zhí)行會話的情況下,applet也可以啟動客戶瀏覽器和服務器之間的連接。可以通過定制協(xié)議或標準(如 IIOP)進行通信。
(6) 對特殊的處理采用 MIME 類型過濾數(shù)據(jù),例如圖像轉換和服務器端包括(SSI)。
(7) 將定制的處理提供給所有服務器的標準例行程序。例如,Servlet 可以修改如何認證用戶。
2.2JSP
JavaServer PagesTM (JSP)技術為創(chuàng)建顯示動態(tài)生成內容的Web頁面提供了一個簡捷而快速的方法。JSP技術的設計目的是使得構造基于Web的應用程序更加容易和快捷,而這些應用程序能夠與各種Web服務器,應用服務器,瀏覽器和開發(fā)工具共同工作。JavaServer Pages (JSP)技術就是被設計用來滿足能夠在任何Web或應用程序服務器上運行,將應用程序邏輯和頁面顯示分離,能夠快速地開發(fā)和測試,簡化開發(fā)基于Web的交互式應用程序的過程.
JSP規(guī)范是Web服務器、應用服務器、交易系統(tǒng)、以及開發(fā)工具供應商間廣泛合作的結果。太陽微系統(tǒng)公司(Sun Microsystems Inc.)開發(fā)出這個規(guī)范來整合和平衡已經存在的對Java編程環(huán)境(例如,Java Servlet和JavaBeansTM)進行支持的技術和工具。其結果是產生了一種新的、開發(fā)基于Web應用程序的方法,給予使用基于組件應用邏輯的頁面設計者以強大的功能。 Web頁面開發(fā)人員不會都是熟悉腳本語言的編程人員。JavaServer Page技術封裝了許多功能,這些功能是在易用的、與JSP相關的XML標識中進行動態(tài)內容生成所需要的。標準的JSP標識能夠訪問和實例化JavaBeans組件,設置或者檢索組件屬性,下載Applet,以及執(zhí)行用其他方法更難于編碼和耗時的功能。通過開發(fā)定制化標識庫,JSP技術是可以擴展的。今后,第三方開發(fā)人員和其他人員可以為常用功能創(chuàng)建自己的標識庫。這使得Web頁面開發(fā)人員能夠使用熟悉的工具和如同標識一樣的執(zhí)行特定功能的構件來工作。JSP技術很容易整合到多種應用體系結構中,以利用現(xiàn)存的工具和技巧,并且擴展到能夠支持企業(yè)級的分布式應用。作為采用Java技術家族的一部分,以及Java 2(企業(yè)版體系結構)的一個組成部分,JSP技術能夠支持高度復雜的基于Web的應用。由于JSP頁面的內置腳本語言是基于Java編程語言的,而且所有的JSP頁面都被編譯成為Java Servlet,JSP頁面就具有Java技術的所有好處,包括健壯的存儲管理和安全性。作為Java平臺的一部分,JSP擁有Java編程語言“一次編寫,各處運行”的特點。
隨著越來越多的供應商將JSP支持添加到他們的產品中,您可以使用自己所選擇的服務器和工具,更改工具或服務器并不影響當前的應用。當與Java 2平臺,企業(yè)版(J2EE)和Enterprise JavaBean技術整合時,JSP頁面將提供企業(yè)級的擴展性和性能,這對于在虛擬企業(yè)中部署基于Web的應用是必需的。
2.3JDBC接口技術
JDBC是一種可用于執(zhí)行SQL語句的JavaAPI(ApplicationProgrammingInterface應用程序設計接口)。它由一些Java語言編寫的類和界面組成。JDBC為數(shù)據(jù)庫應用開發(fā)人員、數(shù)據(jù)庫前臺工具開發(fā)人員提供了一種標準的應用程序設計接口,使開發(fā)人員可以用純Java語言編寫完整的數(shù)據(jù)庫應用程序。
2.3.1ODBC簡介
說到JDBC,很容易讓人聯(lián)想到另一個十分熟悉的字眼“ODBC”。ODBC是OpenDatabaseConnectivity的英文簡寫。它是一種用來在相關或不相關的數(shù)據(jù)庫管理系統(tǒng)(DBMS)中存取數(shù)據(jù)的,用C語言實現(xiàn)的,標準應用程序數(shù)據(jù)接口。通過ODBCAPI,應用程序可以存取保存在多種不同數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的數(shù)據(jù),而不論每個DBMS使用了何種數(shù)據(jù)存儲格式和編程接口。
2.3.2JDBC技術
JDBC是一種可用于執(zhí)行SQL語句的JavaAPI(ApplicationProgrammingInterface,應用程序設計接口)。它由一些Java語言寫的類、界面組成。JDBC給數(shù)據(jù)庫應用開發(fā)人員、數(shù)據(jù)庫前臺工具開發(fā)人員提供了一種標準的應用程序設計接口,使開發(fā)人員可以用純Java語言編寫完整的數(shù)據(jù)庫應用程序。
通過使用JDBC,開發(fā)人員可以很方便地將SQL語句傳送給幾乎任何一種數(shù)據(jù)庫。也就是說,開發(fā)人員可以不必寫一個程序訪問Sybase,寫另一個程序訪問Oracle,再寫一個程序訪問Microsoft的SQLServer。用JDBC寫的程序能夠自動地將SQL語句傳送給相應的數(shù)據(jù)庫管理系統(tǒng)(DBMS)。不但如此,使用Java編寫的應用程序可以在任何支持Java的平臺上運行,不必在不同的平臺上編寫不同的應用。Java和JDBC的結合可以讓開發(fā)人員在開發(fā)數(shù)據(jù)庫應用時真正實現(xiàn)“WriteOnce,RunEverywhere!”
Java具有健壯、安全、易用等特性,而且支持自動網上下載,本質上是一種很好的數(shù)據(jù)庫應用的編程語言。它所需要的是Java應用如何同各種各樣的數(shù)據(jù)庫連接,JDBC正是實現(xiàn)這種連接的關鍵。
JDBC擴展了Java的能力,如使用Java和JDBCAPI就可以公布一個Web頁,頁中帶有能訪問遠端數(shù)據(jù)庫的Applet?;蛘咂髽I(yè)可以通過JDBC讓全部的職工(他們可以使用不同的操作系統(tǒng),如Windwos,Machintosh和UNIX)在Intranet上連接到幾個全球數(shù)據(jù)庫上,而這幾個全球數(shù)據(jù)庫可以是不相同的。隨著越來越多的程序開發(fā)人員使用Java語言,對Java訪問數(shù)據(jù)庫易操作性的需求越來越強烈。
MIS管理人員喜歡Java和JDBC,因為這樣可以更容易經濟地公布信息。各種已經安裝在數(shù)據(jù)庫中的事務處理都將繼續(xù)正常運行,甚至這些事務處理是存儲在不同的數(shù)據(jù)庫管理系統(tǒng)中;而對新的數(shù)據(jù)庫應用來說,開發(fā)時間將縮短,安裝和版本升級將大大簡化。程序員可以編寫或改寫一個程序,然后將它放在服務器上,而每個用戶都可以訪問服務器得到最新的版本。對于信息服務行業(yè),Java和JDBC提供了一種很好的向外界用戶更新信息的方法。
簡單地說,JDBC能完成下列三件事:
1)同一個數(shù)據(jù)庫建立連接;
2)向數(shù)據(jù)庫發(fā)送SQL語句;
3)處理數(shù)據(jù)庫返回的結果。
JDBC是一種底層API,這意味著它將直接調用SQL命令。JDBC完全勝任這個任務,而且比其他數(shù)據(jù)庫互聯(lián)更加容易實現(xiàn)。同時它也是構造高層API和數(shù)據(jù)庫開發(fā)工具的基礎。高層API和數(shù)據(jù)庫開發(fā)工具應該是用戶界面更加友好,使用更加方便,更易于理解的。但所有這樣的API將最終被翻譯為象JDBC這樣的底層API。目前兩種基于JDBC的高層API正處在開發(fā)階段。
1)SQL語言嵌入Java的預處理器。雖然DBMS已經實現(xiàn)了SQL查詢,但JDBC要求SQL語句被當作字符串參數(shù)傳送給Java程序。而嵌入式SQL預處理器允許程序員將SQL語句混用:Java變量可以在SQL語句中使用,來接收或提供數(shù)值。然后SQL的預處理器將把這種Java/SQL混用的程序翻譯成帶有JDBCAPI的Java程序。
2)實現(xiàn)從關系數(shù)據(jù)庫到Java類的直接映射。Javasoft和其他公司已經宣布要實現(xiàn)這一技術。在這種“對象/關系”映射中,表的每一行都將變成這類的一個實例,每一列的值對應實例的一個屬性。程序員可以直接操作Java的對象;而存取所需要的
SQL調用將在內部直接產生。還可以實現(xiàn)更加復雜的映射,比如多張表的行在一個
Java的類中實現(xiàn)。
隨著大家對JDBC興趣的不斷濃厚,越來越多的開發(fā)人員已經開始利用JDBC為基礎的工具進行開發(fā)。這使開發(fā)工作變得容易。同時,程序員也正在開發(fā)對最終用戶來說訪問數(shù)據(jù)庫更加容易的應用程序。
2.3.3JDBC兩層模型和三層模型
JDBC支持兩層模型,也支持三層模型訪問數(shù)據(jù)庫。
兩層模型中,一個java Appple或者一個JA-va應用直接同數(shù)據(jù)庫連接。這就需要能直接被訪問的數(shù)據(jù)庫進行連接的JDBC驅動器。用戶的SQL語句被傳送給數(shù)據(jù)庫,而這些語句執(zhí)行的結果將被傳回給用戶。數(shù)據(jù)庫可以在同一機器上,也可以另一機器上通過網絡進行連接。這被稱為“Client/Server”結構,用戶的計算機作為Client,運行數(shù)據(jù)庫的計算機作為Server。這個網絡可是intranet,比如連接全體雇員的企業(yè)內部網,當然也可以是internet。
在三層模型中,命令將被發(fā)送到服務的“中間層”,而“中間層”將SQL語句發(fā)送到數(shù)據(jù)庫。數(shù)據(jù)庫處理SQL語句并將結果返回“中間層”,然后“中間層”將它們 返回用戶。MIS管理員將發(fā)現(xiàn)三層模型很有吸引力,因為“中間層”可以進行對訪問的控制并協(xié)同數(shù)據(jù)庫的更新,另一個優(yōu)勢就是如果有一個“中間層”用戶就可以使用一個易用的高層的API,這個API可以由“中間層”進行轉換,轉換成底層的調用。而且,在許多情況下,三層模型可以提供更好的性能。
到目前為止,“中間層”通常還是用C或C++實現(xiàn),以保證其高性能。但隨著優(yōu)化編譯器的引入,將java的字節(jié)碼轉換成高效的機器碼,用java來實現(xiàn)“中間層”將越來越實際。而JDBC是允許從一個java“中間層”訪問數(shù)據(jù)庫的關鍵。
3系統(tǒng)結構
3.1JSP Servlets和JavaBean來構成系統(tǒng)
本節(jié)我們討論用JSP,Servlets,和JavaBean來構成一個系統(tǒng)的途徑。下面有集中不同的結構。每一種都是從上一種發(fā)展過來的,下面的圖表顯示了發(fā)展過程的梗概。
(圖3.1)
當Sun公司開始推廣JSP的時候,很多人認為可以通過Web頁面來請求的企業(yè)級結構將會取代Servlet。雖然JSP是J2EE規(guī)范的關鍵組成部分,它處理請求和應答機制。我們需要更深入的研究JSP和Servlet的關系。
本節(jié)的另一個部分談了JSP代碼的實現(xiàn)細節(jié),如何編譯轉化為Servlet。JSP是建立在Servlet API基礎之上的,;利用了Servlet的語義。理解了這個,提出一個有意思的問題:我們是否不再需要在使用WEB的系統(tǒng)中開發(fā)標準的Servlet?是否有一種方法來結合JSP和Servlet?如果有的話,我們需要把Java代碼放在何處?在JSP的請求過程中,是否涉及到了其他的組件,比如說JavaBean?如果有的話,他們在這個體系結構處與什么位置,扮演什么角色?
明白這些問題是很重要的。雖然JSP技術是基本的Servlet技術的繼承,但是JSP在Servlet的基礎上有所創(chuàng)新,他們可以互相協(xié)作,互相補充對方的不足。
3.1.1體系結構
在討論體系結構之前,有必要提一下兩種使用JSP技術的基本方法
第一種是以頁面為中心(Page-Centric)的(Client/Server)方式,這樣方式是把請求直接發(fā)給JSP頁面。
第二中方式分發(fā)方式(多層結構的)。這種方式以一個JSP或者Servlet做為一個基本的控制器,它又把請求分給JSP頁面或者JavaBean。
首先我們看看Page-Centric的結構。這樣的結構通常都是來客戶機和服務器端都有一個應用程序。最常見的例子是PowerBuilder的例子。Servlet或者JSP在服務器端截獲客戶的請求,直接的訪問數(shù)據(jù)庫等資源。
(圖3.2)
這個結構的優(yōu)點就是編程簡單。允許頁面的設計者根據(jù)資源的狀態(tài)動態(tài)的生成頁面的內容。但是,這樣的結構不適合多個客戶同時訪問資源,這樣同時會有大量的請求需要服務端來處理。每個請求都會建立一個連接,消耗一定的資源。這樣,需要讓這些連接共享一些資源。其中最明顯的例子就是用JDBC連接數(shù)據(jù)庫中用到的連接池(Connection pools)。對結構使用不適當?shù)脑?,會導致JSP中出現(xiàn)大量的JAVA代碼。這雖然對java程序設計人員不會有什么問題,可是大量的代碼分散在JSP中,不利于維護和修改。
這種基本的結構包括通過嵌入在JSP中的代碼直接的向服務器發(fā)請求。這樣有幾個優(yōu)點:從開發(fā)看來,成本很低。所有的JAVA代碼都嵌入到HTML中,復雜性降低了。
(圖3.3)
減少了復雜性,當系統(tǒng)規(guī)模增大的時候,這種結構的缺點也出來了。例如,把太多的應用邏輯放到了JSP頁面中。前面我們提到,利用Servlet或者Bean可以把開發(fā)者角色分的更清楚,提高代碼的可重用性。
本論文所用的是多層結構的JSP,在這種結構下,用一個Servlet或者JSP當作主要的控制器。將所有的客戶請求分配給其它的JSP、JavaBean或者EJB。
在一個多層結構的應用系統(tǒng)中,服務端的被分成好幾層,如圖3.4所示:
(圖3.4)
在本論文中,應用系統(tǒng)是一個多層結構的,中間層的JSP通過其它的對象或者Enterprise JavaBean來訪問后臺資源。EJB服務器和EJB提供訪問訪問資源的方法,支持事務,支持安全管理。目前,J2EE支持這樣的編程。多層結構應用設計的第一步,是明確系統(tǒng)涉及的對象和他們之間的關系。也就是首先要確定對象模式。這一步可以通過Rational Rose之類的工具來實現(xiàn)。通常,對象模式的確定需要特別小心,如果對象太多,會增加系統(tǒng)的復雜性。如果對象模式做的好的話,可以說系統(tǒng)就成功了一半。然后是確定JSP和Servlet,根據(jù)他們扮演的角色的不同,分成兩類。在J2EE中都叫做web組件。
1、?一類(Front-end)是用來處理應用流程的。其中有很多對后臺對象(例如EJB)的調用。他們不處理頁面的表示問題,只是截獲從用戶過來的請求,提供應用系統(tǒng)的一個入口。簡化安全管理,而且易于控制應用系統(tǒng)的狀態(tài)。
2、還有一類(Presentation)是用來生成HTML或者XML的。這些JSP主要的目的就是來動態(tài)的產生頁面內容。
圖3.5表示了這兩類之間的關系,第一類(Front-end)接收一個請求,然后選擇一個合適的Presentation組件來處理。處理之后,或者直接把結果返回給客戶,或者把結果返回給另一個前端組件。
(圖3.5)
有時這種對象模式的劃分是比較困難的。但是,劃分的越清晰,那設計也越清晰。
這種分類有點類似與模式-視圖(Model-View)結構,front-end相當于Model,presentation相當與View。如圖3.6:
(圖3.6)
在這個模式下,JSP用來產生表示層或者執(zhí)行一些操作。Front-end組件當作控制器,處理客戶的請求,生成JavaBean和EJB對象。而在Presentation JSP組件中并沒有處理邏輯過程,只是簡單的從別的對象中得到數(shù)據(jù),然后動態(tài)的插入到模板中。
如果不愿意寫front-end類型的Servlet,也可以寫一些只包括代碼,不包含任何Presentation表示部分的邏輯。不管是寫Servlet還是寫JSP,這樣的結構都把內容和表示分開了,將程序開發(fā)者和頁面設計者比較明確的區(qū)分開來。對系統(tǒng),特別是比較大規(guī)模的系統(tǒng)的設計是比較適合的。
3.2Web 應用程序模型
應用程序是什么,簡單的來說,它是人類客觀世界的問題領域在計算機世界的解決方案。我們生活的客觀世界復雜多樣,計算機世界也是博大精深,怎樣從普遍的意義上來表述應用程序是一個非常有用的課題。應用程序的編程模型,也就是應用程序的拓撲結構,是一門關于應用程序的科學。從事軟件設計、軟件開發(fā)的人員,如果能夠就應用程序的編程模型有足夠的重視,將受益匪淺。
3.2.1應用程序的基本功能單元
??? 組成應用程序的功能代碼及其資源,按照其在應用程序中的功能,可以簡單分解成為三個部分:用戶界面(User Interface),事務邏輯(Business Logic)和數(shù)據(jù)存取(Data Access)。應用程序的基本功能單元如圖3.7所示。
圖3.7、應用程序功能分解
3.2.2多層客戶服務器應用模型
??? 兩層應用程序模型的出現(xiàn)極大的增加了應用程序的靈活性,同時也帶來應用程序可維護性的提高。但是,在兩層應用程序中仍然存在著不便維護的缺點,客戶端的邏輯或是客戶端的嵌入SQL極有可能隨著數(shù)據(jù)庫的改變或是事務邏輯的變化而變化,不得不重新實現(xiàn)并發(fā)布一個新的客戶端,也就是說,這樣的應用程序模型仍然是比較脆弱的。三層或是更多層應用模型的出現(xiàn),解決了這樣的問題。
??? 在三層的應用程序模型中,事務邏輯與用戶界面和數(shù)據(jù)存取明顯的分離出來,將客戶端的用戶界面與服務器端數(shù)據(jù)存取隔離開來,極大的改善了應用程序的可維護性。
??? 注意,雖然最常用的多層客戶/服務器模型是三層模型,但是,現(xiàn)在已經出現(xiàn)了將事務邏輯層和數(shù)據(jù)存取層增加的趨勢。這種更多更細的分層不但提高了系統(tǒng)的維護性能,同時也增加了系統(tǒng)的重用性和與分布式系統(tǒng)概念融合的可能性。
??? 圖3.8所示為一個典型的三層模型:
圖3.8、三層客戶/服務器應用模型
3.2.3分布式系統(tǒng)
??? 在分層的客戶/服務器應用模型中,下一層為上一層提供服務,上一層調用下一層提供的服務,這不利于功能的重用。為了最大限度的發(fā)揮系統(tǒng)的功能,分布式系統(tǒng)打破分層系統(tǒng)中對于客戶和服務器的定義,將應用程序的代碼實現(xiàn)分解為遵循某個標準規(guī)范的對象,這些對象中提供的功能被封裝到接口中。在某個具體的服務邏輯中,一個對象可能充當客戶端的功能,它需要調用另一個對象提供服務;但是,在另一個服務邏輯中,同一個對象可能為另一個對象提供服務,充當服務器的功能。
??? 常見的分布式對象規(guī)范有COM/DCOM、CORBA、Java RMI等。
??? 分布式系統(tǒng)模型如圖3.9所示。
圖3.9、分布式系統(tǒng)模型
3.2.4基于Web的多層應用模型
??? WWW的發(fā)展,使得Internet的應用不再局限于提供一些靜態(tài)的內容、甚至也不滿足于提供一些簡單的動態(tài)內容。傳統(tǒng)以獨立的軟件包形式發(fā)布的一些應用程序,正逐漸被搬上Internet,以出租服務的方式提供給用戶,這就是ASP(Application Service Provider)。由于Web的特點是Internet 上的HTTP,是一種請求應答式的無連接的服務形式,所以這種基于Web的應用程序在體系結構上有其獨特的特點。
圖3.10、基于Web的多層應用模型
4可維護與實現(xiàn)
4.1采用靈活與可維護的設計模式
當您設計建造不同的應用程序時,您時而不時地會碰到相同或者非 常類似的問題域。每次碰到這些問題時您都必須去重新尋找解決方案 。為了節(jié)省時間與精力,如果有一個知識庫,能夠捕獲這樣的具有共 性的問題域與被證明是正確的解決方案,將是非常理想的。 用最簡單的話來說,這樣的通用解決方案就是一個設計模式。這樣 的知識庫,或者說參考處,包含了這些模式,就是設計模式目錄。
模式摸板通常包含一個用來描述模式所代表的意義的名字,緊跟著 的是模式的適用范圍、動機、在實現(xiàn)過程中的問題等等。除了描述問 題與闡明解決方案,模式還解釋在使用本模式的實現(xiàn)過程中可能存在 的問題和后果。使用這樣的模式讓應用程序的設計變得透明。這些模式已經被不同 的開發(fā)者在不同的領域內成功地使用過,所以,一個模式的優(yōu)點和缺 點(也包括實現(xiàn)過程中的問題)都已經事先知道。所有的設計模式都 是可重復使用的,并且在特定的場合中適用。這就給了您靈活性。同 J2EE應用程序有關的設計模式的使用在J2EE平臺技術方面提供了更多 優(yōu)勢來展示了解決方案。
4.1.1模型-視圖-控制器
如果您所建造的這個應用程序只是給單一類型的客戶使用的, 那問題就簡單了。我們可以簡單地將數(shù)據(jù)存取/數(shù)據(jù)修改邏輯與不同的 客戶視圖邏輯混合在一起。但是隨著一個完全互連的無線世界的出現(xiàn), 客戶端的設備從PDA、蜂窩電話到一個功能強大的桌面系統(tǒng)上的瀏覽器 都有,這還不包括其他的傳統(tǒng)設備。在這種情況下,將數(shù)據(jù)存取與視 圖混合在一起來作為解決方案,將會有很多問題,這是因為:
§ 您必須開發(fā)這個應用程序的不同版本,以便適應與支持各種不同 的客戶需要
§ 由于視圖的代碼與數(shù)據(jù)存取/修改的代碼糾纏在一起,重復的數(shù) 據(jù)存取/修改代碼散步在各處,這就使得應用程序幾乎是不可維護的。
§ 開發(fā)生命周期被不必要地擴展了
為了找到這個問題的解決方案,請注意以下幾點:
§ 不論客戶類型如何,被存取與顯示的數(shù)據(jù)必須來自同一個企業(yè)級 的數(shù)據(jù)源。
§ 所有的客戶必須能夠對數(shù)據(jù)源進行修改。
§ 不論是修改一個客戶類型,還是修改數(shù)據(jù)存取/修改邏輯,都不應 該影響到應用程序的其他組件。
我們需要開發(fā)出松散耦合的應用程序的解決方案。采用模型-視圖-控制器(MVC)結構。MVC已經被非常有效地應用在GUI類型的 應用程序的設計上。通過在J2EE應用程序上采用MVC結構,您可以將數(shù)據(jù) 存取邏輯與數(shù)據(jù)表現(xiàn)邏輯分別開來。您也可以建造一個靈活的并且是很 容易擴充的控制器來控制應用程序的整個流程。下圖展示了MVC結構。
圖4.1
如下所述,MVC結構可以映射到多層的企業(yè)級J2EE應用程序:
§ 所有的企業(yè)級數(shù)據(jù)與用于處理數(shù)據(jù)的事物邏輯都能用這個模型來 表示。
§ 視圖可以通過這個模型存取數(shù)據(jù),然后決定如何將數(shù)據(jù)表達給客 戶。當模型改變時,視圖必須確認給用戶所表達的內容也跟著改變。
§ 控制器可以與視圖交互,并且將客戶的行為轉換為模型可以理解 與執(zhí)行的行為??刂破饕哺鶕?jù)最新的客戶行為與相關的模型行為來決 定下一個要被顯示的視圖是什么。
將上述的邏輯應用到應用程序中,您將這樣建造應用程序:
§ 應用程序的事務邏輯由組成MVC結構中的模型的EJB來代表。模型 對來自控制器的要求作出反映,并存取/修改相應的數(shù)據(jù)。
§ 應用程序界面的不同屏組成MVC結構中的視圖。當模型改變時,視 圖自動更新。
§ 應用程序的控制器是一些對象的集合,這些對象接收用戶的行為, 并且將其轉換為模型可理解的請求,一旦模型完成了對請求的處理, 就決定下一個要顯示在屏幕上的內容是什么。
4.2要求
這里要實現(xiàn)一個數(shù)據(jù)庫瀏覽器應用程序:用于顯示一個關系數(shù)據(jù)庫,通過它可以查看數(shù)據(jù)庫中的任何表,并顯示經過多種不同格式查詢后的結果。
Web界面的要求是允許用戶瀏覽相關數(shù)據(jù)庫中的內容.該界面使用戶可以通過指定一個JDBC驅動器或URL來與一個數(shù)據(jù)庫連接。接著,應用程序會允許用戶瀏覽數(shù)據(jù)庫中定義的所有表,并且可以選擇任何一個表對其數(shù)據(jù)進行處理。同樣,用戶還可以輸入SQL查詢語句并查看這些查詢操作產生的列表數(shù)據(jù)。在用戶使用會話的任何時間內,必須確保用戶可以很容易地斷開數(shù)據(jù)庫,并連接到另一個數(shù)據(jù)庫上。
用戶可以自己選擇瀏覽數(shù)據(jù)的方式。在開發(fā)第一階段,要求具備以下三個視圖頁面:
1、一個以清晰只讀格式顯示表格內容的列表視圖
2、一個允許數(shù)據(jù)被剪切并被拈貼到電子表格或文本文件的CSV(以逗號分開的變量)視圖
3、一個可編輯的視圖,允許對任何一行數(shù)據(jù)加以更新
剛開始時,程序的實用性將比表達方式更加重要。但是,有一點是最基本的,既程序應該在不需要采用大量技術的情況下,就可以很容易改變JSP外觀。
將來很可能會需要使用其它視圖:一些XML視圖以及一個微軟Excel格式的視圖,后者可以使用戶不必在自己的瀏覽器里瀏覽,而直接下載所需內容。每個視圖都必須允許用戶切換到表示相同數(shù)據(jù)的另一視圖中。在選定一個新視圖前,當前視圖應該是默認視圖。
在隨后的開發(fā)過程中,可能還需要使用一個String小應用程序來實現(xiàn)快速響應功能,應此一定不要將數(shù)據(jù)對象與JSP表示聯(lián)系在一起。
在系統(tǒng)開發(fā)第一階段中,無須考慮用戶會話中的個性化信息,在隨后的開發(fā)階段中,還會對這一功能進行設計。
另一項需要考慮的長遠目標,是應用程序除了要支持關系數(shù)據(jù)庫外,還應支持其他數(shù)據(jù)源。此時,可能需要包括那些使用JNDI來訪問的目錄。
接下來要介紹這些功能。
首次訪問應用程序時,將要求用戶提供有關數(shù)據(jù)庫連接的地址信息,如圖4.2所示。
圖4.2
用戶一旦提交了有效的數(shù)據(jù),系統(tǒng)將要求用戶在瀏覽實際數(shù)據(jù)之前,選擇一個表格或輸入一個SQL查詢語句,如圖4.3所示。
圖4.3
在選擇了響應的表格之后,用戶將可以在數(shù)據(jù)的不同視圖之間進行切換,并且可以隨時選擇不同的表格或查詢結果。下面是一個典型的數(shù)據(jù)視圖,其中包含了整個應用程序內的導航鏈接,如圖4.4所示。
圖4.4
當用戶瀏覽完所需的數(shù)據(jù)庫時,可以退出系統(tǒng)。此時,所有打開的資源都將被關閉,并且產生一個確認業(yè)面。
4.3設計
開發(fā)周期的第一部是,JSP/JAVA程序員將要求商家預排所有的頁面:與前面顯示的視圖相似,但要更詳細一些。在進行預排工作中,還應確定所需的錯誤處理操作。這樣做,可以使開發(fā)員在項目早期的設計階段對此有一個大致的概念。例如,實際應用程序總是存在風險的,開發(fā)程序中功能最為復雜的部分會有多大難度?性能是否會令人滿意?早期開發(fā)概念模型使開發(fā)員可以在開發(fā)周期的初級階段對這些風險加以估量和解決,在交互式的開發(fā)過程中,這是非常重要的一步。
為了更加全面的理解網頁流程,可以使用一個狀態(tài)圖,它是理解和處理網絡應用程序行為的一個有效途徑(注意狀態(tài)圖不同于網絡流程圖。應用程序的狀態(tài)轉換不一定與用戶會話的網頁流程相對應)。下面這個狀態(tài)圖顯示了數(shù)據(jù)庫瀏覽器轉換過程中的狀態(tài)的以及各個狀態(tài)間的合法轉換,如圖4.5所示。
圖4.5
與程序員同時工作的網絡設計員將制作出網頁的HTML模板。一旦網頁流程確定下來并正確實施,這些HTML模板在添加了必要的JSP代碼之后就可以實現(xiàn)動態(tài)功能了。至關重要的是,最終形成的JSP中應盡量少的包含處理邏輯。這樣一來,對數(shù)據(jù)的解釋做進一步修改的網頁設計人員才能夠理解它們。
技術設計的第一步重要工作是確認應用程序對象。建立應用程序時,可能需要一個數(shù)據(jù)源對象,一個或幾個為圖形用戶界面提供這一對象的視圖,以及一些顯示數(shù)據(jù)的JSP。JSP只是中間層用來顯示數(shù)據(jù)的視圖,JSP不能直接訪問系統(tǒng)數(shù)據(jù)對象。
設計時必須縱向查看應用程序結構,并決定每個組件應屬于哪一層。數(shù)據(jù)源目標很明顯屬于企業(yè)源抽象層。除了所需的網頁流程,這應用程序中幾乎就沒有什么其他業(yè)務邏輯了,應此,業(yè)務層中的實現(xiàn)并不重要。然而,這并不是說JSP中擁有大部分應用程序業(yè)務邏輯。非特定用戶界面顯示層的、是必須的。此外,還應了解今后可能需要就使用Swing接口,以及一些JSP無法顯示的數(shù)據(jù)視圖(如Excel)。該層不僅要為JSP提供數(shù)據(jù),還要為任何圖形用戶界面提供服務。它將包含大量系統(tǒng)數(shù)據(jù)模型。
程序會使用views標志庫,當需要時,可以通過它來使用Swing數(shù)據(jù)模型,該標志庫將在隨后介紹。使用這一技術,無須使用大量腳本語言既可生成動態(tài)標志,并且確保系統(tǒng)的絕大部分實現(xiàn)代碼可以獨立JSP技術。
會話bean將保存用戶的個性化信息。它還將保存每位用戶所需數(shù)據(jù)模板的備份。由于會話bean可以保存隨會話狀態(tài)改變而改變的數(shù)據(jù)模板,所以無須對網頁bean做過多的要求(通常,一個網頁bean可以容納每個視圖的模板)。這反映一個事實,既所有應用視圖顯示的數(shù)據(jù)結構是相同的,應此該結構應該屬于應用程序,而不是單獨屬于任何一頁。
由于存在添加視圖的可能性,所以使用請求控制器模式可以最大限度地提高編寫程序的靈活性。這意味著當需要增加視圖時,JSP中無需在包含網頁流程業(yè)務邏輯。
與前面介紹請求控制器模式時使用的示例不同,實現(xiàn)本程序時,使用JSP控制器(這樣做,更容易實現(xiàn)和部署應用程序)。本程序還使用了一個特殊的action參數(shù)(而不是映射的URL)來為每一請求指定處理程序??刂破鞲鶕?jù)指令參數(shù)值動態(tài)的載入處理程序類別,以確保應用程序的功能可以通過增加新的請求處理程序得到擴展。
4.4實現(xiàn)
由于表示方式與數(shù)據(jù)源分離,所以可以分別設計表示方式(JSP和支持類)和數(shù)據(jù)源。
4.4.1表示層-視圖標志庫
視圖(view)標志庫視圖提供了幾套自定義標志,用于顯示存儲在Swing數(shù)據(jù)模型中的數(shù)據(jù)。
其中使用的標志有:
〈view:jspTable〉—保存TableModel,以便于子標志使用。獲取標題打開與關閉的屬性。
〈views:headingOpen〉—配置TableModel標題的打開屬性。
〈views:headingClose〉—配置TableModel標題的關閉屬性。
〈views:headingCell〉重復處理表格標題,并輸出相應信息。
〈views:rows〉—重復處理表格中的所有行。
〈views:rowOpen〉—配置RowsTag的行打開屬性。
〈views:rowClose〉—配置RowsTag的行關閉屬性。
〈views:cell〉—模擬HeaderTag重復處理表格中的行。
表示層-ui和ui.requesthandlers軟件包
表示層的核心是請求控制器,controller.jsp。它可以用來創(chuàng)建RequestController會話bean的一個實例,該實例可以實現(xiàn)頁面流程邏輯,并可以推動控制器定義的JSP視圖對請求做出響應。是入口點。
4.4.2邏輯
RequestController類將實現(xiàn)應用程序的所有網頁流程。
RequestController.java
RequestController本身的任務是檢查參數(shù),并且調用適當?shù)腞equestController實例來指定所需的JSP視圖,并將這一視圖的URL返回到controller.jsp中。通過在行為參數(shù)值和值類名間建立映射,RequestController可以指定所需的RequestHandler的類型。例如,DBConnect(應用程序首先要完成的操作)被映射到一個名為ui.requestthandlers.DBConnect的Java類上,后者必須實現(xiàn)RequestHandler接口。出于效率原因,RequestController類將把實例化后的請求處理器保存到一個散列表中,以便將來可以利用它們來處理同一類型的請求。這樣做可以確保映射機制的使用不會過多地降低應用程序的性能。
如果行為參數(shù)沒有被傳遞到該網頁中將向用戶顯示注冊頁面。
所有請求都屬于RequestController類,該類負責實例化系統(tǒng)所需的bean,并根據(jù)需要,使用映射機制來實例化所需的請求處理器。
RequestController.getNextPage()
getNextPage()方法可以將所有發(fā)往應用程序的請求全部發(fā)送出去。該方法將對請求信息進行處理,更新會話,并返回最終所得JSP視圖的URL。該方法首先檢查行為參數(shù)中是否包含一個值,如果沒有,將向用戶顯示注冊網頁。否則,該程序將實例化與指令相連的處理器。如果沒有與行為參數(shù)相關的處理器,將產生一個BrowserException異常。最后,如果在使用CheckSessionBeanIsAavilable()方法后,還是沒有找到于之相連的處理器,那么將創(chuàng)建一個會話bean以結束操作流程,并返回處理器所選視圖的URL。
RequestController.getHandlerInstance()
正如前面所說的,getHandlerInstance()在散列表中存儲了各類的實例。
RequestController.checkDessionBeanIsAvailable()
CheckSessionBeanIsAvailable()將對用戶會話bean進行檢查,并將其返回。如果找不到將創(chuàng)建一個新的bean實例。
RequestHandler接口
RequestHandler接口十分簡單,每個行為類都必須實現(xiàn)該接口。
BrowseSession.java
介紹RequestHandler接口的實現(xiàn)前,首先介紹它們如何與應用程序的JSP視圖通信??梢酝ㄟ^會話bean來實現(xiàn)通信功能,它容納了當前的數(shù)據(jù)源和會話信息(任何當前表格的選擇,用戶鍵入的SQL查詢歷史,以及當前的JSP視圖)。每個JSP視圖都將聲明這個會話bean,但是該會話bean只能在一個地方被實例化,既在RequestController類中。雖然會話bean與表達方式無關,但是由于它可以顯示JSP視圖使用的模型。
最后幾種方法構成該類的isXXX getXXX setXXX方法。其他一些方法則有valueBound() valueUnbound()以及用來實現(xiàn)jspstule.NameValueModel的內部類QueryNameValueModel,jspstyle.NameValueModel可用于顯示查詢歷史。
4.4.3應用程序預排
首先返回進入應用程序的第一頁,注冊網頁。如圖4.6:
圖4.6
本頁是login.html,它包含一個表單,該表單中除了包含驅動程序名稱,url,登陸名和密碼字段外,還包含一個提供了DBConnect值的隱藏行為字段。RequestContrller類將使用該值將用戶指定到ui.requestthandlers.DBConnect RequestHandler的實現(xiàn)代碼中:
DBConnect.java
DBConnect必須嘗試實例化一個數(shù)據(jù)對象,并且如果成功,將返回另一個字段的url,使用戶可以根據(jù)需要選擇查看的表,或鍵入查詢操作。
如果連接有效,用戶可以看到一個網頁,此時,可以對數(shù)據(jù)庫中的表格進行選擇如圖4.7:
圖4.7
chooseTable.jsp
該頁是動態(tài)的,由chooseTable.jsp實現(xiàn)。既然需要從應用程序的視圖中選擇一個表,那么可以找出實際所需的表單,然后將它放入一個包含jsp中。
這個包含jsp,_chooseTable.jspf,可以生成表單。它將接收一個boolean變量作為參數(shù),該變量可用于定義表的類型。DBCconnect請求處理器會把來自數(shù)據(jù)源的數(shù)據(jù)添加到會話對象中。
數(shù)據(jù)對象將顯示它們所含表格的NameValueModel,可以使用標志來顯示這些數(shù)據(jù)。它是一個主體標志,它將根據(jù)內容的大小和內容模型具有的XML屬性重復的處理主體標志中的內容。
會話bean將用于顯示另一個名-值模型,如果支持的SQL會話bean得知數(shù)據(jù)源,它就可以用來包含先前的SOL查詢歷史。一個單獨的表單將被用于該顯示模型,并允許用戶進行查詢。
_chooseTable.jspf
ChooseTable.java
ChooseTable隱藏的指令字段將啟動RequestController類,該類將使用ChooseTable請求處理器類處理那些由于提交該表達而產生的請求。
用戶在選擇了一個表格或鍵入一個SQL查詢語句后,將看到數(shù)據(jù)表形式的默認視圖。如圖4.8:
圖4.8
這一網頁由tableview.jsp產生的。這一JSP視圖通過調用會話bean的getTableModel()方法來查找應該顯示在表格中的數(shù)據(jù)。此時,ChooseTable請求處理器將調用會話bean 的setTableIndex()方法將適當?shù)谋砀衲P捅恢糜跁抌ean中。
由于要求每個視圖在用戶選擇修改前保持其默認狀態(tài),所以,該JSP視圖會話bean的setTableViewJsp()方法,并使用其Servlet路徑,以確保視圖處于默認狀態(tài)。
tableView.jsp
為實現(xiàn)這一網頁,還應使用另一網頁,_chooseMode.jspf。它提供了指向其它可選視圖的連接。通過檢查使用它時所在的網頁名稱,就可以排除目前的視圖。
_chooseMode.jspf
CSV視圖
考慮另一個視圖,為了讓用戶可以將數(shù)據(jù)剪切和拈帖數(shù)據(jù)到其它應用程序中。如圖4.9所示:
圖4.9
csvView.jsp
該視圖同樣使用了標志。
編輯視圖
它允許用戶對表格中的每行數(shù)據(jù)加以更新。工作方法如圖4.10所示:
圖4.10
標志再一次生成所需的HTML,雖然代碼更加復雜??梢韵虮砀衲P头祷氐臄?shù)據(jù)值添加另一標題字段(Update values)和列,來測試該表格的靈活性。該表格的每一行都是一個表單,同時請求控制器(Update Table)具有常規(guī)隱藏行為值,此外還需要提供包含用戶希望更新行號碼的隱藏行為值。而另外一列將用于放置每行的提交按鈕。
editable.jsp
還需一個確認網頁(updateOK.jsp)一個錯誤處理(systemError.jsp)。
錯誤處理
systemError.jsp圖4.11顯示了更新操作后的錯誤網頁
圖4.11
其他RequestHandlers
現(xiàn)在看看實現(xiàn)其他視圖時所需的RequestHandlers。注意,應用程序運行SQL查詢后所得輸出結果如圖4.12:
該功能由RunQuery請求處理器實現(xiàn)
RunQuery.java
RunQuery需要檢驗兩個參數(shù):query(用戶鍵入新查詢操作后產生的)和oldquery,當用戶從查詢輸入文本框右面的下拉框中選中一個
收藏
編號:30550163
類型:共享資源
大?。?span id="iztpi5c" class="font-tahoma">1.12MB
格式:RAR
上傳時間:2021-10-10
20
積分
- 關 鍵 詞:
-
jsp
基于
Web
維護
數(shù)據(jù)庫
瀏覽器
源代碼
論文
答辯
PPT
- 資源描述:
-
jsp基于Web的可維護的數(shù)據(jù)庫瀏覽器(源代碼+論文+答辯PPT),jsp,基于,Web,維護,數(shù)據(jù)庫,瀏覽器,源代碼,論文,答辯,PPT
展開閱讀全文
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。