国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

利用Java服務(wù)程序開發(fā)三層次數(shù)據(jù)庫應(yīng)用程序

2019-11-18 12:12:35
字體:
供稿:網(wǎng)友

  本文是有關(guān)java服務(wù)程序的三組系列文章之二。上個(gè)月( JDJ,第3卷,第1期),我向大家介紹了Java服務(wù)程序技術(shù),以及如何將您現(xiàn)有的CGI程序移植到Java服務(wù)程序的方法。本文將不再重復(fù)以前介紹的內(nèi)容。我先假定大家對(duì)Java Servlet API (應(yīng)用程序設(shè)計(jì)接口)和Java數(shù)據(jù)庫連接API的基本知識(shí)已經(jīng)比較熟悉。在本文中,我將介紹如何利用Java服務(wù)程序(Servlet)和Java數(shù)據(jù)庫連接(JDBC) 技術(shù)創(chuàng)建三層次數(shù)據(jù)庫應(yīng)用程序。您將了解每一層的創(chuàng)建方法以及采用數(shù)據(jù)庫連接來創(chuàng)建Java服務(wù)程序所使用的技術(shù)。
  挑 戰(zhàn)
  某聞名公眾演說家對(duì)參加她舉辦的因特網(wǎng)講座的學(xué)生進(jìn)行跟蹤調(diào)查。每次講座結(jié)束后,她都會(huì)與感愛好的學(xué)生交換名片。然后,把學(xué)生數(shù)據(jù)輸入她的數(shù)據(jù)庫程序。她并非把每張名片的數(shù)據(jù)依次輸入計(jì)算機(jī),而是借助萬維網(wǎng)應(yīng)用程序來完成這項(xiàng)工作。在每次舉辦講座時(shí),她都在若干萬維網(wǎng)終端上設(shè)立萬維網(wǎng)應(yīng)用程序。每位學(xué)生都在萬維網(wǎng)終端登記,輸入各自的姓名、所在公司、電子郵件(e-mail)地址、課程名稱和對(duì)課程的期望。萬維網(wǎng)應(yīng)用程序還可顯示所有學(xué)生的最新名單。
  三層解決方案
  這個(gè)萬維網(wǎng)應(yīng)用程序由三部分組成:瀏覽器、服務(wù)程序中間件和數(shù)據(jù)庫服務(wù)程序。這三層如圖1所示。
   利用Java服務(wù)程序開發(fā)三層次數(shù)據(jù)庫應(yīng)用程序(圖一)
  圖1 三層次解決方案
  第一層使用瀏覽器,可充分發(fā)揮這一通用客戶端巨大的用戶安裝數(shù)的優(yōu)勢。用一個(gè)Html表格作為用戶輸入界面,而數(shù)據(jù)庫查詢結(jié)果用HTML頁面返回。采用HTML頁面作為用 戶輸入和數(shù)據(jù)顯示的界面可降低對(duì)客戶端瀏覽器版本的要求。這種萬維網(wǎng)應(yīng)用程序并不要求必須采用具有最新JDK修補(bǔ)程序的Java使能的瀏覽器。
  第二層采用運(yùn)行Java服務(wù)程序的Web服務(wù)器。Java服務(wù)程序可訪問 菘猓⒎禱亓杏惺蕕腍TML頁面。請(qǐng)注重,Java服務(wù)程序不只運(yùn)行于Sun Microsystems公司的Java Web Server上,您也可在下列服務(wù)器上使用Java服務(wù)程序:Microsoft IIS、Netscape FastTrack Server及EnterPRise Server以及O?Reilly公司的WebSiteProfessional。在Live Software公司的JRun產(chǎn)品(http://www.livesoftware.com)上也可實(shí)現(xiàn)Java服務(wù)程序的功能。Sun公司的Java Server主頁http://jserv.javasoft.com上列有支持Java服務(wù)程序的Web服務(wù)器列表。
  第三層是后端數(shù)據(jù)庫服務(wù)器。只要計(jì)算機(jī)安裝了JDBC驅(qū)動(dòng)程序,那么Java服務(wù)程序就能從數(shù)據(jù)庫中提取數(shù)據(jù)。在本文所討論的情形里,公眾演說家的數(shù)據(jù)庫是MS-access, 所以,我們可以使用與Java Development Kit 1.1版或更高版本捆綁在一起的JDBC-ODBC驅(qū)動(dòng)程序。
  應(yīng)用程序的交互過程
  您可以看到,應(yīng)用程序被劃分成三個(gè)不同的層次。圖2表示應(yīng)用程序不同層次之間的交互過程。
   利用Java服務(wù)程序開發(fā)三層次數(shù)據(jù)庫應(yīng)用程序(圖二)
  圖2 應(yīng)用程序的交互過程
  下面介紹交互過程的每個(gè)步驟。 第一步: 用戶將信息輸入HTML表格。表格的數(shù)據(jù)被傳輸?shù)皆赪eb服務(wù)器上運(yùn)行的Java服務(wù)程序中。
  第二步: Java服務(wù)程序?qū)Ρ砀竦臄?shù)據(jù)進(jìn)行分析,并創(chuàng)建一條SQL語句。然后,通過Java數(shù)據(jù)庫接口(JDBC)將該SQL語句傳輸?shù)綌?shù)據(jù)庫服務(wù)器。
  第三步: 數(shù)據(jù)庫服務(wù)器執(zhí)行該SQL語句,并將一組結(jié)果返回給Java服務(wù)程序。
  第四步: Java服務(wù)程序?qū)@組結(jié)果進(jìn)行處理,并用其中的數(shù)據(jù)創(chuàng)建一個(gè)HTML頁面。隨后,該HTML頁面被返回到用戶的Web瀏覽器。
  對(duì)數(shù)據(jù)庫模式進(jìn)行分析
  本文的公眾演說家正在將學(xué)生信息存入MS Access數(shù)據(jù)庫。該數(shù)據(jù)庫包括一個(gè)名為"Students"的數(shù)據(jù)表。表1定義了數(shù)據(jù)字段
   利用Java服務(wù)程序開發(fā)三層次數(shù)據(jù)庫應(yīng)用程序(圖三)
   表1 數(shù)據(jù)庫結(jié)構(gòu)
  設(shè)計(jì)Web瀏覽器界面
  瀏覽器界面包括一個(gè)主菜單頁面。用戶使用該頁面可選擇學(xué)生注冊(cè),或顯示數(shù)據(jù)庫中的學(xué)生。列表1提供了主菜單的HTML代碼。
  學(xué)生注冊(cè)表
  學(xué)生使用HTML表格進(jìn)行注冊(cè)。該表格采集姓名、電子函件地址、公司名稱和其它與課程相關(guān)的信息。圖3為學(xué)生注冊(cè)表。
   利用Java服務(wù)程序開發(fā)三層次數(shù)據(jù)庫應(yīng)用程序(圖四)
  圖3 學(xué)生登記注冊(cè)表
  開發(fā)服務(wù)程序中間件
  服務(wù)程序中間件封裝了應(yīng)用程序的業(yè)務(wù)邏輯。服務(wù)程序?qū)Ρ砀裰械臄?shù)據(jù)進(jìn)行分析,并構(gòu)造一條SQL語句。隨后,該SQL語句被傳送到數(shù)據(jù)庫服務(wù)器。在SQL語句執(zhí)行完畢后,數(shù)據(jù)庫服務(wù)器將結(jié)果集返回給服務(wù)程序。至此,服務(wù)程序?qū)Y(jié)果集進(jìn)行處理,并為用戶構(gòu)造一個(gè)HTML頁面。
  被創(chuàng)建的服務(wù)程序稱作StudentDBServlet。StudentDBServlet有執(zhí)行下列功能的方法:初始化、對(duì)請(qǐng)求的服務(wù)、對(duì)學(xué)生數(shù)據(jù)的顯示和對(duì)學(xué)生的登記。下面具體介紹這些功能。
  服務(wù)程序的初始化
  在服務(wù)程序的生命周期內(nèi),當(dāng)服務(wù)程序第一次被調(diào)用時(shí),首先調(diào)用init()方法。列表3為init()方法的代碼清單。
  StudentDBServlet服務(wù)程序來說,一個(gè)數(shù)據(jù)庫連接被打開,并創(chuàng)建用于顯示學(xué)生列表或進(jìn)行學(xué)記的預(yù)先預(yù)備好的SQL語句(Prepared Statement)。這個(gè)數(shù)據(jù)庫連接在服務(wù)程序的整個(gè)生命周期內(nèi)都將保持打開的狀態(tài)。根據(jù)用戶的設(shè)計(jì),用戶可以為每個(gè)SQL查詢打開或關(guān)閉一個(gè)連接。但在此應(yīng)用中,數(shù)據(jù)庫連接僅打開一次。
  對(duì)用戶請(qǐng)求提供服務(wù)
  每次服務(wù)程序被調(diào)用時(shí),service()方法會(huì)被調(diào)用。service()方法是服務(wù)程序的主要入口點(diǎn)(Entry Point)。但是,假如這是服務(wù)程序第一次被調(diào)用,那么就會(huì)先調(diào)用init()方法,然后再調(diào)用service()方法。
  本應(yīng)用中的service()方法系用來將請(qǐng)求轉(zhuǎn)移給相應(yīng)的處理方法。學(xué)生登記表中有一個(gè)名為“Register”的隱含字段。service()方法核對(duì)“Register”字段的值。假如該值非空(null),則registerStudent()方法就被調(diào)用。假如HTML頁面不存在該字段,則返回一個(gè)空值(null)。假如返回空值(null),則會(huì)執(zhí)行displayStudent()方法。
   顯示學(xué)生名單
  displayStudent()方法包括訪問數(shù)據(jù)庫和顯示學(xué)生名單的業(yè)務(wù)邏輯。這是通過使用輔助的Student (學(xué)生)類實(shí)現(xiàn)的。列表4 給出了Student類的代碼。
  Student類有為每位學(xué)生保持信息的數(shù)據(jù)成員。Student類還有能根據(jù)表格數(shù)據(jù)或一組數(shù)據(jù)庫結(jié)果創(chuàng)建對(duì)象的構(gòu)造程序。下列語句表示學(xué)生的姓是如何從表格數(shù)據(jù)中獲取 的。
  lastName = request.getParameter ("LastName");
  請(qǐng)求對(duì)象是HttpServletRequest的一個(gè)實(shí)例。請(qǐng)求對(duì)象包含表格數(shù)據(jù)。表格數(shù)據(jù)可通過調(diào)用getParameter( )方法并提供表格字段的名稱獲得。學(xué)生注冊(cè)表中包含有一個(gè)LastName字段。 (請(qǐng)參考我以前發(fā)表在JDJ的文章,其中具體討論了服務(wù)程序如何獲取表格數(shù)據(jù))。
  Student類有存取其數(shù)據(jù)成員并以字符串方式表示其數(shù)據(jù)的方法。列表4中包括了Student類的方法代碼清單。toString()方法以普通的字符串格式返回?cái)?shù)據(jù)成員。toWebString( )方法以HTML無序列表的格式返回?cái)?shù)據(jù)。toTableString( )方法以HTML表格的格式返回?cái)?shù)據(jù)。這些方法被用來創(chuàng)建學(xué)生名單。
  構(gòu)造一個(gè)HTML頁面后就創(chuàng)建了學(xué)生名單。在列表3中的displayStudents()方法中,創(chuàng)建了HTML頁面的標(biāo)題。隨后再創(chuàng)建顯示下列信息的表格標(biāo)題。
  服務(wù)程序向數(shù)據(jù)庫服務(wù)器發(fā)出請(qǐng)求,獲得學(xué)生的名單。在init()方法中預(yù)備了下列SQL語句。 select * from Students order by LastName;
  SQL語句將根據(jù)姓氏并按照字母順序返回學(xué)生的名單。這組結(jié)果被用來創(chuàng)建HTML表格的主體。通過創(chuàng)建while循環(huán)語句,處理這組結(jié)果的每個(gè)記錄。該while循環(huán)語句的 部分代碼如下。
  int rowNumber = 1; while (dataResultSet.next( ) ) { aStudent = new Student(dataResultSet); tableBody += aStudent.toTableString(rowNumber); rowNumber++; }
  每個(gè)記錄都被用來創(chuàng)建一個(gè)新的Student對(duì)象。toTableString()方法被調(diào)用,以獲得學(xué)生數(shù)據(jù)的字符串表示。前面談到,toTableString( )方法以HTML表格的格式返回?cái)?shù)據(jù)。
  在構(gòu)造了表格主體后,結(jié)果集就被關(guān)閉。在主頁的底部,還提供了至主菜單頁面的瀏覽鏈接。
  在服務(wù)程序方面進(jìn)行了大量的處理工作。但我們到現(xiàn)在還沒有結(jié)束。必須將HTML頁面返回給Web瀏覽器。這是通過在響應(yīng)對(duì)象上打開一個(gè)輸出流實(shí)現(xiàn)的。響應(yīng)對(duì)象是HttpServletResponse的一個(gè)實(shí)例。將HTML頁面返回給用戶的語句如下:
  PrintWriter outputToBrowser = new PrintWriter(response.getOutputStream()); response.setContentType("text/html") ; outputToBrowser.println(htmlPage); outputToBrowser.close( );
  為HTML設(shè)置了內(nèi)容類型(content-type)后,用println()方法將htmlPage串返回給瀏覽器。圖4為StudentDBSServlet所返回的學(xué)生名單樣本。
  利用Java服務(wù)程序開發(fā)三層次數(shù)據(jù)庫應(yīng)用程序(圖五)
  圖4 學(xué)生名單
  學(xué)生的登記處理
  registerStudent()方法根據(jù)HTML表格數(shù)據(jù)創(chuàng)建一個(gè)新的Student對(duì)象。這個(gè)Student對(duì)象被用來作為在init( )方法已經(jīng)預(yù)備好的SQL語句中的參數(shù)。下列語句表示參數(shù)是如何設(shè)置的。
  registerStatement.setString(LAST_NAME_POSITION, aStudent.getLastName());
  所有參數(shù)設(shè)置完畢后,就執(zhí)行SQL語句。該語句執(zhí)行完畢后,新的學(xué)生數(shù)據(jù)就成功地插入到數(shù)據(jù)庫中了。
  此外,還為用戶構(gòu)造了確認(rèn)頁面。確認(rèn)頁面包含成功地插入數(shù)據(jù)庫的數(shù)據(jù)列表。Student.toWebString()方法被調(diào)用,為無序列表提供一個(gè)HTML字符串。
  合
  至此,應(yīng)用程序的全部三層均已構(gòu)造完畢。用戶界面由在瀏覽器中顯示的HTML頁面組成。對(duì)瀏覽器的唯一要求就是必須能顯示HTML表格。Microsoft (微軟)公司和Netscape(網(wǎng)景)公司所提供的兩種主要瀏覽器均可輕松地滿足這一要求,所以能保證Web應(yīng)用程序?qū)g覽器是友好的。
  后端數(shù)據(jù)庫是采用Microsoft Access創(chuàng)建的。但只要存在相應(yīng)的JDBC驅(qū)動(dòng)程序,就可使用任何一種數(shù)據(jù)庫。在我們所討論的情形里,公

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新民市| 福建省| 维西| 石台县| 连城县| 青铜峡市| 梓潼县| 临汾市| 秭归县| 房产| 延边| 潼关县| 潞西市| 扶绥县| 阳朔县| 新建县| 都安| 乐业县| 锦州市| 德昌县| 东台市| 墨竹工卡县| 德州市| 白沙| 二手房| 金溪县| 渝北区| 阿拉善右旗| 依安县| 安义县| 连平县| 定日县| 维西| 莱西市| 吴桥县| 石林| 达孜县| 乌鲁木齐市| 九龙县| 香河县| 多伦县|