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集成

Hibernate是一個高性能的對象/關係持久性和查詢服務許可下的開源GNU通用公共許可證(LGPL),並免費下載。在這一章中,我們要學習如何實現Struts2與Hibernate集成。如果你不熟悉與Hibernate,那麼可以查看我們的Hibernate教程。

數據庫設置:

在本教程中,我會使用「struts2_tutorial」MySQL數據庫。我連接到我的機器上使用這個數據庫的用戶名「root」,並且沒有密碼。首先,你需要運行下面的腳本。此腳本創建稱爲student ,並創建一個新的表,此表中的記錄數:

CREATE TABLE IF NOT EXISTS `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `first_name` varchar(40) NOT NULL, `last_name` varchar(40) NOT NULL, `marks` int(11) NOT NULL, PRIMARY KEY (`id`) ); -- -- Dumping data for table `student` -- INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`) VALUES(1, 'George', 'Kane', 20); INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`) VALUES(2, 'Melissa', 'Michael', 91); INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`) VALUES(3, 'Jessica', 'Drake', 21);

Hibernate的配置:

接下來讓我們創建這是Hibernate的配置文件hibernate.cfg.xml中。

<property name="hibernate.connection.driver_class">c
om.mysql.jdbc.Driver <property name="hibernate.connection.url"> jdbc:mysql://www.yiibai.com/struts\_tutorial <property name="hibernate.connection.username">root <property name="hibernate.connection.password"> <property name="hibernate.connection.pool_size">10 <property name="show_sql">true <property name="dialect"> org.hibernate.dialect.MySQLDialect <property name="hibernate.hbm2ddl.auto">update <mapping class="com.yiibai.hibernate.Student" />

讓我們通過hibernate的配置文件。首先,我們正在使用的MySQL驅動程序。然後,我們聲明 JDBC URL連接到數據庫。然後,聲明連接的用戶名,密碼以及池的大小。我們也表示,我們希望「show_sql」轉向真正看到SQL的日誌文件中。請經過Hibernate教程,瞭解這些屬性是什麼意思。最後,我們設置了的映射類com.yiibai.hibernate.Student,我們將本章中創建。

環境設置:

接下來,這個項目需要一大堆的jar文件。附所需的JAR文件的完整列表的截圖:

Struts

大部分的JAR文件可以作爲Struts的分佈的一部分。如果有一個如GlassFish應用服務器,WebSphere或JBoss安裝,那麼可以得到的大部分jar文件從應用服務器的lib文件夾。如果沒有,可以單獨下載的文件:

其餘的文件,應該能夠從struts2的分發得到。

Hibernate 類:

現在讓我們來創建Hibernate集成所需的Java類。以下內容Student.java:

package com.yiibai.hibernate; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="student") public class Student { @Id @GeneratedValue private int id; @Column(name="last_name") private String lastName; @Column(name="first_name") private String firstName; private int marks; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public int getMarks() { return marks; } public void setMarks(int marks) { this.marks = marks; } }

這是一個POJO類,Hibernate的規範表。它擁有屬性id,firstName和lastName學生表中的列名對應。接下來讓我們創建StudentDAO.java文件如下:

package com.yiibai.hibernate; import java.util.ArrayList; import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction; import com.googlecode.s2hibernate.struts2.plugin. annotations.SessionTarget; import com.googlecode.s2hibernate.struts2.plugin. annotations.TransactionTarget; public class StudentDAO { @SessionTarget Session session; @TransactionTarget Transaction transaction; @SuppressWarnings("unchecked") public List<Student> getStudents() { List<Student> students = new ArrayList<Student>(); try { students = session.createQuery("from Student").list(); } catch(Exception e) { e.printStackTrace(); } return students; } public void addStudent(Student student) { session.save(student); } }

StudentDAO類,學生類是數據訪問層。它有一些方法來列出所有學生,然後保存一個新的學生記錄。

動作類:

以下文件AddStudentAction.java定義我們的動作類。我們這裏有兩個動作方法 - execute() 和 listStudents()。 execute()方法是用來添加新的學生記錄。使用DAO的save()方法來實現這一目標。另一種方法,listStudents()用來列出學生。我們使用DAO的的列表方法得到所有學生的名單。 

package com.yiibai.struts2; import java.util.ArrayList; import java.util.List; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.yiibai.hibernate.Student; import com.yiibai.hibernate.StudentDAO; public class AddStudentAction extends ActionSupport implements ModelDriven<Student>{ Student student = new Student(); List<Student> students = new ArrayList<Student>(); StudentDAO dao = new StudentDAO(); @Override public Student getModel() { return student; } public String execute() { dao.addStudent(student); return "success"; } public String listStudents() { students = dao.getStudents(); return "success"; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } }

實現ModelDriven接口你會注意到,這是用來當你的操作類處理一個具體的模型類(如學生),而不是個人屬性(如名字,姓氏)。的ModelAware接口需要實現的方法,以返回到模型。在我們的例子中,我們返回「學生」對象。

創建視圖文件:

現在讓我們創建student.jsp視圖文件包含以下內容:

<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> Hello World <s:head /> <s:form action="addStudent"> <s:textfield name="firstName" label="First Name"/> <s:textfield name="lastName" label="Last Name"/> <s:textfield name="marks" label="Marks"/> <s:submit/>


<s:iterator value="students">
First Name Last Name Marks
<s:property value="firstName"/> <s:property value="lastName"/> <s:property value="marks"/>

非常簡單student.jsp。在上面的部分,我們有一個形式提交到「addStudent.action」。這需要在名字,姓氏和備註。因爲addStudent 動作,自動綁到ModelAware的「AddSudentAction」,將創建一個學生bean的名字,姓氏和標記自動填充的值。

在底部,我們去通過的學生名單(見AddStudentAction.java)。我們遍歷列表和顯示的值在表中的姓氏,名稱和備註。

Struts 配置:

讓我們把它放在一起使用struts.xml:

<constant name="struts.devMode" value="true" /> <package name="myhibernate" extends="hibernate-default"> <action name="addStudent" method="execute" class="com.yiibai.struts2.AddStudentAction"> <result name="success" type="redirect"> listStudents <action name="listStudents" method="listStudents" class="com.yiibai.struts2.AddStudentAction"> <result name="success">/students.jsp

這裏要注意的最重要的事情是,我們包函「myhibernate」擴展Struts2默認包稱爲「hibernate-default」。然後我們聲明兩個動作 - addStudent和listStudents。 addStudent調用execute()上AddStudentAction類,然後,它調用listStudents操作方法successs。

listStudent動作方法調用listStudents()上AddStudentAction類作爲視圖,並使用student.jsp

現在右擊項目名稱,並單擊Export > WAR 文件創建一個WAR文件。然後部署這個WAR在Tomcat的webapps目錄下。最後,啓動Tomcat服務器和嘗試訪問URL http://localhost:8080/HelloWorldStruts2/student.jsp。這會給你以下畫面: 

Struts

在上面的部分,我們得到的一種形式,進入一個新的學生記錄和底部列出了學生在數據庫中的值。繼續並添加一個新的學生記錄,按提交。屏幕將刷新並顯示您的更新列表。