基于SSH的轎車信息管理系統(tǒng) 實驗報告(含源文件)_第1頁
基于SSH的轎車信息管理系統(tǒng) 實驗報告(含源文件)_第2頁
基于SSH的轎車信息管理系統(tǒng) 實驗報告(含源文件)_第3頁
基于SSH的轎車信息管理系統(tǒng) 實驗報告(含源文件)_第4頁
基于SSH的轎車信息管理系統(tǒng) 實驗報告(含源文件)_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 基于SSH的轎車信息管理系統(tǒng)J2EE技術(shù)實驗報告項目題目: 基于SSH的轎車信息管理系統(tǒng) 學(xué) 院: 計算機學(xué)院 指 導(dǎo) 教 師: 項 目 成 員: 專 業(yè): 軟件工程 班 級: 軟件0901 完 成 時 間: 2012-06-02 46目 錄1引言12核心技術(shù)簡介22.1MVC模式簡介22.2Struts2框架簡介32.2.1Struts2架構(gòu)42.2.2Struts2基本處理流程52.2.3Struts2的優(yōu)點62.3Hibernate框架簡介62.3.1Hibernate架構(gòu)62.3.2Hibernate核心接口72.3.3Hibernate基本處理流程72.3.4Hibernate的優(yōu)

2、點72.4Spring框架簡介82.4.1Spring架構(gòu)82.4.2Spring特點93轎車信息管理系統(tǒng)需求分析103.1任務(wù)概述103.2用戶特點103.3功能需求103.4界面需求113.5操作需求113.6輸入輸出需求114轎車信息管理系統(tǒng)概要設(shè)計124.1設(shè)計思想124.2總體設(shè)計124.3系統(tǒng)層次結(jié)構(gòu)圖134.4接口設(shè)計134.5數(shù)據(jù)庫設(shè)計134.6出錯處理設(shè)計145轎車信息管理系統(tǒng)詳細(xì)設(shè)計165.1數(shù)據(jù)庫詳細(xì)設(shè)計165.1.1數(shù)據(jù)庫關(guān)系模型設(shè)計165.1.2數(shù)據(jù)庫物理結(jié)構(gòu)設(shè)計165.2轎車管理系統(tǒng)模塊詳細(xì)設(shè)計175.2.1用戶登陸模塊175.2.2用戶首頁面模塊185.2.3添加

3、汽車模塊185.2.4刪除汽車模塊195.2.5查詢汽車模塊205.2.6修改汽車模塊205.2.7出售汽車模塊215.2.8總銷售查詢模塊225.2.9按時間查詢模塊226轎車信息管理系統(tǒng)具體實現(xiàn)246.1開發(fā)與運行環(huán)境246.2開發(fā)環(huán)境的搭建246.3數(shù)據(jù)庫系統(tǒng)實現(xiàn)306.4DAO層實現(xiàn)346.5Manager層實現(xiàn)356.6Action層實現(xiàn)366.7汽車信息查詢模塊實現(xiàn)366.1按時間查詢模塊實現(xiàn)386.2系統(tǒng)其它模塊的實現(xiàn)417總結(jié)448參考文獻(xiàn)451 引言近年來隨著人均收入水平的提高,人們購車的能力也逐步提升。為了方便轎車銷售企業(yè)對己方轎車管理,轎車銷售管理系統(tǒng)成了轎車市場一個不可

4、或缺的管理軟件。一個好的管理軟件能提高企業(yè)的管理效率,減輕企業(yè)統(tǒng)計人員的工作量。同時隨著近年來企業(yè)Java的發(fā)展,使得開發(fā)一個針對企業(yè)需求的軟件系統(tǒng)變得簡單。因此使用企業(yè)Java來開發(fā)一個轎車信息管理系統(tǒng),是行之有效的。2 核心技術(shù)簡介Struts2,Spring,Hibernate是三個相互獨立的框架。但三個框架一起整合起來使用,能使軟件系統(tǒng)開發(fā)更輕松、更靈活、更容易擴展。三者都是“半成品”框架,使得我們在開發(fā)時不需要從頭做起。三者之間的關(guān)系如圖2-1:圖2-1 Struts2,Spring,Hibernate關(guān)系圖122.1 MVC模式簡介MVC全稱Model View Controlle

