摘要:火車網上訂票系統是通過網絡查詢信息,進行火車票的預訂、購買、支付的電子商務系統。訂票在購票交易過程中扮演著十分重要的角色。系統深入探討了J2EE應用系統開發過程及其相關技術,提出了訂票系統解決方案,在此基礎上重點解決了系統體系結構、訂票籃設計及系統安全三個關鍵問題。
關鍵詞:電子商務;J2EE;B/S模式;訂票籃
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)05-10ppp-0c
1 引言
近年來,隨著Internet技術的快速發展,電子商務的應用越來越廣泛,它運用電子通信作為手段進行經濟活動,人們可以對帶有經濟價值的產品和服務進行宣傳、購買和結算。電子商務是一種新興的商務方式,它能提供準確、快速、高效的商務運作,是當今商務運作發展的主流方向。
隨著國民經濟快速發展,人們出行、交通越來越頻繁,對服務的快捷、便利性要求也越來越高。從而對客運行業的建設與管理提出了更高的要求。為適應和推動客運行業的發展,各種交通公司和部門開始廣泛采用計算機管理系統,促進了票務事業的發展。經過幾年的建設和完善,取得了許多寶貴的成功經驗。采用計算機售票一方面大大減輕了訂票、售票、檢票、調度、票款管理等部門工作人員的勞動強度,提高了各部門的工作效率。
2 J2EE相關技術
J2EE是Sun公司推出的一個基于Java組件技術的企業應用系統開發規范,它為不同廠商創建平臺產品提供了標準,使不同J2EE平臺產品之間的交互成為可能。J2EE規范[1]定義了一個基于組件技術的多層企業信息系統的標準平臺,旨在簡化和規范企業應用系統的開發和部署。J2EE不僅能夠方便存取數據庫的JDBC API, CORBA技術以及能夠在Internet應用中保護數據的安全模式等等,同時還能提供了對EJB(Enterprise JavaBean)、Java Servlets API, JSP(Java Server Page) [2,3]以及XML技術的全面支持。其最終目的就是成為一個能夠使企業開發者大幅縮短投放市場時間的體系結構。
由J2EE技術組成的三層或多層的架構體系[4],已經成為開發信息系統首選。
典型的J2EE系統至少劃分三個層次[5]:表現層,業務邏輯組件層,持久層。
表現層(Presentation Layer)是實現顯示功能的。它是用戶界面或者遠程調用門面。主要由頁面技術JSP, SERVLET和MVC框架技術來完成。
業務邏輯層是成功架構的關鍵[6],這一層的主要功能是提供業務邏輯給表現層使用,它包括許多接口。一個好的業務層具備一下特點:功能完備,使用簡單,有很好的OO的實施,面向對象,獨立于表現層,易測試,易管理,對事務管理進行處理等。業務層主要是EJB, POJO等技術來實現的[7]。
持久層(Persistence Layer)是負責對象持久化也就是數據庫操作的層次。其三層結構和各層之間的關系,如圖1。

