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