Struts2教學
Struts2快速入門
Struts2 MVC架構
Struts2 是什麼?
Struts2 環境配置
Struts2 體系結構
Struts2 Hello World 實例
Struts2 配置文件
Struts2 Action/動作
Struts2 攔截器
Struts2 結果和結果類型
Struts2 值棧/OGNL
Struts2 文件上傳
Struts2 MySQL數據庫訪問
Struts2 發送郵件Email
Struts2 驗證框架
Struts2 基於XML校驗
Struts2 本地化/國際化(i18n)
Struts2 類型轉換
Struts2 主題和模板
Struts2 異常處理
Struts2 註釋
Struts2 註釋類型
Struts2 控件標籤
Struts2 iterator標籤
Struts2 if/else標籤
Struts2 merge標籤
Struts2 append標籤
Struts2 generator標籤
Struts2 數據標籤
Struts2 action標籤
Struts2 include標籤
Struts2 bean 標籤
Struts2 date 標籤
Struts2 param 標籤
Struts2 property 標籤
Struts2 set 標籤
Struts2 text 標籤
Struts2 url標籤
Struts2 表單標籤
Struts2 Ajax 標籤
Struts2和Spring集成
Struts2和Tiles集成
Struts2和Hibernate集成
Struts 2 hello world (XML版本)
Struts2註解示例
Struts2 @ResultPath註釋示例
Struts2 include(包含)多個配置文件
Struts2命名空間配置和解釋
Struts2開發者模式
如何刪除Struts2動作的後綴擴展名
使用Struts2動作
Struts2的ActionError&ActionMessage示例
Struts2模型驅動實例
Struts2映射攔截動作
Struts2重寫攔截器參數
Struts2攔截器棧的例子
Struts2 execAndWait攔截器例子
Struts2 <s:textfield>文本示例
Struts2 <s:password>密碼示例
Struts2 <s:hidden>隱藏值例子
Struts2 <s:textarea>文本域實例
Struts2 <s:radio>單選按鈕例子
Struts2單選預選按鈕值
Struts2 <s:checkbox>複選框例子
Struts2設置多個複選框缺省值
Struts2 <s:checkboxlist>多個複選框例子
Struts2 <s:select>下拉框例子
Struts2自動選擇下拉框的值
Struts2 <s:combobox>組合框的例子
Struts2 <s:head>示例
Struts2文件上傳例子
Struts2上傳多個文件例子
Struts2 <s:doubleselect>示例
Struts2 <s:updownselect>示例
Struts2 <s:optiontransferselect>示例
Struts2 <sx:datetimepicker>示例
Struts2 <sx:autocompleter>自動提示例子
Struts2 autocompleter+JSON例子
Struts2 <s:iterator>迭代器標籤示例
Struts2 if,elseif,else標籤示例
struts2 <s:append>標籤示例
Struts2 <s:generator>標籤示例
Struts2 <s:merge>標籤示例
Struts2 <s:sort>標籤示例
Struts2 <s:subset>標籤示例
Struts2 <s:a>標籤示例
Struts2 <s:action>標籤示例
Struts2 <s:bean>標籤示例
Struts2 <s:date>標籤示例
Struts2 <s:debug>標籤示例
Struts2 <s:include>標籤示例
Struts2 <s:i18n>標籤示例
Struts2 <s:param>標籤示例
Struts2 <s:property>標籤實例
Struts2 <s:push>標籤示例
Struts2 <s:set>標籤示例
Struts2 <s:texttag>標籤示例
Struts2 <s:url>標籤示例
Struts2資源包使用示例
Struts2本地化和國際化
Struts2 key鍵屬性示例
Struts2中文本地化問題
如何配置Struts2全局資源包
Struts2+Spring集成實例
Struts2+Quartz2調度集成實例
Struts2+Hibernate使用Full Hibernate Plugin集成
Struts2+Hibernate集成實例
Struts2+Spring+Hibernate集成實例
Struts2+Log4j集成
Struts2的FilterDispatcher和StrutsPrepareAndExecuteFilter有什麼不同?
Struts2獲取HttpServletRequest實例
Struts2獲取HttpServletResponse實例
如何獲取ServletContext對象
Struts2配置Action類的靜態參數
Struts2下載文件實例
Struts2和JSON實例