圖1 三層體系結構
3 系統分析
火車票網上售票系統最終實現的是旅客購得一張自己滿意的票券,票券的信息包括承運公司、出發/到達時間、票額、出發地/目的地等。因此,在實現網上交易的過程中要涉及到網站、票點(票券的打印和處理)等子系統,訂票系統是售票系統的子系統。
3.1 售票系統采用B/S (Browse/Server)模式, 而J2EE體系為構建三層應用程序提供了堅實的平臺,它將應用服務器層細分為三層,即表示層、業務層和持久層,采用此方案可設計出更適合業務網絡開發的應用系統。
系統共有三種用戶,根據用戶權限的不同而實現不同的功能。其中超級管理員的權限最大,它可以添加、刪除票點管理員,可以添加、修改、刪除火車區間,可以添加、修改、刪除某班次火車區間的車票種類。票點管理員可以修改自己的個人信息和票點信息(如票點電話,傳真等),用戶取票即在票點完成。普通用戶的權限最低,它只能完成車次的查詢、訂票和自己所訂票券的查詢。以及查詢哪一車次哪天還剩余多少張票,當然也可以修改個人信息及密碼。
3.2 根據訂票系統的特點,系統采用了典型WEB三層架構。
表示層由Servlet filter過濾器和Struts框架組成,主要實現系統與客戶交互作用。過濾器提供了系統中的一些共性處理比如字節編碼,權限管理等。Struts是典型的MVC應用框架,它簡化了系統的表示層開發,便于重用,提供了效率。
業務層由業務Bean和iBATIS容器框架組成,主要是完成系統業務功能。具體實現功能的都是DAO。采用面向接口技術,一個接口對應的一個實現類。由iBATIS框架管理這些DAO,它提供給這些DAO一些企業服務比如事務管理服務。表示層與業務層之間的集成是借助業務層的iBATIS框架的Bean工廠和應用上下文容器。在表示層中的Struts的組件Action中,通過調用Bean工廠和提供相應的iBATIS容器中的Bean Id來的得到業務Bean。
持久層由ORM中間件Sql Map來實現數據的增加、刪除、修改、查詢等功能。它簡化了數據庫的操作,起到了業務層與數據庫之間的集成連接。這樣系統可以隨便的更換數據庫,對上層的應用不會有影響,系統的開發效率有很大的提高。持久層與業務層之間的集成是通過DAO模式來實現,這樣DAO提供操作接口給業務層來操作數據庫,而DAO的實現封裝了數據庫操作,其實現是通過調用iBATIS框架去操作數據庫。
域對象模型層是所有的域對象組成,主要功能是穿插于持久層,業務層和表示層之間的業務對象的值傳遞。
通過上面的劃分,應用框架把表示層,業務層,持久層,域對象層的應用邏輯關系調用和內外接口進行了封裝和開發實現。如圖2。

