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