SSH三大框架整合小案例

一、創建項目引入jar包

1、下載包(我選用的是Hibernate5.2.10+Struts2.3.33+Spring4.3.5)

Hibernate下載地址: http://hibernate.org/orm/

Struts2下載地址: http://struts.apache.org/download     

Spring下載地址: http://repo.spring.io/release/org/springframework/spring/

2、導入項目用到的jar包

(1)Hibernate用到的包:分別是lib->required中的10個包以及lib->optional->c3p0中的c3p0-0.9.5.2.jar和

mchange-commons-java-0.2.11.jar這兩個包;

(2)Struts2用到的jar包:解壓apps->struts2-blank.war,然後拷貝struts2-blank->WEB-INF->lib下的13個包,

然後在和apps同目錄下的lib文件夾下找到commons-logging-1.1.3.jar和struts2-spring-plugin-2.3.33.jar兩個包(可以直接在lib文件夾下

找到這15個包,但是有點麻煩.)。

(3)Spring用到的jar包:lib文件夾下所有的.jar包,即不選擇javadoc.jar和sources.jar即可;

導好包之後的狀態爲:

二、引入相應配置文件

1、Struts2中配置文件 struts.xml:可以將我們剛剛解壓的struts2-blank中WEB-INF\src\java下的struts.xml文件拷貝,

刪除沒用的標籤即可;

2、日記文件 log4j2.xml:同樣可以將struts2-blank中WEB-INF\src\java下的log4j2.xml文件拷貝,然後修改成自己所需的版本;

3、jdbc.properties文件:輸入以下內容,修改自己的數據庫名,用戶名和密碼即可;

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssh
jdbc.username=root
jdbc.password=123

4、Spring中配置文件:

(1)applicationContext.xml文件:創建一個新的xml文件,輸入以下內容即可;

<?xml version="1.0" encoding="UTF-8"?>
<beans  
    xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:aop="http://www.springframework.org/schema/aop"   
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd  
  http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
  http://www.springframework.org/schema/aop  
    http://www.springframework.org/schema/aop/spring-aop.xsd 
    http://www.springframework.org/schema/tx   
    http://www.springframework.org/schema/tx/spring-tx.xsd"> 

/beans>

5、最後在web.xml文件中配置Struts2和Spring:在web.xml文件中輸入一下內容即可(Ctrl+Shift+T快捷查找)。

(1)配置Spring:

<!-- Spring的框架的核心監聽器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 加載本地的applicationContext.xml文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
 

(2)配置Struts2:

<!-- Struts2的框架的核心過濾器配置 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

三、創建包結構並創建實體

1、創建以下包結構(可以自定義前面的模塊名):

(1)cn.gdedu.ssh.action

(2)cn.gdedu.ssh.dao

(3)cn.gdedu.ssh.domain

(4)cn.gdedu.ssh.service

2、在domain包下面創建product實體,封裝了pid,pname和price三個變量的javaBean類:

private Integer pid;
private String pname;
private Double price;

下面的getter和setter方法省略...

四、創建頁面addProduct.jsp

<h1 align="center">保存商品的頁面</h1>
  <s:form action="product_save"  method="post" namespace="/" theme="simple">
  <table border="1" width="400" align="center">
  <tr>
  <td>商品名稱</td>
  <td><s:textfield name="pname"></s:textfield></td>
  </tr> 
  <tr>
  <td>商品價格</td>
  <td><s:textfield name="price"></s:textfield></td>
  </tr> 
  <tr>
  <td colspan="2" align="center"><input type="submit" value="添加"></td>
  </tr>
  </table>  
  </s:form>

五、編寫Action、DAO、Service層代碼

(1)在dao包下面創建ProductDao.java文件;

(2)在service包下面創建ProductService.java文件:

public class ProductService {
//業務層注入Dao的類
private ProductDao productDao;
public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}

}

(3)在action包下面創建ProductAction.java:繼承ActionSupport類,以及實現模型驅動,即實現ModelDriven接口,並加上泛型;

public class ProductAction extends ActionSupport implements ModelDriven<Product>{
private static final long serialVersionUID = 1L;
/**
* 模型驅動使用的類
*/
private Product product=new Product();
@Override
public Product getModel() {
return this.product;
}

/**
* Struts和Spring整合過程中按名稱自動注入的業務層類
*/
private ProductService productService;
public void setProductService(ProductService productService) {
this.productService = productService;
}

        }

