熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

利用Java服務程序開發三層次數據庫應用程序

2013-11-23 19:02:34  來源: Java核心技術 

  本文是有關Java服務程序的三組系列文章之二上個月( JDJ期)我向大家介紹了Java服務程序技術以及如何將您現有的CGI程序移植到Java服務程序的方法本文將不再重復以前介紹的內容我先假定大家對Java Servlet API (應用程序設計接口)和Java數據庫連接API的基本知識已經比較熟悉在本文中我將介紹如何利用Java服務程序(Servlet)和Java數據庫連接(JDBC) 技術創建三層次數據庫應用程序您將了解每一層的創建方法以及采用數據庫連接來創建Java服務程序所使用的技術
  挑 戰
  某著名公眾演說家對參加她舉辦的因特網講座的學生進行跟蹤調查每次講座結束後她都會與感興趣的學生交換名片然後把學生數據輸入她的數據庫程序她並非把每張名片的數據依次輸入計算機而是借助萬維網應用程序來完成這項工作在每次舉辦講座時她都在若干萬維網終端上設立萬維網應用程序每位學生都在萬維網終端登記輸入各自的姓名所在公司電子郵件(email)地址課程名稱和對課程的期望萬維網應用程序還可顯示所有學生的最新名單
  三層解決方案
  這個萬維網應用程序由三部分組成浏覽器服務程序中間件和數據庫服務程序這三層如圖所示
   
  圖 三層次解決方案
  第一層使用浏覽器可充分發揮這一通用客戶端巨大的用戶安裝數的優勢用一個HTML表格作為用戶輸入界面而數據庫查詢結果用HTML頁面返回采用HTML頁面作為用 戶輸入和數據顯示的界面可降低對客戶端浏覽器版本的要求這種萬維網應用程序並不要求必須采用具有最新JDK修補程序的Java使能的浏覽器
  第二層采用運行Java服務程序的Web服務器Java服務程序可訪問 菘猓⒎禱亓杏惺莸腍TML頁面請注意Java服務程序不只運行於Sun Microsystems公司的Java Web Server上您也可在下列服務器上使用Java服務程序Microsoft IISNetscape FastTrack Server及Enterprise Server以及O?Reilly公司的WebSiteProfessional在Live Software公司的JRun產品()上也可實現Java服務程序的功能Sun公司的Java Server主頁上列有支持Java服務程序的Web服務器列表
  第三層是後端數據庫服務器只要計算機安裝了JDBC驅動程序那麼Java服務程序就能從數據庫中提取數據在本文所討論的情形裡公眾演說家的數據庫是MSAccess 所以我們可以使用與Java Development Kit 版或更高版本捆綁在一起的JDBCODBC驅動程序
  應用程序的交互過程
  您可以看到應用程序被劃分成三個不同的層次表示應用程序不同層次之間的交互過程
   
  圖 應用程序的交互過程
  下面介紹交互過程的每個步驟 第一步 用戶將信息輸入HTML表格表格的數據被傳輸到在Web服務器上運行的Java服務程序中
  第二步 Java服務程序對表格的數據進行分析並創建一條SQL語句然後通過Java數據庫接口(JDBC)將該SQL語句傳輸到數據庫服務器
  第三步 數據庫服務器執行該SQL語句並將一組結果返回給Java服務程序
  第四步 Java服務程序對這組結果進行處理並用其中的數據創建一個HTML頁面隨後該HTML頁面被返回到用戶的Web浏覽器
  對數據庫模式進行分析
  本文的公眾演說家正在將學生信息存入MS Access數據庫該數據庫包括一個名為Students的數據表定義了數據字段
   
   表 數據庫結構
  設計Web浏覽器界面
  浏覽器界面包括一個主菜單頁面用戶使用該頁面可選擇學生注冊或顯示數據庫中的學生列表提供了主菜單的HTML代碼
  學生注冊表
  學生使用HTML表格進行注冊該表格采集姓名電子函件地址公司名稱和其它與課程相關的信息為學生注冊表
   
  圖 學生登記注冊表
  開發服務程序中間件
  服務程序中間件封裝了應用程序的業務邏輯服務程序對表格中的數據進行分析並構造一條SQL語句隨後該SQL語句被傳送到數據庫服務器在SQL語句執行完畢後數據庫服務器將結果集返回給服務程序至此服務程序對結果集進行處理並為用戶構造一個HTML頁面
  被創建的服務程序稱作StudentDBServletStudentDBServlet有執行下列功能的方法初始化對請求的服務對學生數據的顯示和對學生的登記下面詳細介紹這些功能
  服務程序的初始化
  在服務程序的生命周期內當服務程序第一次被調用時首先調用init()方法列表為init()方法的代碼清單
  StudentDBServlet服務程序來說一個數據庫連接被打開並創建用於顯示學生列表或進行學記的預先准備好的SQL語句(Prepared Statement)這個數據庫連接在服務程序的整個生命周期內都將保持打開的狀態根據用戶的設計用戶可以為每個SQL查詢打開或關閉一個連接但在此應用中數據庫連接僅打開一次
  對用戶請求提供服務
  每次服務程序被調用時service()方法會被調用service()方法是服務程序的主要入口點(Entry Point)但是如果這是服務程序第一次被調用那麼就會先調用init()方法然後再調用service()方法
  本應用中的service()方法系用來將請求轉移給相應的處理方法學生登記表中有一個名為Register的隱含字段service()方法核對Register字段的值如果該值非空(null)則registerStudent()方法就被調用如果HTML頁面不存在該字段則返回一個空值(null)如果返回空值(null)則會執行displayStudent()方法
   顯示學生名單
  displayStudent()方法包括訪問數據庫和顯示學生名單的業務邏輯這是通過使用輔助的Student (學生)類實現的列表 給出了Student類的代碼
  Student類有為每位學生保持信息的數據成員Student類還有能根據表格數據或一組數據庫結果創建對象的構造程序下列語句表示學生的姓是如何從表格數據中獲取 的
  lastName = requestgetParameter (LastName);
  請求對象是HttpServletRequest的一個實例請求對象包含表格數據表格數據可通過調用getParameter( )方法並提供表格字段的名稱獲得學生注冊表中包含有一個LastName字段 (請參考我以前發表在JDJ的文章其中詳細討論了服務程序如何獲取表格數據)
  Student類有存取其數據成員並以字符串方式表示其數據的方法列表中包括了Student類的方法代碼清單toString()方法以普通的字符串格式返回數據成員toWebString( )方法以HTML無序列表的格式返回數據toTableString( )方法以HTML表格的格式返回數據這些方法被用來創建學生名單
  構造一個HTML頁面後就創建了學生名單在列表中的displayStudents()方法中創建了HTML頁面的標題隨後再創建顯示下列信息的表格標題
  服務程序向數據庫服務器發出請求獲得學生的名單在init()方法中准備了下列SQL語句 select * from Students order by LastName;
  SQL語句將根據姓氏並按照字母順序返回學生的名單這組結果被用來創建HTML表格的主體通過創建while循環語句處理這組結果的每個記錄該while循環語句的 部分代碼如下
  int rowNumber = ; while (dataResultSetnext( ) ) { aStudent = new Student(dataResultSet); tableBody += aStudenttoTableString(rowNumber); rowNumber++; }
  每個記錄都被用來創建一個新的Student對象toTableString()方法被調用以獲得學生數據的字符串表示前面談到toTableString( )方法以HTML表格的格式返回數據
  在構造了表格主體後結果集就被關閉在主頁的底部還提供了至主菜單頁面的浏覽鏈接
  在服務程序方面進行了大量的處理工作但我們到現在還沒有結束必須將HTML頁面返回給Web浏覽器這是通過在響應對象上打開一個輸出流實現的響應對象是HttpServletResponse的一個實例將HTML頁面返回給用戶的語句如下
  PrintWriter outputToBrowser = new PrintWriter(responsegetOutputStream()); responsesetContentType(text/html) ; outputToBrowserprintln(htmlPage); outputToBrowserclose( );
  為HTML設置了內容類型(contenttype)後用println()方法將htmlPage串返回給浏覽器為StudentDBSServlet所返回的學生名單樣本
  
  圖 學生名單
  學生的登記處理
  registerStudent()方法根據HTML表格數據創建一個新的Student對象這個Student對象被用來作為在init( )方法已經准備好的SQL語句中的參數下列語句表示參數是如何設置的
  registerStatementsetString(LAST_NAME_POSITION aStudentgetLastName())
  所有參數設置完畢後就執行SQL語句該語句執行完畢後新的學生數據就成功地插入到數據庫中了
  此外還為用戶構造了確認頁面確認頁面包含成功地插入數據庫的數據列表StudenttoWebString()方法被調用為無序列表提供一個HTML字符串
  合
  至此應用程序的全部三層均已構造完畢用戶界面由在浏覽器中顯示的HTML頁面組成對浏覽器的唯一要求就是必須能顯示HTML表格Microsoft (微軟)公司和Netscape(網景)公司所提供的兩種主要浏覽器均可輕松地滿足這一要求所以能保證Web應用程序對浏覽器是友好的
  後端數據庫是采用Microsoft Access創建的但只要存在相應的JDBC驅動程序就可使用任何一種數據庫在我們所討論的情形裡
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26178.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.