5、r,它使得應(yīng)用程序的輸入、處理和輸出分開,使程序的耦合度降低。其每個層次說明如下:Ø Model(模型):模型表示業(yè)務(wù)相關(guān)的數(shù)據(jù)與業(yè)務(wù)的處理方法。能直接訪問數(shù)據(jù)。Ø View(視圖):視圖用于對數(shù)據(jù)的顯示。在這一層上,通常沒有邏輯。為了更新視圖,視圖需要訪問它監(jiān)視的模型,因此視圖通常事先在被監(jiān)視的數(shù)據(jù)那進(jìn)行注冊。Ø Controller(控制器):顧名思義,控制器起到控制作用,用于控制應(yīng)用程序的流程。它處理事件并作出響應(yīng),調(diào)用相關(guān)的模型去處理事件請求,確定哪個視圖返回請求。圖2-2 MVC各層關(guān)系圖圖2-2顯示的MVC各層之間的關(guān)系。由于它具有這些結(jié)構(gòu)使得多個視圖

6、可以共有一個模型,同時對一層上的修改不會影響到其他層。2.2 Struts2框架簡介Struts2是一個在WebWork的基礎(chǔ)上轉(zhuǎn)化而來的基于MVC的框架。采用攔截器的機制來處理用戶請求,使得業(yè)務(wù)邏輯控制器與Servlet API實現(xiàn)分離。.1 Struts2架構(gòu)圖2-3 Struts2架構(gòu)圖2-3 展示了Struts2的整體架構(gòu),其各模塊說明如下:Ø FilterDispatcher:它是Strut2的核心控制器。它根據(jù)ActionMapper的結(jié)果來決定對請求的處理和響應(yīng)。Ø ActionMapper:它是一個接口,并提供了HTTP請求與Actio

7、n之間的映射關(guān)系。如果用戶的請求與ActionMapper中提供的方法相匹配,就繼續(xù)調(diào)用ActionProxy。Ø ActionProxy:它會依據(jù)ActionMapper生成的URI以及配置管理器來找到響應(yīng)用戶請求的Action對象。然后創(chuàng)建ActionInvocation對象來執(zhí)行相應(yīng)的Action方法。Ø ActionInvocation:它會在調(diào)用Action處理方法的前后,還要調(diào)用各種攔截器。Ø Result:它會根據(jù)相關(guān)視圖將用戶請求的處理結(jié)果反饋給用戶。Ø struts.xml:是Struts2的配置文件,負(fù)責(zé)配置每個Action的返回結(jié)果

8、所對應(yīng)的跳轉(zhuǎn)頁面。Ø Interceptor:攔截器是Struts2的重要組件,其設(shè)計思想來源于AOP(面向切面編程)。通常用于處理某些通用的處理,它會在每個Action的外部執(zhí)行。Ø Action:用于處理用戶請求并封裝業(yè)務(wù)數(shù)據(jù)。其執(zhí)行后通常會返回一個String類型的量,struts.xml根據(jù)這個量來決定跳轉(zhuǎn)頁面。Ø Templates:頁面模板。Ø Tag Subsystem:Struts2的標(biāo)簽庫,用于頁面的設(shè)置。2.2.2 Struts2基本處理流程圖2-4 Struts2基本處理流程圖2-4展示了Struts2基本處理流程,用戶請求在經(jīng)過一

