從零打造線上網盤系統之SSH框架整合
歡迎瀏覽 ofollow,noindex" target="_blank">Java工程師SSH教程從零打造線上網盤系統系列教程 ,本系列教程將會使用SSH(Struts2+Spring+Hibernate)打造一個線上網盤系統,本系列教程是從零開始,所以會詳細以及著重地闡述SSH三個框架的基礎知識,第四部分將會進入專案實戰,如果您已經對SSH框架有所掌握,那麼可以直接瀏覽第四章,原始碼均提供在 GitHub/ssh-network-hard-disk 上供大家參閱
本章目標
- Struts2和Hibernate整合
- Struts2,Spring,Hibernate整合
既然本章將的是整合Struts2,Spring,Hibernate三大框架,為何還要提及Struts2和Hibernate的整合呢?我希望小夥伴們能在Struts2和Hibernate的整合中明白如果缺少Spring框架裝配各層需要的Bean是多麼遺憾的一件事啊!如果沒有Spring我們在整合Struts2和Hibernate將會面臨以下問題
Struts2和Hibernate整合 示例原始碼下載
下圖所示是使用Struts2和Hibernate整合編寫的一個WEB網頁,各位執行本節示例原始碼訪問http://localhost:8080/index.jsp 本章三種整合完整工程均可通過github下載

在Struts2和Hibernate的整合中, 為了避免"頻繁建立和管理各層實現類,使程式耦合嚴重" ,在示例原始碼中使用工廠模式來管理實現類 ; 為了避免"頻繁編寫管理資料庫連結及事務等模板程式碼"問題,在示例原始碼中使用了 HibernateSessionFactory工具類來統一管理Hibernate的Session的管理 ,但是這些解決方法,僅僅能避免我們少寫一些程式碼,當隨著程式的增大,我們 仍然要面臨解耦和重複編碼問題
Struts2,Spring,Hibernate整合 示例原始碼下載
我們在Struts2和Hibernate整合中可以看到,我們需要使用Spring來替我們解決程式的解耦和重複編碼問題,那麼Spring是如何來解決問題的呢?(依賴注入)
- 整合思路
- Struts2和Spring整合
- Spring和Hibernate整合
- 整合步驟
第一步:匯入依賴(這裡有坑,注意Spring的版本不要太高)
<dependencies> <!--Spirng--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.16.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.16.RELEASE</version> </dependency> <!--Spring-orm--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>4.3.16.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.3.16.RELEASE</version> </dependency> <!--Hibernate--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.3.7.Final</version> </dependency> <!--Struts2--> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.16</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>2.5.18</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.5.17</version> </dependency> <!--資料庫相關--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> <!--Servlet相關--> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> </dependencies>
第二步:確定配置檔案
Struts2-Spring整合方式1:即Struts2的Action由Struts2本身進行管理,Spring不參與操作,當依賴包存在Struts2-spring外掛時,該外掛會自動將Service服務注入到Action 本章三種整合完整工程均可通過github下載

public class UserAction extends ActionSupport implements ModelDriven<User> { private UserService userService; public void setUserService(UserService userService) { this.userService = userService; } @Action(value = "getUser", results = { @Result(name = "success", location = "/index.jsp") }) public String get() throws Exception { User user = userService.get(this.user.getId()); ValueStack valueStack = ActionContext.getContext().getValueStack(); valueStack.set("user", user); return SUCCESS; } ...... }
Struts2-Spring整合方式2:即Struts2的Action不再由Struts2本身管理,而交由Spring進行管理 本章三種整合完整工程均可通過github下載

<!--Spring配置WEB層--> <bean name="userAction" class="com.jimisun.action.UserAction" scope="prototype"> <property name="userService" ref="userService"/> </bean>
<!--在Struts2僅僅配置對映關係--> <package name="ssh" extends="struts-default" namespace="/"> <global-results> <result name="success">/index.jsp</result> </global-results> <action name="addUser" class="userAction" method="add"> </action> <action name="getUser" class="userAction" method="get"> </action> </package>
Spring-Hibernate整合:當Hiberante和Spring一同使用的時候,我們不再需要hibernate.cfg.xml檔案,那麼怎麼配置hibernate呢?我們可以使用Spring配置嘛
<!--配置Hibernate--> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <!-- 先載入連線池 --> <property name="dataSource" ref="dataSource"/> <!-- 載入方言,載入可選 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.SQL/">MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <!-- 引入對映的配置檔案 --> <property name="mappingResources"> <list> <value>com/jimisun/domain/User.hbm.xml</value> </list> </property> </bean>
整合結果

本章小結
本章通過Struts2和Hibernate的整合明白了我們要重複進行編碼和解耦,而通過使用Spring的依賴注入讓我們不再頻繁管理Bean,通過Spring的面向切面程式設計我們不再編寫類似獲取事務提交事務等操作..... 當然本章不是Spring的教程,具體請移步另一系列教程Java開發上帝之眼教程,本章仍然著重關注SSH的整合,本章提供的整合工程均可通過Github下載