網(wǎng)站首頁制作公司長沙百度關(guān)鍵詞推廣
資料下載鏈接
介紹
基于SSH框架的管理系統(tǒng)?簡潔版?;
實現(xiàn)?登錄?、?注冊?、?增?、?刪?、?改?、?查?;
可繼續(xù)完善增加前端、校驗、其他功能等;
可作為?SSH(Structs Spring Hibernate)項目?開發(fā)練習基礎(chǔ)模型;
課程設(shè)計?、?畢業(yè)設(shè)計?開發(fā)基礎(chǔ);
任何復雜的框架都是簡單的知識組合并延伸的,學好基礎(chǔ)知識才是最重要的;
此項目簡單,便于理解基本原理,為復雜SSM復雜項目的開發(fā)打下基礎(chǔ)。
環(huán)境準備
開發(fā)平臺:Idea 2019
數(shù)據(jù)庫:MySQL 5.0.22
服務器:Tomcat 9.0.37
注意:需要安裝IDEA開發(fā)平臺、MySQL數(shù)據(jù)庫和Tomcat服務器,版本不一定完全一致,做好版本適應性配置即可。
項目結(jié)構(gòu)
1.數(shù)據(jù)庫及Java代碼文件?
2.Jsp等前端代碼?
3.Tomcat服務器配置與運行
4.MySQL數(shù)據(jù)庫?
基本原理
1. 相關(guān)技術(shù)
Structs
一、Structs1原理
1.Structs1原理圖
2.Structs1原理步驟
用戶在視圖層輸入數(shù)據(jù)。
第一步:Structs框架總控制器,初始化,開始讀取strusts-config.xml文件。Struts框架的總控制器ActionServlet是一個Servlet,在web.xml中配置成自動啟動的Servlet,在啟動時總控制器會讀取配置文件(struts-config.xml)的配置信息,為Struts中不同的模塊初始化相應的對象。(面向?qū)ο笏枷?
第二步:視圖層向總控制器發(fā)送Http請求,用戶提交表單或者通過URL向WEB服務器提交請求,請求的數(shù)據(jù)用HTTP協(xié)議傳給web服務器
第三步:Form填充;structs的總控制器ActionServlet在用戶提交請求時將數(shù)據(jù)放到對應的form對象中的成員變量中。
第四步:派發(fā)請求;控制器根據(jù)配置信息,對象ActionConfig將請求派發(fā)到具體的Action,對應的formBean一并傳給這個Action中的excute()方法。
第五步:處理業(yè)務;Action一般只包含一個excute()方法,負責執(zhí)行相應的業(yè)務邏輯(調(diào)用其它的業(yè)務模塊)完畢后返回一個ActionForward對象。服務器通過ActionForward對象進行轉(zhuǎn)發(fā)工作。
第六步:返回響應;Action將業(yè)務處理的不同結(jié)果返回一個目標響應對象給總控制器。
第七步:查找響應;總控制器根據(jù)Action處理業(yè)務返回的目標響應對象,找到對應的資源對象,一般情況下為jsp頁面。
第八步:響應用戶;目標響應對象將結(jié)果傳遞給資源對象,將結(jié)果展現(xiàn)給用戶。
3.Structs的優(yōu)缺點
優(yōu)點:
①開源的框架,結(jié)構(gòu)清晰②是MVC的經(jīng)典實現(xiàn)(MVC是一種思想,而不是一種技術(shù))③處理異常機制,實現(xiàn)國際化 ④具有強大的標簽庫 ⑤解決了JSP頁面存在大量的JAVA代碼,維護起來方便 ⑥在formBean中會自動提交,不會去使用傳統(tǒng)的get、set方法得到值、取值
缺點:
①配置復雜 ②測試不方便 ③依賴web容器 ④action是一個單例模式,必須設(shè)置為線程安全
二、Structs2原理
1.Structs2原理圖
2.Struct2原理步驟
第一步:客戶端初始化一個指向Servlet容器(例如Tomcat)的請求
第二步:請求經(jīng)過一系列的過濾器(Filter)
第三步:接著FilterDispatcher被調(diào)用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調(diào)用某個Action
第四步:如果ActionMapper決定需要調(diào)用某個Action,FilterDispatcher把請求的處理交給ActionProxy
第五步:ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調(diào)用的Action類
第六步:ActionProxy創(chuàng)建一個ActionInvocation的實例
第七步:ActionInvocation實例使用命名模式來調(diào)用,在調(diào)用Action的過程前后,涉及到相關(guān)攔截器(Intercepter)的調(diào)用
第八步:一旦Action執(zhí)行完畢,ActionInvocation負責根據(jù)struts.xml中的配置找到對應的返回結(jié)果。返回結(jié)果通常是(但不總是,也可能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2框架中繼承的標簽。在這個過程中需要涉及到ActionMapper
注意:在上述過程中所有的對象(Action,Results,Interceptors等)都是通過ObjectFactory來創(chuàng)建的
3.Structs2的優(yōu)缺點
優(yōu)點:
①大量的攔截器:Struts2本身提供了大量的可重用的攔截器,比如類型轉(zhuǎn)換攔截器,很多時候從頁面取得參數(shù),這個時候它是String類型的,需要手動。
②基于插件的框架:Struts2是一個基于插件的框架,社區(qū)中提供了很多實用的插件,比如jfreechat/json等等,使用這些插件可以簡化我們的開發(fā),加快開發(fā)進度。Struts2最大的缺點莫過于在好多web服務器上支持不好,例如在websphere5.5,weblogic8.1及以前版本支持非常查,需要用最新的。
③多種視圖的支持:多種視圖的支持:jsp,freemarker,Veloctiy,甚至可以通過輕松的改造支持pdf,同一個項目中可以支持多種視圖。
④更加的模塊化:與Struts1.X 相比,Struts2更加的模塊化,可以輕松將配置信息按功能界限拆分成多個文件,便于管理和團隊協(xié)作開發(fā)。
⑤與Spring的集成:與Struts1.x相比,Struts2不必再自己編寫singleton,進一步的降低了程序間的耦合性,就Struts2內(nèi)部本身而言,降低了框架本身的偶合性。
⑥基于pojo易于測試:在Struts1.x中需要Mock出這兩個Http對象,很難編寫Action的單元測試,與Struts1.x相比,Struts2的Action 不再依賴于HttpServletRequest和HttpServletResponse對象,使我們能夠更方便的針對Action編寫單元測試。
缺點:
①Struts2中Action中取得從jsp中傳過來的參數(shù)時麻煩??梢詾镾truts2的Action中的屬性配置上Getter和Setter方法,通過默認攔截器,就可以將請求參數(shù)設(shè)置到這些屬性中。但當請求參數(shù)很多時,Action類就顯得很臃腫。Action中的屬性不但可以用來獲得請求參數(shù)還可以輸出到Jsp中,會更亂。
②校驗比較繁瑣。如果校驗出錯的只能給用戶提示一些信息。如果有多個字段,每個字段出錯時返回到不同的畫面,在Strut2框架下借助框架提供的校驗邏輯就不容易實現(xiàn)。
③安全性有待提高。使用縮寫的導航參數(shù)前綴時的遠程代碼執(zhí)行漏洞,另一個是使用縮寫的重定向參數(shù)前綴時的開放式重定向漏洞。
Spring
1.簡介
Spring是一個開源框架,是2003年興起的輕量級的Java開發(fā)框架,為解決企業(yè)應用開發(fā)的復雜性而創(chuàng)建的。簡單來說,Spring是一個輕量級的控制反轉(zhuǎn)(IOC)和面向切面(AOP)的容器框架。日常開發(fā)中IOC容器使用較多,可以裝載Bean,即Java中的類,不用在每次使用類的時候初始化,很少出現(xiàn)關(guān)鍵字new。另外spring的AOP,事務管理等等也會經(jīng)常使用。
IOC:控制反轉(zhuǎn),是一種降低對象之間耦合關(guān)系的設(shè)計思想。如:租賃房屋,平常租房需要自己逐個小區(qū)尋找房屋,然后使用了IOC之后,即需找一個租房中介,把對房屋的需求告訴中介,就可以直接找到合適的房屋。即把需求交給了第三方,有第三方幫助你完成你的需求,中介就相當于Spring容器。
AOP:面向切面編程,是面向?qū)ο箝_發(fā)的一種補充,允許開發(fā)人員在不改變原來模型的基礎(chǔ)上動態(tài)的修改模型以滿足新的需求,如:動態(tài)的增加日志、安全或異常處理等。AOP使業(yè)務邏輯各部分間的耦合度降低,提高程序可重用性,提高開發(fā)效率。
2.Spring的主要特征
①輕量級:Spring是一個輕量級的開發(fā)框架,基本版本大約只有2M
②IOC:控制反轉(zhuǎn),應用程序中對象之間的依賴是由Spring 來控制的
③AOP:面向切面編程,Spring支持面向切面編程,這樣可以將業(yè)務邏輯和系統(tǒng)服務分開,分離
④容器:包含并管理應用程序中對象的生命周期和配置信息
⑤MVC思想:Spring也是基于MVC思想的框架,也遵循模型-視圖-控制器這三個層次
⑥事務:spring提供一個持續(xù)化的接口,可以上至擴展到本地事務下至擴展到全局事務
⑦異常處理:Spring 提供方便的API把具體技術(shù)相關(guān)的異常(比如由JDBC,hibernate,or JDO拋出的)轉(zhuǎn)化為一致的unchecked 異常。
3.Spring優(yōu)缺點
優(yōu)點:
①Spring能有效地組織你的中間層對象。
②Spring能消除在許多工程中常見的對Singleton的過多使用。降低了系統(tǒng)的可測試性和面向?qū)ο蟮某潭取?/p>
③通過一種在不同應用程序和項目間一致的方法來處理配置文件,Spring能消除各種各樣自定義格式的屬性文件的需要。
④通過把對接口編程而不是對類編程的代價幾乎減少到?jīng)]有,Spring能夠促進養(yǎng)成好的編程習慣。 ⑤Spring被設(shè)計為讓使用它創(chuàng)建的應用盡可能少的依賴于他的APIs。在Spring應用中的大多數(shù)業(yè)務對象沒有依賴于Spring。
⑥使用Spring構(gòu)建的應用程序易于單元測試。
⑦Spring能使EJB的使用成為一個實現(xiàn)選擇,而不是應用架構(gòu)的必然選擇。能選擇用POJOs或local EJBs來實現(xiàn)業(yè)務接口,卻不會影響調(diào)用代碼。
⑧Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適用于許多web應用。例如,Spring能使用AOP提供聲明性事務管理而不通過EJB容器,如果你僅僅需要與單個數(shù)據(jù)庫打交道,甚至不需要一個JTA實現(xiàn)。
⑨Spring為數(shù)據(jù)存取提供了一個一致的框架,不論是使用的是JDBC還是O/R mapping產(chǎn)品(如Hibernate)。
缺點:
①jsp中要寫很多代碼、控制器過于靈活,缺少一個公用控制器
②Spring不支持分布式,這也是EJB仍然在用的原因之一。
Hibernate
1.hibernate的工作原理
第一步:Configuration.config() 來讀取xml配置文件
第二步:Configuration.config()來讀取配置文件里面的映射信息
第三步:創(chuàng)建會話工廠
第四步:打開會話
第五步:開啟事務
第六步:持久化到數(shù)據(jù)庫
第七步:關(guān)閉會話
第八步:關(guān)閉會話工廠
2.hibernate優(yōu)缺點
優(yōu)點:
①hibernate是基于ORMapping技術(shù)的開源的框架,對JDBC進行了輕量級的封裝,使用面向?qū)ο蟮乃季S來操縱數(shù)據(jù)庫。
②hibernate提供了session緩存和二級緩存,對于不需要進行復雜查詢的系統(tǒng),性能有提升。
③低侵入式設(shè)計
缺點:
①hibernate不容易上手,學習成本太高
②hibernate由于不直接對底層數(shù)據(jù)庫進行操作,所以不適合復雜的查詢(統(tǒng)計)
③不適合大量的聚集操作(存儲過程)
2. 基本原理
SSH是 Struts、Spring、Hibernate的一個集成框架,是目前較流行的一種web應用程序開源框架,用于構(gòu)建靈活、易于擴展的多層Web應用程序。
SSH構(gòu)建系統(tǒng)的基本業(yè)務流程:
Struts作為系統(tǒng)的整體基礎(chǔ)架構(gòu),負責MVC的分離,在Struts框架的模型部分,控制業(yè)務跳轉(zhuǎn),利用Hibernate框架對持久層提供支持。Spring一方面作為一個輕量級的IoC容器,負責查找、定位、創(chuàng)建和管理對象及對象之間的依賴關(guān)系,另一方面能使Struts和Hibernate更好地工作。
SSH框架的系統(tǒng)從職責上分為四層:表示層、業(yè)務邏輯層、數(shù)據(jù)持久層和域模塊層(實體層)。
SSH框架的項目,該架構(gòu)主要分為三個層次:
(1)Struts2:負責web層
(2)Spring:業(yè)務層的管理
(3)Hibernate:負責數(shù)據(jù)持久化
在表示層中,首先通過JSP頁面實現(xiàn)交互界面,負責傳送請求(Request)和接收響應(Response),然后Struts根據(jù)配置文件(struts-config.xml)將ActionServlet接收到的Request委派給相應的Action處理。
在業(yè)務層中,管理服務組件的Spring IoC容器負責向Action提供業(yè)務模型(Model)組件和該組件的協(xié)作對象數(shù)據(jù)處理(DAO)組件完成業(yè)務邏輯,并提供事務處理、緩沖池等容器組件以提升系統(tǒng)性能和保證數(shù)據(jù)的完整性。
在持久層中,則依賴于Hibernate的對象化映射和數(shù)據(jù)庫交互,處理DAO組件請求的數(shù)據(jù),并返回處理結(jié)果。
采用上述開發(fā)模型,不僅實現(xiàn)了視圖、控制器與模型的徹底分離,而且還實現(xiàn)了業(yè)務邏輯層與持久層的分離。無論前端如何變化,模型層只需很少的改動,并且數(shù)據(jù)庫的變化也不會對前端有所影響,大大提高了系統(tǒng)的可復用性。而且由于不同層之間耦合度小,有利于團隊成員并行工作,大大提高了開發(fā)效率。
頁面展示
1.登錄頁面?
2.注冊頁面?
3.主頁?
4.新增頁面?
5.刪除頁面?
6.修改頁面?