9、系列攔截器(攔截器會對用戶請求進(jìn)行相應(yīng)的處理,如增加某些功能)后,就會交由Action處理,然后Action返回響應(yīng)的結(jié)果(默認(rèn)為“input”),最后通過匹配結(jié)果來選擇跳轉(zhuǎn)視圖頁面。2.2.3 Struts2的優(yōu)點Ø “半成品”框架:使得開發(fā)不需要從頭做起,而且在框架中很多地方都有默認(rèn)值設(shè)置,減少了冗余的設(shè)置,提高了開發(fā)效率。Ø 輕量級:資源消耗少,運行速度快。Ø 搭建簡單:只需在Myeclipse中將需要的包拷貝入項目中,再進(jìn)行配置。Ø 標(biāo)簽強大:Struts2提供了一系列的自己編寫的標(biāo)簽用于頁面布置,減少了頁面代碼。Ø Action測試簡

10、單:不需要模擬HTTP對象,就可以直接測試。Ø 錯誤報告明了:便于迅速找出錯誤并修改。2.3 Hibernate框架簡介Hibernate是一個開放源碼的對象關(guān)系映射框架,采用ORM機制,通常用于持久層的開發(fā)。它對JDBC進(jìn)行了輕量級的封裝,使得我們在開發(fā)過程中可以使用面向?qū)ο蟮姆绞絹聿倏v數(shù)據(jù)庫。2.3.1 Hibernate架構(gòu)圖2-5 Hibernate架構(gòu)2.3.2 Hibernate核心接口Hibernate核心接口一共有6個:Ø Session接口:該接口用于持久化對象的增、查、刪、該,屬于非線程安全。Ø SessionFactory接口:該接口用于初始

11、化Hibernate,充當(dāng)數(shù)據(jù)存儲源的代理,并創(chuàng)建Session對象。Ø Configuration接口:該接口在Hibernate的啟動時,首先定位映射文檔位置、讀取配置,然后創(chuàng)建SessionFactory對象。Ø Transaction接口:用于事務(wù)操作。Ø Query和Criteria接口:使用HQL或SQL語句查詢數(shù)據(jù)庫。其中Criteria接口更靠近面向?qū)ο?;Query接口則提供了使用原生SQL語句的方法。2.3.3 Hibernate基本處理流程1. 創(chuàng)建Configuration實例,讀取項目路徑根目錄下的配置文件信息。2. 創(chuàng)建SessionFa

12、ctory實例,將Configuration中的配置信息復(fù)制到SessionFactory中。3. 調(diào)用SessionFactory來創(chuàng)建Session4. 打開Session,并創(chuàng)建事務(wù)Transaction5. 進(jìn)行持久化操作6. 提交事務(wù)7. 關(guān)閉Session8. 關(guān)閉SessionFactory2.3.4 Hibernate的優(yōu)點Ø 它使得數(shù)據(jù)庫中的每一張表都映射為一個Java類,讓我們在開發(fā)過程中可以使用面向?qū)ο蟮姆绞絹聿僮鲾?shù)據(jù)庫。Ø 自動配置,我們只需在數(shù)據(jù)庫中建立表,然后通過Myeclipse自帶的工具就能完成映射。Ø 它封裝了對各種數(shù)據(jù)庫的操作&

13、#216; 輕量級框架,映射靈活,數(shù)據(jù)庫表、配置文件、映射類我們只需要完成其中任何一部分就能依靠工具完成三者的關(guān)系映射。2.4 Spring框架簡介Spring框架致力于J2EE應(yīng)用各層的解決方案,貫穿表現(xiàn)層、業(yè)務(wù)層、持久層。同時它是一個輕量級的框架,沒有侵入性,不會改變原有框架的類容。使用它的目的不是去修改原有框架,而是使用它來管理,使得原有的框架工作得更好。2.4.1 Spring架構(gòu)圖2-6 Spring架構(gòu)圖2-6為Spring的架構(gòu),每個模塊功能如下:Ø 核心容器:提供Spring框架的基本功能。其主要組件是BeanFactory,采用IOC(控制反轉(zhuǎn))將應(yīng)用程序的配置與依

