【文章內(nèi)容簡介】
功能。 通過開發(fā)定制化標識庫,JSP技術是可以擴展的。今后,第三方開發(fā)人員和其他人員可以為常用功能創(chuàng)建自己的標識庫。這使得Web頁面開發(fā)人員能夠使用熟悉的工具和如同標識一樣的執(zhí)行特定功能的構件來工作。d) 將內(nèi)容的生成和顯示進行分離 與SERVLETS相比,JSP能提供所有SERVLETS功能,但它比用println書寫和修改HTML更方便。此外,你可以更明確的進行分工,WEB頁面設計人員編寫HTML,只需要留出地方讓SERVLETS程序員插入動態(tài)部分即可。e) 由于JSP頁面的內(nèi)置腳本語言是基于Java編程語言的,而且所有的JSP頁面都被編譯成為Java Servlet,JSP頁面就具有Java技術的所有好處,包括健壯的存儲管理和安全性。f) 作為Java平臺的一部分,JSP擁有Java編程語言“一次編寫,各處運行”的特點。隨著越來越多的供應商將JSP支持添加到他們的產(chǎn)品中,您可以使用自己所選擇的服務器和工具,更改工具或服務器并不影響當前的應用。[4](二) 應用服務器Tomcat概述Tomcat是一個免費的開源的Serlvet容器,它是Apache基金會的Jakarta項目中的一個核心項目,由Apache,Sun和其它一些公司及個人共同開發(fā)而成。由于有了Sun的參與和支持,最新的Servlet和Jsp規(guī)范總能在Tomcat中得到體現(xiàn)。本系統(tǒng)采用Tomcat (三) 日志的操作Log4J在強調(diào)可重用組件開發(fā)的今天,除了自己從頭到尾開發(fā)一個可重用的日志操作類外,Apache為我們提供了一個強有力的日志操作包Log4j。 Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件、甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。[2].(四) 開發(fā)工具a) 前臺頁面采用DREAMWAVER 2004 MXb) 圖片處理采用FIREWORKS 2004 MXc) 后臺代碼編輯ECLIPSE +MYECLIPSE+LAMBOZ+Together(五) 后臺數(shù)據(jù)庫SQLSERVER2000 SP3a+航信接口(可選)第五章 系統(tǒng)設計分析 應用需求分析航空代理人票務及酒店客房預訂系統(tǒng)需要滿足以下 方面的需求(一) 管理方面本系統(tǒng)分為三級身份管理:公司、代理人、銷售員。a) 銷售員主要負責銷售工作。b) 公司可以添加刪除代理人,并且查詢其下所有的代理人及銷售員的訂單數(shù)據(jù),及權限控制。c) 代理人可以添加刪除銷售人員,并且查詢其下所有的銷售員的訂單數(shù)據(jù),及權限控制。d) 必要時公司與代理人均可以進行銷售工作。組織結構圖如下: 圖圖51(二) 銷售統(tǒng)計管理訂單方面票務的接單、預訂、退訂、查詢等工作主要由銷售員完成,銷售員在接到顧客的訂票電話(或其他訂票手段)后通過本系統(tǒng)查詢符合條件的機票或客房信息,若有符合條件的信息通過本系統(tǒng)進行預訂,存入數(shù)據(jù)庫。a) 可以指定條件查詢數(shù)據(jù)庫。b) 票單的過期的自動處理。(三) 與客戶的溝通交流方面建立BBS FAQ模塊,方便顧客及下級人員對該系統(tǒng)進行提問,回答,交流。也能對問題進行管理,移入移出經(jīng)典FAQ。 系統(tǒng)數(shù)據(jù)庫設計 數(shù)據(jù)庫環(huán)境說明本系統(tǒng)數(shù)據(jù)庫采用微軟SQLSERVER 2000 SP3a數(shù)據(jù)庫Bishe:l 表username:用于儲存登陸信息l 表accountID:用于儲存公司、代理人、銷售員的信息l 表hotelINFO:用于儲存酒店信息l 表roomType:用于儲存客房信息l 表record:用于儲存客房訂單l 表airINFO:用于儲存航班信息l 表airOrder:用于儲存機票訂單表accountID上建有兩個觸發(fā)器,用于當修改表accountID的數(shù)據(jù)時自動修改表username的登錄信息,代碼如下:添加數(shù)據(jù)時CREATE TRIGGER add_agent ON for INSERTASdeclare @accountID varchar(50)declare @password varchar(10)declare @previlige varchar(2) set @accountID=(select from Inserted as i)set @password=(select from Inserted as i )set @previlige=(select from Inserted as i )insert into username (accountID,password,previlige) values(@accountID,@password,@previlige)圖52修改數(shù)據(jù)時:CREATE TRIGGER change_agent ON for UPDATEASdeclare @password_i varchar(10)declare @accountID_d varchar(10)declare @previlige_i varchar(2)set @accountID_d=(select from Deleted as d)set @password_i=(select from Inserted as i )set @previlige_i=(select from Inserted as i )if UPDATE (password)BEGINupdate username set password=@password_i where accountID=@accountID_dendif UPDATE (previlige)BEGINupdate username set previlige=@previlige_i where accountID=@accountID_dend圖53為了處理訂單過期的問題,在數(shù)據(jù)庫中建立兩個作業(yè),分別處理機票訂單與客房訂單。每分鐘自動運行一次機票訂單處理:update airOrder set status=39。239。 where datediff(day,beginDate,getdate())=1 and status=39。039。圖54update record set status=39。239。 where datediff(day,arriveDate,getdate())=1 and status=39。039。圖55表信息如下:圖56數(shù)據(jù)庫BBSDB:表Admin:用于儲存管理員信息表Mssage:用于儲存留言信息表MessageReply:用于存儲回復信息圖57 數(shù)據(jù)庫的連接由于本系統(tǒng)的運行時需要時常的操作數(shù)據(jù)庫,因此采用了數(shù)據(jù)庫連接池技術。一般情況下,在使用開發(fā)基于數(shù)據(jù)庫的WEB程序時,傳統(tǒng)的模式基本是按以下步驟: 1. 在主程序(如Servlet、Beans)中建立數(shù)據(jù)庫連接。 2. 進行SQL操作,取出數(shù)據(jù)?! ?. 斷開數(shù)據(jù)庫連接?! ∈褂眠@種模式開發(fā),存在很多問題。首先,我們要為每一次WEB請求(例如察看某一篇文章的內(nèi)容)建立一次數(shù)據(jù)庫連接,對于一次或幾次操作來講,或許覺察不到系統(tǒng)的開銷,但是,對于WEB程序來講,即使在某一較短的時間段內(nèi),其操作請求數(shù)也遠遠不是一兩次,而是數(shù)十上百次,在這種情況下,系統(tǒng)開銷是相當大的。事實上,在一個基于數(shù)據(jù)庫的WEB系統(tǒng)中,建立數(shù)據(jù)庫連接的操作將是系統(tǒng)中代價最大的操作之一。很多時候,網(wǎng)站速度瓶頸就在于此?! ∑浯危褂脗鹘y(tǒng)的模式,必須去管理每一個連接,確保他們能被正確關閉,如果出現(xiàn)程序異常而導致某些連接未能關閉,將導致數(shù)據(jù)庫系統(tǒng)中的內(nèi)存泄露,最終我們將不得不重啟數(shù)據(jù)庫。 常用的解決辦法是使用數(shù)據(jù)庫連接池:圖54如圖54所示當程序中需要建立數(shù)據(jù)庫連接時,只須從內(nèi)存中取一個來用而不用新建。同樣,使用完畢后,只需放回內(nèi)存即可。而連接的建立、斷開都有連接池自身來管理。同時,還可以通過設置連接池的參數(shù)來控制連接池中的連接數(shù)、每個連接的最大使用次數(shù)等等。通過使用連接池,將大大提高程序效率,同時,我們可以通過其自身的管理機制來監(jiān)視數(shù)據(jù)庫連接的數(shù)量、使用情況等。 使用連接池的優(yōu)點使用連接池的優(yōu)點主要體現(xiàn)在兩個方面:對數(shù)據(jù)庫的連接統(tǒng)一進行配置、管理、監(jiān)控,以及對數(shù)據(jù)庫連接池的參數(shù)進行優(yōu)化調(diào)整,同時對應用中沒有關閉或其他原因造成沒有關閉的數(shù)據(jù)庫連接由連接池統(tǒng)一進行管理。便于應用的移植和后端數(shù)據(jù)庫的切換,因為在應用中通過統(tǒng)一的JNDI獲得數(shù)據(jù)庫的連接,而具體連接的是哪一臺機器上的數(shù)據(jù)庫與應用無關。[5] 本系統(tǒng)(除BBS)數(shù)據(jù)操作的處理方法(一) 為了方便系統(tǒng)的轉(zhuǎn)移,該文件存有常用數(shù)據(jù)庫的的連接代碼,可根據(jù)需要,更改少量代碼,即可切換數(shù)據(jù)庫(二) ,Sql語句采用PreparedStatement 對象,可以接受一個或多個動態(tài)參數(shù)。使用時通過”sql id”,”datetype”,及參數(shù)數(shù)組獲得相應個sql語句。如下圖所示:圖55(三) 數(shù)據(jù)庫的連接,sql語句的讀取、執(zhí)行通過一個數(shù)據(jù)訪問層Data Access Layer類DataAccess(String path, Strin