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+Hibernate集成實例

在 Struts2 中,沒有官方的插件集成Hibernate框架。但是,可以通過以下步驟解決方法:

  1. 註冊一個自定義的 ServletContextListener
  2. 在 ServletContextListener 類, 初始化Hibernate會話,並將其存儲到servlet上下文。
  3. 在動作類, 可以通過servlet上下文的Hibernate會話,並執行任務正常的Hibernate操作。

請參閱它們的關係:

Struts 2 <-- (Servlet Context) ---> Hibernate <-----> Database  

在本教程中,在Struts中2開發我們顯示了一個簡單的客戶模塊(添加和列表功能),並使用 Hibernate 進行數據庫操作。使用上述部分機制集成(存儲和檢索在servlet上下文Hibernate的Session)。

1. 工程目錄結構

來看看這個完整的項目文件夾結構。
Struts2+Hibernate集成實例

2. MySQL表結構腳本

創建一個客戶(customer)表。下面是SQL表腳本。

CREATE TABLE `customer` (
`customer_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
`address` varchar(255) NOT NULL,
`create_date` datetime NOT NULL,
PRIMARY KEY (`customer_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

4. Hibernate 相關配置

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映射文件客戶表。

    <id name="customerId" type="java.lang.Long">
        <column name="CUSTOMER\_ID" />
        <generator class="identity" />
    </id>
    <property name="name" type="string">
        <column name="NAME" length="45" not-null="true" />
    </property>
    <property name="address" type="string">
        <column name="ADDRESS" not-null="true" />
    </property>
    <property name="createdDate" type="timestamp">
        <column name="CREATED\_DATE" length="19" not-null="true" />
    </property>
</class>

hibernate.cfg.xml – Hibernate數據庫配置文件

false password jdbc:mysql://localhost:3306/yiibai root org.hibernate.dialect.MySQLDialect true true false

5. Hibernate ServletContextListener

創建一個類 ServletContextListener, 並初始化Hibernate會話,並將其存儲到servlet上下文。

HibernateListener .java

package com.yiibai.listener;

import java.net.URL;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateListener implements ServletContextListener{

private Configuration config;
private SessionFactory factory;
private String path = "/hibernate.cfg.xml";
private static Class clazz = HibernateListener.class;

public static final String KEY\_NAME = clazz.getName();

public void contextDestroyed(ServletContextEvent event) {
  //
}

public void contextInitialized(ServletContextEvent event) {

 try { 
        URL url = HibernateListener.class.getResource(path);
        config = new Configuration().configure(url);
        factory = config.buildSessionFactory();

        //save the Hibernate session factory into serlvet context
        event.getServletContext().setAttribute(KEY\_NAME, factory);
  } catch (Exception e) {
         System.out.println(e.getMessage());
   }
}

}

在 web.xml 文件中註冊監聽器。

web.xml

Struts 2 Web Application struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /\* com.yiibai.listener.HibernateListener

6. Action

在動作類, 可以通過servlet上下文的Hibernate會話和執行正常的Hibernate任務。

CustomerAction.java

package com.yiibai.customer.action;

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

import org.apache.struts2.ServletActionContext;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.yiibai.customer.model.Customer;
import com.yiibai.listener.HibernateListener;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class CustomerAction extends ActionSupport
implements ModelDriven{

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

public String execute() throws Exception {
    return SUCCESS;
}

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{

    //get hibernate session from the servlet context
    SessionFactory sessionFactory = 
         (SessionFactory) ServletActionContext.getServletContext()
                 .getAttribute(HibernateListener.KEY\_NAME);

    Session session = sessionFactory.openSession();

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

    session.beginTransaction();
    session.save(customer);
    session.getTransaction().commit();

    //reload the customer list
    customerList = null;
    customerList = session.createQuery("from Customer").list();

    return SUCCESS;

}

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

    //get hibernate session from the servlet context
    SessionFactory sessionFactory = 
         (SessionFactory) ServletActionContext.getServletContext()
                 .getAttribute(HibernateListener.KEY\_NAME);

    Session session = sessionFactory.openSession();

    customerList = session.createQuery("from Customer").list();

    return SUCCESS;

}    

}

7. JSP 頁面

JSP頁面用來添加和列出的客戶。

customer.jsp

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

Struts 2 + Hibernate integration example

Add Customer

All Customers

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

Customer Id Name Address Created Date


8. struts.xml

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

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

9. 實例測試執行

訪問客戶模塊:http://localhost:8080/struts2hibernate/listCustomerAction.action
Struts2+Hibernate集成實例

在名稱和地址字段填寫,點擊提交按鈕,插入的客戶的詳細信息會馬上列出結果。
Struts2+Hibernate集成實例

參考

  1. Struts2 + Hibernate使用「Full Hibernate Plugin"集成
  2. ServletContextListener 文檔
  3. Struts + Hibernate集成實例

代碼下載 - http://pan.baidu.com/s/1hqhQJ7A