14、賴性代碼分開。Ø Spring上下文:是一個配置文件,用于提供上下文信息。Ø Spring AOP:該 模塊直接將面向方面的編程功能集成到了Spring 框架中。支持聲明式的事務(wù)管理。Ø Spring DAO:該模塊用于管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的錯誤消息。Ø Spring ORM:提供了如Hibernate這類ORM 的對象關(guān)系工具。Ø Spring Web:為基于 Web 的應(yīng)用程序提供了上下文,簡化了處理多部分請求以及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?#216; Spring MVC框架:該框架中融入了大量視圖技術(shù)。2.4

15、.2 Spring特點Ø 輕量級框架:占用資源少,非侵入性。Ø 控制反轉(zhuǎn)(IOC):使得本來需要我們(應(yīng)用程序)在執(zhí)行前要進(jìn)行的new操作,交由Spring的IOC容器來管理,在容器中進(jìn)行配置,再由容器來將new好的對象注入應(yīng)用程序,從而松散了耦合度。Ø 面向切面(AOP):通常我們的編程思路是至上而下的,Spring的AOP使得我們能橫向考慮問題,例如事務(wù)與日志記錄。3 轎車信息管理系統(tǒng)需求分析3.1 任務(wù)概述轎車信息管理系統(tǒng)用戶企業(yè)管理轎車的銷售情況,除了基本的查詢、添加功能外,還應(yīng)有統(tǒng)計功能。同時操作方面應(yīng)盡量簡單。3.2 用戶特點1) 系統(tǒng)管理員:該用戶擁

16、有最高權(quán)限,可以對轎車的信息修改,查看銷售情況。2) 前臺銷售員:該用戶僅用查看轎車基本信息(不包括成本價),以及成功出售一輛轎車后的出售操作3.3 功能需求除了基本的查詢、添加功能外,還應(yīng)有統(tǒng)計銷售功能,以及分段查詢功能。功能需求圖如下圖3-1所示:圖3-1 系統(tǒng)功能需求各模塊具體說明如下:1) 用戶登陸:用戶輸入合法的用戶名和密碼完成登陸,如果用戶名或密碼錯誤,應(yīng)輸出提示。2) 登陸頁面:顯示當(dāng)前用戶的權(quán)限,以及相關(guān)功能連接。3) 車輛管理:提供基本的車輛增、查、刪、改功能,以及出售車輛操作。同時增加相應(yīng)錯誤判斷。4) 業(yè)務(wù)管理:提供總銷售統(tǒng)計查詢,以及根據(jù)時間段的查詢。同時提供相應(yīng)的錯誤

17、判斷。3.4 界面需求界面簡潔美觀。3.5 操作需求操作簡潔,符合人們通常使用習(xí)慣。3.6 輸入輸出需求要求輸入數(shù)據(jù)合法,如果非法會跳出出錯提示。4 轎車信息管理系統(tǒng)概要設(shè)計4.1 設(shè)計思想該轎車管理系統(tǒng)用于轎車基本的增、查、刪、改、出售以及統(tǒng)計功能。能夠方便企業(yè)對自己的轎車進(jìn)行管理,它將具有以下特點:Ø 運行速度快Ø 占用資源少Ø 界面簡潔Ø 操作簡單4.2 總體設(shè)計1) 以用戶登陸后的界面為平臺,將各模塊功能放于該頁面2) 采用SSH框架3) 靈活性要求:視圖與業(yè)務(wù)邏輯分開,低耦合。采取接口方式編程便于系統(tǒng)的維護(hù)以及移植。4) 輸入輸出要求:要求輸入

