我们可以将任何Struts应用程序与Hibernate集成。这不需要额外的努力。

在这个示例中,我们将使用Struts 2框架和Hibernate来创建一个注册表单,并将这些数据存储到数据库中。让我们看看如何创建将Struts 2应用程序与Hibernate集成的文件。

  • index.jsp 文件用于获取用户输入。
  • User.java 处理请求的Action类。它使用DAO类来存储数据。
  • RegisterDao.java 一个使用DAO设计模式来使用Hibernate存储数据的Java类。
  • user.hbm.xml 一个包含有关持久类信息的映射文件。在这种情况下,Action类作为持久类。
  • hibernate.cfg.xml 一个包含数据库和映射文件信息的配置文件。
  • struts.xml 文件包含有关Action类和要调用的结果页面的信息。
  • welcome.jsp 一个显示带有用户名的欢迎信息的JSP文件。
  • web.xml 一个包含Struts框架的控制器信息的web.xml文件。

index.jsp

在这个页面中,我们使用Struts标签创建了一个表单。该表单的操作名为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>

User.java

这是一个简单的POJO类。它作为Struts的Action类和Hibernate的持久类。它调用RegisterDao类的register方法并返回success字符串。

package cn.javatiku;

public class User {
  private int id;
  private String name;
  
  // Getters and setters
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }

  public String execute() {
    RegisterDao.saveUser(this);
    return "success";
  }
}

RegisterDao.java

这是一个使用Hibernate框架保存User类对象的Java类。

package cn.javatiku;

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;
  }
}

user.hbm.xml

这个映射文件包含所有持久类的信息。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class name="cn.javatiku.User" table="user451">
    <id name="id">
      <generator class="increment"></generator>
    </id>
    <property name="name"></property>
  </class>
</hibernate-mapping>

hibernate.cfg.xml

这个配置文件包含数据库和映射文件的信息。在这里,我们使用了hb2ddl.auto属性,因此不需要在数据库中创建表。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- 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>

struts.xml

这个文件包含要调用的Action类的信息。这里的Action类是User。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
  <package name="abc" extends="struts-default">
    <action name="register" class="cn.javatiku.User">
      <result name="success">welcome.jsp</result>
    </action>
  </package>
</struts>

welcome.jsp

这是一个欢迎文件,显示带有用户名的欢迎信息。

<%@ taglib uri="/struts-tags" prefix="s" %> 
Welcome: <s:property value="name"/>

web.xml

这是一个包含控制器信息的web.xml文件。在Struts2的情况下,StrutsPrepareAndExecuteFilter类作为控制器。

<?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>

通过上述步骤,我们实现了将Struts 2与Hibernate集成的示例。在这个示例中,我们创建了一个简单的注册表单,并使用Hibernate将数据存储到数据库中。

标签: Hibernate, Hibernate教程, Hibernate框架, Hibernate框架设计, Hibernate初级教程, Hibernate框架用法, Hibernate指南, Hibernate入门, Hibernate中级教程, Hibernate进阶教程, Hibernate高级教程, Hibernate下载