首先,SSH為Struts 2+Spring+Hibernate這三個框架的集成框架,是目前較流行的一種Web應用程序開源集成框架,用於構建靈活、易於擴展的多層Web應用程序。是目前較流行的一種JAVA Web應用程序開源框架。
1.JAVA EE
Ø適用於小型設備和智能卡的Java 平台Micro版(Java Platform Micro Edition,Java ME)Ø適用於桌面系統的Java 平台標准版(Java Platform Standard Edition,Java SE)Ø適用於創建服務器應用程序和服務的Java平台企業版(Java Platform EnterPrise Edition,Java EE)。

- 表現層:此層由系列的jsp頁面、Velocity頁面、PDF文檔視圖組件組成,負責收集用戶請求,並顯示處理結果。
- 控制器層:此層由系列控制器組成,這些控制器用於攔截用戶請求,並調用業務邏輯組件的業務邏輯方法,處理用戶請求,並根據處理結果轉發到不同的表現層組件。
- 業務邏輯層:此層由系列的業務邏輯對象組成。業務邏輯對象實現了系統所需要的業務邏輯方法。這些業務邏輯方法可能是依賴DAO組件實現的業務邏輯方法,也可能僅僅用於暴露Domain Object對象所實現的業務邏輯方法。
-
數據訪問對象(Data Access Object,DAO)層:此層由系列的DAO組成,這些DAO實現了對數據庫的創建、查詢、更新和刪除(CRUD)等原子操作。
-
領域對象(Domain Object )層:此層由系列的POJO(Plain Old Java Object,普通傳統的Java對象)
2.SSH框架
集成SSH框架的系統從職責上分為四層:表示層、業務邏輯層、數據持久層和域模塊層(實體層) Struts 2進行流程控制,Spring進行業務流轉,Hibernate進行數據庫操作的封裝。整體框架和業務層用Spring,表示層用Struts,持久層用Hibernate。
Struts 是一個很好的MVC框架,主要技術是Servlet和Jsp。Struts的MVC設計模式可以使我們的邏輯變得很清晰,讓我們寫的程序層次分明。
Spring 提供了管理業務對象的一致方法,並鼓勵注入對接口編程而不是對類編程的良好習慣,使我們的產品在最大程度上解耦。
Hibernate 是用來持久化數據的,提供了完全面向對象的數據庫操作。Hibernate對JDBC進行了非常輕量級的封裝,它使得與關系型數據庫打交道變得非常輕松。
以下是SSH架構圖:
Struts負責Web層:
ActionFormBean接收網頁中表單提交的數據,然后通過Action進行處理,再Forward到對應的網頁,在Struts-config.xml中定義了<action-mapping>,ActionServlet會加載進來。
Spring負責業務層管理,即Service:
Service為Action提供統一的調用接口,封裝持久層的DAO,並集成Hibernate,Spring可對JavaBean和事物進行統一管理。
Hibernate負責持久層,完成數據庫的CRUD操作:
Hibernate有一組hbm.xml文件和PO,是與數據庫中的表相對應的,然后定義DAO,這些是與數據庫打交道的類。
在Struts+Spring+Hibernate系統中,對象之間的調用流程如下:
Struts——>Spring——>Hibernate
JSP——>Action——>Service——>DAO——>Hibernate
分割線
Struts:
先學習一下Struts框架的運行原理和搭建:
我使用的開發平台是myEclipse Professional 2014
1.首先新建一個web工程:
2.為工程添加Struts2支持:
之后點擊finish就可以了,然后我們就會發現在src下多了struts.xml配置文件
在struts2中,一旦讀取到struts.xml文件中的內容后,內容就以javabeans的形式存放在內存里,以后struts2對用戶的每次請求處理將直接使用內存中的數據,而不是再次讀取xml文件。
,和struts2.1 Libraries,其中包含了一些開發所需的jar包。
3.發現web.xml配置文件也擁有了基本的內容:
4 測試能否運行:
我為myEclipse配置的tmcat版本是8,tomcat配置的過程也講一下吧:
Windows->Preferencess->MyEclipse->Servers->tomcat
1處選擇tomcat解壓后的父目錄,2 處選擇enable,3點擊一下apply,最后確定。
然后最好是把myEclipse自帶的tomcat disable掉。
運行后在控制台未發現錯誤,所以配置成功。
接下來學習一下struts.xml配置:
模板可以在struts解壓文件的app目錄下解壓例子打開得到:
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="HelloWorld" class="struts2Test/HelloWorld" method="exec">
<result>hello.jsp</result>
</action>
</package>
</struts>
package:這里的package和java中的package的概念類似,主要用來管理一組業務功能相關的action.在實際應用中,我們應該把一系列業務相關的action放下同一package下。包還可以通過屬性“abstract=true”來定義成抽象包,抽象包中不能包含action.
name屬性是必須指定的,是package的id,當其他類繼承這個包時,則需要引用name屬性;
namesapce:是用來組織和重用代碼的編譯單元;
extends:繼承的package的名字;一般來說,每個包都應該繼承struts-default包,struts-default包定義了攔截器和result類型,提供了struts2的核心功能。
action:
name屬性也是相當於id,可以通過name來引用某個action;
class:表明當action被調用時使用哪個類;
method:表明當action被調用時使用class中的哪個方法;(注,在struts2中action中的方法的類型的返回值指定為String)
result中制定視圖的路徑
然后來新建action類和其方法:
package strutsTest; public class HelloWorld { private String meg; public String getMeg() { return meg; } public String exec(){ meg="My first atruts application"; return "Hello world!"; } }
然后創建jsp文件來調用HelloWorld中的msg中的內容,也就是在jsp中顯示這個字符串。
因為是只供Struts的action來使用這個jsp的,所以把這個新建的jsp放在WEB-INF目錄下:
新建一個文件夾存放jsp文件:
待續:(jsp界面沒運行出來,在找原因中)
一些總結:
1.struts和servletAPI,strutsAPI沒有緊密的耦合,屬於無入侵式設計。
2.提供了攔截器,利用攔截器可以進行面向切面編程(AOP),實現如權限攔截等功能。
3.提供了類型轉換器,可以把特殊的請求參數轉換成需要的類型。
4.提供多種表現層支持,eg:JSP,FreeMarker,Velocity.
5.輸入校驗可以對指定的方法進行校驗。
6.提供了全局范圍,包范圍,action范圍的global source file management.