18、數(shù)據(jù)合法,如果非法會跳出出錯提示。4.3 系統(tǒng)層次結(jié)構(gòu)圖圖4-1 系統(tǒng)層次結(jié)構(gòu)圖4.4 接口設(shè)計用戶接口:通過鼠標(biāo)與鍵盤操作。內(nèi)部接口:使用數(shù)據(jù)流提供的接口操作各個模塊。4.5 數(shù)據(jù)庫設(shè)計概念結(jié)構(gòu)設(shè)計是指將需求分析得到的用戶需求抽象為信息結(jié)構(gòu)。描述概念模型的有力工具是E-R模型。本系統(tǒng)E-R圖如下圖所示:圖4-2 用戶E-R圖圖4-3 轎車銷售E-R圖4.6 出錯處理設(shè)計1) 以下列出了可能的錯誤情況及其對應(yīng)的錯誤信息:2) 用戶名或密碼有誤,提示:您輸入的用戶名或密碼有誤,請重新輸入。3) 新增車輛在數(shù)據(jù)庫中已經(jīng)存在,提示:您錄入的車名-型號,在數(shù)據(jù)庫中已經(jīng)存在,如果要修改,請到修改頁面。4

19、) 新增車輛的售價小于成本,提示:您輸入的售價小于成本。5) 出售數(shù)量大于庫存數(shù)量,提示:您出售的車名-型號,出售數(shù)量大于庫存數(shù)量6) 按時間查詢時起始日期大于截止日期,提示:您輸入的起始日期大于截止日期5 轎車信息管理系統(tǒng)詳細(xì)設(shè)計本報告將對轎車系統(tǒng)的數(shù)據(jù)庫與各模塊進(jìn)行詳細(xì)設(shè)計。5.1 數(shù)據(jù)庫詳細(xì)設(shè)計5.1.1 數(shù)據(jù)庫關(guān)系模型設(shè)計E-R圖向關(guān)系模型轉(zhuǎn)換:一個實體型轉(zhuǎn)換為一個關(guān)系模式,實體的屬性即為關(guān)系模式的屬性,實體的標(biāo)識符即為關(guān)系模式的鍵。根據(jù)圖4-2與圖4-3,本系統(tǒng)的關(guān)系模型為:1) 用戶(用戶ID,用戶名,密碼,權(quán)限);2) 轎車(轎車ID,車名,型號,數(shù)量,售價,成本);3) 銷售表

20、(銷售ID,轎車ID,銷售日期,銷售數(shù)量)。5.1.2 數(shù)據(jù)庫物理結(jié)構(gòu)設(shè)計數(shù)據(jù)庫的物理設(shè)計是將一個給定邏輯結(jié)構(gòu)實施到具體的環(huán)境中,邏輯數(shù)據(jù)模型要選取一個具體的工作環(huán)境,這個工作環(huán)境提供了數(shù)據(jù)存儲結(jié)構(gòu)與存取方法。經(jīng)過分析設(shè)計給出了各主要表的物理結(jié)構(gòu):users表,用于存取用戶信息,其設(shè)計如下:列名類型長度是否允許空值主鍵/外鍵user_idint8NO主鍵usernamevarchar20NOpasswordvarchar20NOlevelint1NO表5-1car表,用于存取轎車基本信息,其設(shè)計如下:列名類型長度是否允許空值主鍵/外鍵car_idint8NO主鍵carnamevarchar20

21、NOcartypevarchar20NOamountint8NOin_priceint8NOsell_priceint8NO表5-2sell表,用于存取銷售情況,其設(shè)計如下:列名類型長度是否允許空值主鍵/外鍵sell_idint8NO主鍵car_idint8NO外鍵sell_amountint8NOsell_datedate-NO表5-35.2 轎車管理系統(tǒng)模塊詳細(xì)設(shè)計5.2.1 用戶登陸模塊模塊功能:用戶輸入正確的用戶名密碼后跳轉(zhuǎn)到相應(yīng)頁面,若用戶名或密碼有誤,輸出提示流程圖:圖5-15.2.2 用戶首頁面模塊模塊功能:顯示當(dāng)前用戶權(quán)限,展示相應(yīng)功能連接流程圖:圖5-25.2.3 添加汽車模