Struts2+Spring+Hibernate集成實例

在本教程中,它顯示的集成 「Struts2 + Spring + Hibernate「,請務必檢查以下之前繼續學習教程。

  1. Struts2 + Hibernate集成實例
  2. Struts2 + Spring 集成實例

參見集成步驟總結:

  1. 獲取所有的依賴庫(很多)。

  2. 註冊 Spring 的 ContextLoaderListener 來整合 Struts2 和 Spring。

  3. 使用 Spring 的 LocalSessionFactoryBean 來集成 Spring 和 Hibernate。

  4. 完成所有連接。

請參閱它們之的關係:

Struts 2 <-- (ContextLoaderListener) --> Spring <-- (LocalSessionFactoryBean) --> Hibernate

這將是一個很長的教程,相關解釋並不是很多,請務必閱讀上述2篇文章的詳細情況說明以方面學習。

這將要創建一個客戶頁面,以添加客戶和列表的自定義函數。前端使用Struts2顯示,Spring作爲依賴注入引擎,而 Hibernate 用來執行數據庫操作。讓我們開始...

1. 工程文件夾結構

在本章中,我們創建一個 ssh 的web工程,工程的目錄結構如下圖所示:
Struts2+Spring+Hibernate集成實例

Struts2+Spring+Hibernate集成實例

2. MySQL表結構結構

客戶(customer)表腳本。