圖2 系統總體架構
4 系統設計
4.1 訂票系統設計
訂票模塊是訂票系統的主要模塊之一,包含票券訂購、查詢、票券信息展示、訂票籃等四個子模塊,票券訂購模塊設計了一套完善的訂票流程,票券信息的展示方便了用戶查詢自己的定單。該系統中,首先必須通過會員注冊成為會員或是會員登陸才可以完成訂票。訂票資料提交后,系統會生成一個唯一的取票號,則客戶訂票成功??蛻糁灰獞{身份證或其他有效證件到自己選擇的的取票點在有效時間內取票即可。
系統應該要求其概念模式、顯示方式等的一致性,在類似的情況下具有一致的操作序列,如在提示和幫助中產生相同的術語等。人機界面設計的一致性要求對構成易學易用是極為重要的;交互系統的反饋是指用戶從計算機一方得到信息,表示計算機對用戶的動作所做的反應。如果系統沒有反饋,用戶就無法判斷他的操作是否為計算機所接受,是否正確,以及操作的效果是什么.反饋信息的呈現方式可以是多種多樣的,如文本、圖形和聲音等;在界面的空間使用上,應當形成一種簡潔明了的布局。界面設計最重要的就是遵循美學上的原則—簡潔與明了;綜合測試與評估,這個階段的關鍵任務是通過各類型的測試與評估,使系統達到預定的要求。它可以采取多種方法,如試驗法、用戶反饋、專家分析、軟件測試等,對軟件界面的諸多因素如功能性、可靠性、效率、美觀性等進行評估,以獲取用戶對界面的滿意度,便于盡早發現錯誤或者不滿意的地方,以改進和完善系統設計;
基于J2EE技術的火車訂票系統具有結構復雜、各訂票流程界面存在著很大的相似性、界面之間需要傳遞的信息量大等特點。在系統界面設計時,作者利用上述設計原則和步驟,并結合本系統的具體特點進行設計。
4.2 數據庫的設計
票券信息數據結構復雜,涉及班次的日期/時間、出發地/目的地、票券種類等信息,本系統根據關系型數據庫的設計思想,對票券信息資料進行規劃設計。票券信息數據庫中表的設計。
user信息表描述的是系統最高權限管理員的信息,它存放的是系統管理員的用戶名(username)、密碼(password)、姓名(name)、性別(sex)、生日(birthday)、電話(phone)、地址(address)、電子郵箱(email)、用戶類型(userType)備注(memo)和流水號(flowID)等。其中前四個字段是必要字段,后面的字段可以為空。系統的三種用戶(普通用戶、票點管理員、系統管理員)都存放在這一表中。其中的userType用以區分這三種用戶,\"0\"為系統管理員,\"1\"為票點管理員,\"2\"為普通用戶。系統管理員只有一個,由建表時建立,票點管理員由系統管理員添加,而普通用戶則通過注冊獲得合法權限, Range信息表描述的是火車的區間,即火車的基本信息。它包括火車的車次(traimID)、出發站(startStation)、到達站(desStation)、出發時間(StartTime)、到達時間(arriveTime)、備注(memo)和流水號(flowID)。這個信息表可以供一般用戶查詢,而系統管理員則可以添加、修改和刪除任意的火車區間。ticketType信息表描述的是火車票的種類。它包括火車的車次(range)、車票種類名稱ticketTypeName)、該類車票的張數(ticketNumber)、該類車票的價格(ticketPrice)、備注(memo)和流水號(flowID)。這個信息表也可以供一般用戶查詢,而系統管理員則可以添加、修改和刪除任意的票種區間。Diction信息表描述的是數據庫表中所替代字段的名稱。它包括要替換的字段名稱(dictType)、替換后的名稱(dictKey)、要替換的名稱(dicValue)、備注(memo)和流水號(flowID)。比如在_user信息表中的sex字段,男用字母m替換,女用字母f替換。該表是為了存儲的方便和空間的節約。Office信息表描述的是票點的基本信息。它包括票點的名稱(officeName)、票點的地址(officeAddress)、票點的電話(officePhone)、票點的傳真(officeFax)、票點管理員的ID號(officeManagerID)、備注(memo)和流水號(flowID)。票點是一般用戶訂票后取票的地方,所以以上的前五個字段是必須的。票點可以由系統管理員添加。Ticket信息表描述的是火車票的信息。它包括用戶訂票時生成的取票號(ticketUniformID)、票點ID(officeID)、票種類ID(ticketTypeID)、出發時間(startTime)、預定時間(bookTime)、一般用戶名稱(userName)、備注(memo)和流水號(flowID)。這里的userName是一般用戶的名稱,是通過注冊的合法本系統會員,本系統規定只有會員才擁有訂票功能。
本系統的表,都是通過流水號(flowID)聯系起來的,比如火車票信息中的票點ID(officeID)、票種類ID(ticketTypeID)都是Office和ticketType中的流水號(flowID)。從而建立了統一的聯系,從而形成了既快捷又簡單的聯系方式。
4.3 訂票籃的設計
訂票系統最終實現的是購買一張適合旅客的票據,因此訂票籃的設計能夠反映出整個購票流程。本系統設計的訂票籃采用了Session技術,系統把一個訂單中的每一張票作為一條紀錄插入數據集,訂票籃中實際存放的是一個總的定單數據,最后插入數據庫時系統先從Session中提取紀錄,然后再逐條放入數據庫。票券信息的結構復雜性使得系統在構建構票流程是采取的是逐步選擇的方式。這種購票方式致使旅客每進行一步購票操作就要保存一次數據,這就需要設計一個數據集,將票券信息同一存放在一個數據集中的臨時關系表中,然后一層層包含的方式實現旅客每進行一步操作都存入數據集中的臨時表中,并作為Session的存儲對象。
票券是存放于訂票籃的基本信息,設計訂票籃首先要設計票券的內容,火車票票券應包含的信息主要有:旅客的姓名;服務項目;取票點;班次;日期/時間;票種。
訂票籃是網上訂票系統的關鍵部分,系統最終實現的是購買到一張或幾張符合旅客需求的票券,由于票券的信息結構復雜,將涉及到數據庫中許多相關聯的關系表,如果訂票籃采用一般的數組結構,顯然無法滿足要求:票券信息的結構復雜性使得系統在構建構票流程是采取的是逐步選擇的方式。這種購票方式致使旅客每進行一步購票操作就要保存一次數據,這就需要設計一個數據集,將票券信息同一存放在一個數據集中的臨時關系表中,然后一層層包含的方式實現旅客每進行一步操作都存入數據集中的臨時表中,并作為Session的存儲對象。
用戶登陸系統頁面訂票,首先將請求一個資源,這個資源被映射到struts.guest.TicketAction中,而這中映射的實現是在struts-config.xml里面配置的。在TicketAction里面首先進行的是用戶輸入的合法性驗證,比如輸入的訂票張數是否合法。驗證通過以后,將調用TicketService類里面的方法insert(),執行具體的插入動作。而這個insert()方法首先調用DaoConfig文件,通過DaoConfig文件獲得獲得DaoManager實例。而DaoManager實例負責處理Dao接口和SqlMaps的實現關系,這個實現關系在cn.edu.him.persistence下面的dao.xml文件中定義。TicketService又利用這個實例化的DaoManager實例獲得一個由TicketSqlMapDao實例化的TicketDao接口。這個TicketDao接口中就包含有插入這個方法,但實現又是在TicketSqlMapDao中,在TicketSqlMapDao中實現時,調用那些Mapped Statement。 Statement在cn.ede.him.persistence.sqlmapdao.sql包中的xml文件中定義,每一個Statement都有一個id,而每一個id又對應一條SQL語句,執行這條SQL語句就執行了插入操作。從而實現了用戶的訂票。
用戶訂購票券時,逐層加入數據集,最終在訂票籃中形成一個完整的票券信息數據結構表,確定購買票券之后查詢訂票籃中的票券信息以插入數據庫,最后執行刪除訂票籃在Session的記錄,釋放資源。
用戶通過注冊或者會員登陸后,才可以實現訂票。會員注冊信息填寫。會員登陸后,就可以根據自己需要的車次或者出發地/目的地查詢具體信息。然后查看車票類型,找到自己所需要的車票類型后選擇訂票,選擇訂票后,就可以選擇車票的詳細信息,比如取票的地點、訂票的張數、車次發車的日期。然后確定后就生成取票號及定單詳細資料。
5 結束語
基于J2EE技術的火車票訂票系統結構復雜,網上訂票系統是整個售票系統的一個子系統,是票務系統的一個銷售渠道。網上訂票系統涉及技術面較廣、用戶量大,對系統的響應速度、穩定性、安全性、實時性等方面要求很高。系統系統實現了對火車網上售票系統的設計與開發,能夠在諸多復雜因素的影響下,保證售票的正常運行。
參考文獻:
[1]Subrahman yam.J2EE編程指南[M].北京:電子工業出版社,2004.
[2]楊學瑜,王志軍,劉同利.JSP入門與提高[M].北京:清華大學出版社,2001.
[3]孫衛琴,李洪成.TOMCAT與Java Web開發技術詳解[M].北京:電子工業出版社,2004.
[4](美)謝小樂((Henry Xie),著,朱福喜,余振坤,譯.J2EE經典實例詳解[M].北京:北京人民郵電出版社,2003.9.
[5](美)Palavi JainShadab Siddiqui著,王雷潘英譯,J2EE專業項目實例開發[M].中國水利水電工業出版社,2003.2.
[6]Rod Johnson.Introduction to open-source Spring framework for J2EE.ppt,2005.
收稿日期:2008-01-20
作者簡介:段昌敏,碩士,講師,研究方向:系統設計、現代密碼學、網絡安全等。