22、塊模塊功能:將用戶輸入的轎車信息保存到數(shù)據(jù)庫中。流程圖:圖5-35.2.4 刪除汽車模塊模塊功能:通過下拉框選擇汽車的型號與名字,點擊刪除按鈕對汽車刪除。流程圖:圖5-45.2.5 查詢汽車模塊模塊功能:通過下拉框選擇汽車的型號與名字,點擊查詢按鈕查詢轎車信息。流程圖:圖5-55.2.6 修改汽車模塊模塊功能:依據(jù)輸入的汽車信息修改相應(yīng)汽車的信息流程圖:圖5-65.2.7 出售汽車模塊模塊功能:用戶選擇要出售的汽車,輸入出售數(shù)量,提交出售,如果出售數(shù)量大于庫存數(shù)量,輸出錯誤提示流程圖:圖5-75.2.8 總銷售查詢模塊模塊功能:輸出總的銷售結(jié)果流程圖:圖5-85.2.9 按時間查詢模塊模塊功能

23、:依據(jù)用戶選擇的時間段來查詢該段時間的銷售情況流程圖:圖5-96 轎車信息管理系統(tǒng)具體實現(xiàn)6.1 開發(fā)與運行環(huán)境Ø 操作系統(tǒng):Win7Ø 內(nèi)存:2GØ 硬盤空間:500GØ 開發(fā)軟件:Myeclipse 10,Microsoft Sql Server 2008,Java 6.0 ,Tomcat6.0Ø 框架版本:Struts 2.1,Hibernate 3.0,Spring 3.06.2 開發(fā)環(huán)境的搭建新建一個Web項目名為CIMS(Car Infomation Management System),選擇使用Java6.0,如圖6-1:圖6-1

24、添加Struts2相關(guān)支持包,如圖6-2圖6-2在Meclipse的數(shù)據(jù)庫視圖中增加cardb配置,如圖6-3:圖6-3添加Spring相關(guān)包,除了默認(rèn)的包以外,還應(yīng)選上Spring Web Liberaies 3.0,如圖6-4:圖6-4添加Hibernate支持包,除了原有包外,將最后4個包也加入,如圖6-5圖6-5Hibernate Configuration選擇Spring Configuration file,因為三大框架整合之后由Spring來管理所有的Bean,所以Hibernate的配置文件也由Spring的applicationContext.xml文件來管理,點擊下一步;選

25、擇Existing Spring Configuration file,點擊下一步;選擇數(shù)據(jù)庫為cardb,注意方言為SQL Server;不建立SessionFactory,完成;在web.xml中添加如下代碼;<context-param> <param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <listene

26、r><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> <

27、;init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>6.3 數(shù)據(jù)庫系統(tǒng)實現(xiàn)users表car表sell

28、表其中sell表中的外鍵請安如下方式添加:數(shù)據(jù)庫映射到項目中,注意ID的生成方式選擇native最后的項目中將會有如下映射類:6.4 DAO層實現(xiàn)DAO(Data Access Object)是用于訪問數(shù)據(jù)的對象,在使用時,我們在DAO中定義訪問其對應(yīng)數(shù)據(jù)對象的接口方法,業(yè)務(wù)層通過DAO操作數(shù)據(jù),這樣避免了直接在業(yè)務(wù)層使用持久層的技術(shù)。DAO以及DAO實現(xiàn)的項目結(jié)構(gòu)如下圖所示:在使用前,需要在Spring的配置文件中添加如下配置:<bean id="sessionFactory"class="org.springframework.orm.hibernate

29、3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>

30、</props></property><property name="mappingResources"><list><value>com/cims/domain/Users.hbm.xml</value><value>com/cims/domain/Sell.hbm.xml</value><value>com/cims/domain/Car.hbm.xml</value></list></property></bean>

31、;在本系統(tǒng)中絕大多數(shù)DAO實現(xiàn)使用getHibernateTemplate()模板來操作數(shù)據(jù)庫,因為該模板是線程安全的。例子:Overridepublic Car findCarByNameAndType(String carname, String cartype) List l= getHibernateTemplate().find("from Car " +"where car_name='"+carname+"' and car_type='"+cartype+"'");i

