從零打造在線網盤系統之SSH框架整合

歡迎瀏覽Java工程師SSH教程從零打造在線網盤系統系列教程,本系列教程將會使用SSH(Struts2+Spring+Hibernate)打造一個在線網盤系統,本系列教程是從零開始,因此會詳細以及着重地闡述SSH三個框架的基礎知識,第四部分將會進入項目實戰,若是您已經對SSH框架有所掌握,那麼能夠直接瀏覽第四章,源碼均提供在GitHub/ssh-network-hard-disk上供你們參閱html

本章目標

  • Struts2和Hibernate整合
  • Struts2,Spring,Hibernate整合

既然本章將的是整合Struts2,Spring,Hibernate三大框架,爲什麼還要說起Struts2和Hibernate的整合呢?我但願小夥伴們能在Struts2和Hibernate的整合中明白若是缺乏Spring框架裝配各層須要的Bean是多麼遺憾的一件事啊!若是沒有Spring咱們在整合Struts2和Hibernate將會面臨如下問題java

  1. 頻繁建立和管理各層實現類,使程序耦合嚴重
  2. 頻繁編寫管理數據庫連接及事務等模板代碼
  3. ...

Struts2和Hibernate整合 示例源碼下載

下圖所示是使用Struts2和Hibernate整合編寫的一個WEB網頁,各位運行本節示例源碼訪問http://localhost:8080/index.jsp 本章三種整合完整工程都可經過github下載
mysql

在Struts2和Hibernate的整合中,爲了不"頻繁建立和管理各層實現類,使程序耦合嚴重" ,在示例源碼中使用工廠模式來管理實現類;爲了不"頻繁編寫管理數據庫連接及事務等模板代碼"問題,在示例源碼中使用了 HibernateSessionFactory工具類來統一管理Hibernate的Session的管理,可是這些解決方法,僅僅能避免咱們少寫一些代碼,當隨着程序的增大,咱們仍然要面臨解耦和重複編碼問題git

Struts2,Spring,Hibernate整合 示例源碼下載

咱們在Struts2和Hibernate整合中能夠看到,咱們須要使用Spring來替咱們解決程序的解耦和重複編碼問題,那麼Spring是如何來解決問題的呢?(依賴注入)github

- 整合思路

  • Struts2和Spring整合
  • Spring和Hibernate整合

- 整合步驟

第一步:導入依賴(這裏有坑,注意Spring的版本不要過高)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>

第二步:肯定配置文件sql

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下載
apache

<!--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.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下載

相關文章
相關標籤/搜索