Chúng ta có thể tích hợp bất cứ ứng dụng Struts nào với Hibernate.
Bạn cần có các jar file cho Struts 2 và Hibernate. Chương này, chúng ta tạo ví dụ tạo registration form bởi sử dụng Struts 2 và lưu trữ dữ liệu này bên trong Database bởi sử dụng Hibernate. Dưới đây là các file cần thiết:
- index.jsp để lấy input từ người dùng.
- user.java: một lớp action để xử lý request. Nó sử dụng lớp DAO để lưu trữ dữ liệu.
- registerDao.java: một lớp java mà sử dụng mẫu thiết kế DAO để lưu trữ dữ liệu bởi sử dụng Hibernate.
- user.hbm.xml: Một file ánh xạ mà chứa thông tin về lớp persistent. Ở đây, lớp action làm việc như lớp persistent trong Hibernate.
- hibernate.cfg.xml: một file cấu hình chứa thông tin về Database và file ánh xạ.
- struts.xml: chứa thông tin về lớp action và result để được triệu hồi.
- welcome.jsp: hiển thị thông tin Welcome tới người dùng.
- web.xml: chứa thông tin về Controller của Struts Framework.
1. Tạo index.jsp
Trong page này, chúng ta tạo một form bởi sử dụng struts-tags. Tên của action cho form này là register.
<%@ taglib uri="/struts-tags" prefix="S" %> <S:form action="register"> <S:textfield name="name" label="Name"></S:textfield> <S:submit value="register"></S:submit> </S:form>
2. Tạo user.java
Đây là một lớp POJO đơn giản. Tại đây, nó làm việc như là lớp action cho Struts và là lớp persistent cho Hibernate. Nó gọi phương thức register của lớp RegisterDao và trả về success ở dạng chuỗi.
package com.hoctv; public class User { private int id; private String name; //phuong thuc getter va setter public String execute(){ RegisterDao.saveUser(this); return "success"; } }
3. Tạo registerDao.java
Đây là một lớp Java mà lưu giữ đối tượng của lớp User bởi sử dụng Hibernate Framework.
package com.hoctv; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class RegisterDao { public static int saveUser(User u){ Session session=new Configuration(). configure("hibernate.cfg.xml").buildSessionFactory().openSession(); Transaction t=session.beginTransaction(); int i=(Integer)session.save(u); t.commit(); session.close(); return i; } }
4. user.hbm.xml
File ánh xạ nay chứa tất cả thông tin của lớp persistent.
<?xml version='1.0' encoding='UTF-8'?> <hibernate-mapping> <class name="com.hoctv.User" table="user451"> <id name="id"> <generator class="increment"></generator> </id> <property name="name"></property> </class> </hibernate-mapping>
5. Tạo hibernate.cfg.xml
File cấu hình này chúa thông tin về Database và file ánh xạ. Ở đây, chúng ta sử dụng thuộc tính hb2ddl.auto, vì thế bạn không cần tạo bảng trong Database.
<?xml version='1.0' encoding='UTF-8'?> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="hbm2ddl.auto">update</property> <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property> <property name="connection.username">system</property> <property name="connection.password">oracle</property> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <mapping resource="user.hbm.xml"/> </session-factory> </hibernate-configuration>
6. Tạo struts.xml
File này chứa thông tin về lớp action để được triệu hồi. Lớp action ở đây là User.
<?xml version="1.0" encoding="UTF-8" ?> <struts> <package name="abc" extends="struts-default"> <action name="register" class="com.hoctv.User"> <result name="success">welcome.jsp</result> </action> </package> </struts>
6. Tạo welcome.jsp
Hiển thị thông điệp welcome với username.
<%@ taglib uri="/struts-tags" prefix="S" %> Welcome: <S:property value="name"/>
7. Tạo web.xml
Chứa thông tin về Controller. Với Struts 2, lớp StrutsPrepareAndExecuteFilter làm việc như là Controller.
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <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> </web-app>