DROP TABLE IF EXISTS `yiibai`.`customer`;
CREATE TABLE `yiibai`.`customer` (
`CUSTOMER_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`NAME` varchar(45) NOT NULL,
`ADDRESS` varchar(255) NOT NULL,
`CREATED_DATE` datetime NOT NULL,
PRIMARY KEY (`CUSTOMER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

3. Hibernate相關配置

只有模型和映射文件是必需的,因爲這裏要用Spring處理Hibernate配置。

Customer.java – 創建客戶表對應的一個類。

package com.yiibai.customer.model;

import java.util.Date;

public class Customer implements java.io.Serializable {

private Long customerId;
private String name;
private String address;
private Date createdDate;

//getter and setter methods

}

Customer.hbm.xml – Hibernate的客戶映射文件。

5. Struts2相關

實現了 Bo 和 DAO 設計模式。所有Bo和DAO將由Spring Spring bean配置文件注入。在DAO中,讓它擴展Spring的HibernateDaoSupport來集成 Spring 和 Hibernate。

CustomerBo.java

package com.yiibai.customer.bo;

import java.util.List;
import com.yiibai.customer.model.Customer;

public interface CustomerBo{

void addCustomer(Customer customer);
List<Customer> listCustomer();

}

CustomerBoImpl.java

package com.yiibai.customer.bo.impl;

import java.util.List;
import com.yiibai.customer.bo.CustomerBo;
import com.yiibai.customer.dao.CustomerDAO;
import com.yiibai.customer.model.Customer;

public class CustomerBoImpl implements CustomerBo{

CustomerDAO customerDAO;
//DI via Spring
public void setCustomerDAO(CustomerDAO customerDAO) {
    this.customerDAO = customerDAO;
}

//call DAO to save customer
public void addCustomer(Customer customer){
    customerDAO.addCustomer(customer);
}

//call DAO to return customers
public List<Customer> listCustomer(){
    return customerDAO.listCustomer();
}

}

CustomerDAO.java

package com.yiibai.customer.dao;

import java.util.List;
import com.yiibai.customer.model.Customer;

public interface CustomerDAO{

void addCustomer(Customer customer);
List<Customer> listCustomer();    

}

CustomerDAOImpl.java

package com.yiibai.customer.dao.impl;

import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.yiibai.customer.dao.CustomerDAO;
import com.yiibai.customer.model.Customer;

public class CustomerDAOImpl extends HibernateDaoSupport
implements CustomerDAO{

//add the customer
public void addCustomer(Customer customer){
    getHibernateTemplate().save(customer);
}

//return all the customers in list
public List<Customer> listCustomer(){
    return getHibernateTemplate().find("from Customer");        
}

}

CustomerAction.java – Struts2 的動作不再需要擴展ActionSupport,它將由 Spring 來處理。

package com.yiibai.customer.action;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.yiibai.customer.bo.CustomerBo;
import com.yiibai.customer.model.Customer;
import com.opensymphony.xwork2.ModelDriven;

public class CustomerAction implements ModelDriven{

Customer customer = new Customer();
List<Customer> customerList = new ArrayList<Customer>();

CustomerBo customerBo;
//DI via Spring
public void setCustomerBo(CustomerBo customerBo) {
    this.customerBo = customerBo;
}

public Object getModel() {
    return customer;
}

public List<Customer> getCustomerList() {
    return customerList;
}

public void setCustomerList(List<Customer> customerList) {
    this.customerList = customerList;
}

//save customer
public String addCustomer() throws Exception{

    //save it
    customer.setCreatedDate(new Date());
    customerBo.addCustomer(customer);

    //reload the customer list
    customerList = null;
    customerList = customerBo.listCustomer();

    return "success";

}

//list all customers
public String listCustomer() throws Exception{

    customerList = customerBo.listCustomer();

    return "success";

}

}

6. Spring相關配置

幾乎所有的配置都是在這裏完成是由Spring專門來整合。

CustomerBean.xml – 聲明 Spring 的 bean:Action, BO 和 DAO.

 <bean id="customerAction" class="com.yiibai.customer.action.CustomerAction">
    <property name="customerBo" ref="customerBo" />    
</bean>

<bean id="customerBo" class="com.yiibai.customer.bo.impl.CustomerBoImpl" >
    <property name="customerDAO" ref="customerDAO" />
</bean>

   <bean id="customerDAO" class="com.yiibai.customer.dao.impl.CustomerDAOImpl" >
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

database.properties – 聲明數據庫詳細信息

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/yiibai
jdbc.username=root
jdbc.password=password

DataSource.xml – 創建一個數據庫源的Bean 



WEB-INF/classes/config/database/properties/database.properties






HibernateSessionFactory.xml – 創建一個SessionFactory Bean來集成Spring和Hibernate。

<property name="dataSource">
  <ref bean="dataSource"/>
</property>

<property name="hibernateProperties">
   <props>
     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
     <prop key="hibernate.show\_sql">true</prop>
   </props>
</property>

<property name="mappingResources">
    <list>
      <value>com/yiibai/customer/hibernate/Customer.hbm.xml</value>
    </list>
</property>    

SpringBeans.xml – 創建一個核心 Spring 的 bean 配置文件,作爲中央的 bean 管理層。

<!-- Database Configuration -->
<import resource="config/spring/DataSource.xml"/>
<import resource="config/spring/HibernateSessionFactory.xml"/>

<!-- Beans Declaration -->
<import resource="com/yiibai/customer/spring/CustomerBean.xml"/>

7. JSP 頁面

JSP頁面來顯示使用 Struts2 標籤的元素。

customer.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>

Struts 2 + Spring + Hibernate integration example

Add Customer

All Customers

<s:if test="customerList.size() > 0">

Customer Id Name Address Created Date


8. struts.xml

<package name="default" namespace="/" extends="struts-default">

    <action name="addCustomerAction" 
        class="customerAction" method="addCustomer" >
        <result name="success">pages/customer.jsp</result>
    </action>

    <action name="listCustomerAction"
        class="customerAction" method="listCustomer" >
        <result name="success">pages/customer.jsp</result>
    </action>

</package>

9. Struts 2 + Spring

要集成Struts2和Spring,只需註冊ContextLoaderListener監聽器類,定義一個「contextConfigLocation」參數要求Spring容器來解析「SpringBeans.xml」,而不使用默認的「applicationContext.xml」。

web.xml

Struts 2 Web Application struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /\* contextConfigLocation /WEB-INF/classes/SpringBeans.xml org.springframework.web.context.ContextLoaderListener

10. 運行實例

在瀏覽器中打開網址 : http://localhost:8080/ssh/listCustomerAction.action
Struts2+Spring+Hibernate集成實例

Struts2+Spring+Hibernate集成實例

參考

  1. Struts2 + Hibernate集成實例
  2. Struts2 + Spring集成實例
  3. Struts2 + Hibernate 使用 Full Hibernate Plugin插件集成

代碼下載 -  http://pan.baidu.com/s/1mgzt1Xm (含ssh相關類庫,詳見 lib 目錄,文件大小約:18M)。