32、f(l.size()=1)return (Car)l.get(0);return null; 從中可以看出Hibernate處理數(shù)據(jù)庫的優(yōu)勢,它使用了對象的方式來對數(shù)據(jù)庫的表操作。而且我們不需要編寫最底層的SQL語句,而是直接使用它提供的方法。但Hibernate的模板提供的方法似乎不支持一些數(shù)據(jù)庫中的默認(rèn)函數(shù),因此本系統(tǒng)一些地方還使用了Session來使用原生SQL語句。例子:Overridepublic List<String> findCarName() return getSession().createSQLQuery("select " +"

33、;distinct car_name from Car").list();該方法主要是用于得到數(shù)據(jù)庫中的汽車名字,并且過濾掉重復(fù)的部分。6.5 Manager層實現(xiàn)在Action中通過Manager對DAO接口進(jìn)行調(diào)用,首先將需要對用到的DAO實例化,采用Spring的依賴注入方式將實例化的DAO注入到Action中。具體調(diào)用示例如下:Overridepublic void saveSell(Car car, int sellamount) Calendar c=Calendar.getInstance();car.setAmount(car.getAmount()-sellamou

34、nt);Sell sell=new Sell();sell.setCar(car);sell.setSellAmount(sellamount);sell.setSellDate(c.getTime().toLocaleString();sellDAO.saveSell(sell);carDAO.update(car);前后省略了sellDAO,carDAO的定義以及set方法。該方法用于保存一條銷售信息。在Spring的配置文件中需要添加如下代碼:<bean id="sellManager" class="com.cims.manager.impl.Sel

35、lManagerImpl"><property name="carDAO" ref="carDAO"/><property name="sellDAO" ref="sellDAO"/></bean><property name="carDAO" ref="carDAO"/>可以理解為我們以前在Action執(zhí)行的CarDAO cardio=new CarDAOImpl();語句。不過由于Spring的控制反轉(zhuǎn)與依賴

36、注入,使得我們將這個工作交給了Spring框架來完成6.6 Action層實現(xiàn)Action用于返回一個Stirng類型字符串,來選擇跳轉(zhuǎn)頁面。其主要的配置在struts.xml這個文件中,例子如下:<action name="carSellResult" class="carSell"><result name="success">/pages/sellManager/sellCarResult.jsp</result><result name="error">/pa

37、ges/sellManager/willSellCarInfo.jsp</result></action>6.7 汽車信息查詢模塊實現(xiàn)該模塊實現(xiàn)界面如下:首先會根據(jù)數(shù)據(jù)庫中汽車信息生成一個查詢選擇頁面;用戶選擇好查詢車輛后,顯示查詢結(jié)果;下面是該模塊的具體實現(xiàn)過程:查詢頁面用到了一個Struts2的標(biāo)簽<s: doubleselect/>該標(biāo)簽有2個主要參數(shù)<s:doubleselect name="name" doubleName="type" list="carname" doubleLi

38、st="cartype" label="車名、型號" />list對應(yīng)第一個下拉選框,它的值由數(shù)據(jù)庫中的汽車名稱決定;doubleList對應(yīng)第二個下拉選框,它的值對應(yīng)第一個選框中的汽車名稱所對應(yīng)的型號;其生成Action的主要代碼如下:public String execute() throws Exception nameTotype=carManager.carNameToType();carname=new ArrayList<String>();carname.add("所有");carname.addAl

39、l(carManager.carName();return SUCCESS;public List<String> getCartype() ValueStack stack = ServletActionContext.getValueStack( ServletActionContext.getRequest() );Object name = stack.findValue( "top" );if( name!=null && name instanceof String ) return nameTotype.get( (String)n

40、ame );return Collections.EMPTY_LIST;execute()方法中的carname是一個List<String>對象,用于存放所有的汽車名稱,對應(yīng)<s: doubleselect/>中的Totype是個Map<String,List<String>>類型對象,用來存放汽車名稱與型號的對應(yīng)。getCartype()方法依據(jù)棧頂元素來選擇對應(yīng)的汽車型號的list。它的返回值對應(yīng)于<s: doubleselect/>中的doubleList。在Spring的配置文件中需要注入carManage

41、r<bean name="searchCar" class="com.cims.action.SearchCarInfo"><property name="carManager" ref="carManager" /></bean>6.1 按時間查詢模塊實現(xiàn)該模塊的具體實現(xiàn)頁面如下:首先生成一個選擇查詢時間的頁面,其中年份會依據(jù)數(shù)據(jù)庫中的所有年份來生成選擇時間段都輸出查詢統(tǒng)計結(jié)果如果選擇的起始時間大于截止時間會報錯具體實現(xiàn)過程如下:Action中主要方法如下Overridepub

42、lic String execute() throws Exception if(beginYear=-1)sellList=sellManager.findAllSellInfo();else if(beginYear>endYear)setMsg("您選擇的起始年份:"+beginYear+",大于截止年份:"+endYear);return INPUT;else if(beginYear=endYear)if(beginMonth>endMonth)setMsg("您選擇的起始月份:"+beginMonth+&quo

43、t;,小于截止月份:"+endMonth);return INPUT;sellList=sellManager.findSellInfoByDate(beginYear, beginMonth, endYear, endMonth);elsesellList=sellManager.findSellInfoByDate(beginYear, beginMonth, endYear, endMonth);setMsg("");profit=sellManager.totalProfit(sellList);totalSell=sellManager.totalSel

44、ls(sellList);beginYear=-1;return SUCCESS;其中默認(rèn)給beginYear賦值為-1,用于處理用戶選擇總銷售情況時的查詢。其余情況下如果時間合法則調(diào)用sellManager中的相關(guān)方法來獲取銷售的信息。需要在Spring的配置文件中添加如下代碼:<bean name="sellInfo" class="com.cims.action.FindSellCarInfoAction"><property name="sellManager" ref="sellManager&q

45、uot;/></bean>findSellInfoByDate()方法會根據(jù)輸入的4個參數(shù)來生成查詢sell表的SQL語句,其中用了很的判斷來處理輸入時間。分別判斷了如下條件:1) 起止年份相同2) 起始年份小于截止年份其主要代碼如下:public List<Sell> findSellInfoByDate(int beginYear, int beginMonth,int endYear, int endMonth) List<Sell> sellList=new ArrayList();String date=null;for(int i=begi

46、nYear;i<=endYear;i+)if(i=endYear&&i=beginYear)for(int j=beginMonth;j<=endMonth;j+)date="'"+i+"-%"+j+"-%'"sellList.addAll(sellDAO.findSellInfoByDate(date);else if(i!=endYear)for(int j=beginMonth;j<=12;j+)date="'"+i+"-%"+j+

47、"-%'"sellList.addAll(sellDAO.findSellInfoByDate(date);elsefor(int j=1;j<=endMonth;j+)date="'"+i+"-%"+j+"-%'"sellList.addAll(sellDAO.findSellInfoByDate(date);for(int i=0;i<sellList.size();i+)Car car=carDAO.get(sellList.get(i).getCar().getCarId

48、();sellList.get(i).setCar(car);return sellList;6.2 系統(tǒng)其它模塊的實現(xiàn)系統(tǒng)其它模塊的實現(xiàn)比較簡單,在這里不再贅述。需要注意的是在Spring的配置文件中我添加了如下的事務(wù)代理代碼:<bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sess

49、ionFactory" /></bean>創(chuàng)建一個事務(wù)管理器,它需要依賴注入sessionFactory對象<bean id="transactionInterceptor"class="erceptor.TransactionInterceptor"><property name="transactionManager" ref="transactionManager" /><property name="transacti

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論