六、配置Action、DAO、Service類

(1)在applicationContext.xml中加入action,dao和service的bean結構:

<!-- 配置Action的類,其中scope是指action中的productService變量是多例模式 -->
<bean id="productAction" class="cn.gdedu.ssh.action.ProductAction" scope="prototype">
<!-- 注入業務層的類 -->
<property name="productService" ref="productService"></property>
</bean>

<!-- 配置業務層的類 -->
<bean id="productService" class="cn.gdedu.ssh.service.ProductService">
<!-- 注入DAO的類 -->
<property name="productDao" ref="productDao"/>
</bean>

<!-- 配置DAO的類 -->
<bean id="productDao" class="cn.gdedu.ssh.dao.ProductDao">
</bean>

(2)在struts.xml中配置action類:

<package name="ssh" extends="struts-default" namespace="/">
    <!-- Action自身管理類:Struts2和Spring整合的方法一 -->
    <!-- <action name="product_*" class="cn.gdedu.ssh.action.ProductAction" method="{1}"></action> -->
   
    <!-- 交給Spring管理,能夠實現AOP處理,建議使用第二種方式:就是class中使用Spring中的id名稱即可-->
    <action name="product_*" class="productAction" method="{1}"></action>    
    </package>

(3)配置完成後,在action類中創建save方法,然後分別創建service和dao層的save方法給action調用,然後就可以啓動服務器進行測試(點擊添加按鈕,Console控制檯將出現三行在action,service和dao中需要輸出的內容)

//保存商品的執行的方法:save
public String save(){
System.out.println("Action中的save方法執行了...");
productService.save(product);
return NONE;
}
  

七、創建數據庫並配置實體類文件;

(1)進入dos界面:輸入用戶名密碼登錄mysql數據庫,並創建ssh數據庫,過程略;

(2)在domain包下創建product.hbm.xml實體類映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 
hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" 
>
<hibernate-mapping>
<class name="cn.gdedu.ssh.domain.Product" table="product">
<id name="pid" column="pid">
<generator class="native"/><!-- native表示自增 -->
</id>
<property name="pname" column="pname" length="20"/>
<property name="price" column="price"/>
</class>
</hibernate-mapping>

八、配置c3p0連接池和Hibernate的一些屬性

(1)在applicationContext.xml中加入以下內容:

<!-- 啓動服務器,自動加載配置文件,將自動創建表 -->

<!-- 引入外部的屬性文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>

<!-- 配置c3p0連接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>

<!-- 配置Hibernate的相關屬性 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 注入連接池 -->
<property name="dataSource" ref="dataSource"></property>

<!-- 配置Hibernate的屬性 -->
<property name="hibernateProperties">
<props>
<!-- 這裏注意我們使用的是Hibernate5,所以要用MySQL5Dialect方言,否則會報錯 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.fromat_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>

<!-- 加載Hibernate的映射文件 -->
<property name="mappingResources">
<list>
<!-- 這裏注意是/而不是. -->
<value>cn/gdedu/ssh/domain/Product.hbm.xml</value>
</list>
</property>
</bean>

九、編寫DAO中的代碼

(1)productDao類繼承HibernateDaoSupport類;

(2)在applicationContext.xml中配置Dao時加入:

<!-- 配置DAO的類 -->
<bean id="productDao" class="cn.gdedu.ssh.dao.ProductDao">
<!-- 注入HibernateDaoSupport模板,只需要注入sessionFactory,然後通過getHibernateTemplate方法即可 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

(3)在productDao中調用模板完成:

//DAO中的保存商品的方法
public void save(Product product) {
//調用sessionFactory中的getHibernateTemplate的方法.
this.getHibernateTemplate().save(product);
System.out.println("DAO中的save方法執行了...");
}
  

十、添加事務管理

(1)在applicationContext.xml中加入以下內容:

<!-- 配置事務管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<!-- 開啓註解事務,在Service類上面寫上transational註解,注意導對包即可 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

      (2)在ProductService類上加上@Transactional註解


最後測試的結果:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章