开发手册 欢迎您!
软件开发者资料库

Struts 2和Hibernate集成

Struts 2和Hibernate集成 - 从简单和简单的步骤学习Struts 2,从基本概念到高级概念,包括基本MVC架构,概述,环境设置,架构,示例,配置,操作,拦截器,结果,结果类型,值栈/ OGNL,文件上传,数据库访问,发送电子邮件,验证,本地化,类型转换,主题/模板,执行处理,注释,控制,数据,表单,Ajax标签,Spring,Tiles,Hibernate Integration。

Hibernate是一种高性能的对象/关系持久性和查询服务,它在开源GNU宽通用公共许可证(LGPL)下获得许可,可以免费下载.在这一章当中.我们将学习如何实现Struts 2与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.cfg.xml,这是hibernate的配置文件.

         c         om.mysql.jdbc.Driver                           jdbc:mysql://www.it1352.com/struts_tutorial                  root                        10            true                     org.hibernate.dialect.MySQLDialect                  update               

让我们浏览一下hibernate配置文件.首先,我们声明我们正在使用MySQL驱动程序.然后我们声明了jdbc url用于连接数据库.然后我们声明了连接的用户名,密码和池大小.我们还指出,我们希望通过将"show_sql"设置为true来查看日志文件中的SQL.请通过hibernate教程了解这些属性的含义.

最后,我们将映射类设置为com.it1352.hibernate.Student,我们将在本章中创建.

环境设置

接下来你需要为这个项目提供大量的罐子.附件是所需JAR文件的完整列表的屏幕截图;

Struts和Hibernate Jars

大多数JAR文件都可以作为struts发行版的一部分获得.如果您安装了诸如glassfish,websphere或jboss之类的应用程序服务器,那么您可以从appserver的lib文件夹中获取大部分剩余的jar文件.如果没有,你可以单独下载文件 :

  • Hibernate jar文件 :   Hibernate.org

  • Struts hibernate插件 :   Struts hibernate插件

  • JTA文件 :   JTA文件

  • Dom4j文件 :   Dom4j

  • log4j文件 :   log4j

其余的文件,你应该可以从你的Struts2发行版获得.

Hibernate Classes

现在让我们创建必需的java类用于hibernate集成.以下是 Student.java :

package com.it1352.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规范表示 student 表.它具有属性id,firstName和lastName,它们对应于student表的列名.接下来让我们创建 StudentDAO.java 文件,如下所示 :

package com.it1352.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 getStudents() {      List students = new ArrayList();            try {         students = session.createQuery("from Student").list();      } catch(Exception e) {         e.printStackTrace();      }      return students;   }   public void addStudent(Student student) {      session.save(student);   }}

StudentDAO类是Student类的数据访问层.它有方法列出所有学生,然后保存新的学生记录.

动作类

以下文件 AddStudentAction.java 定义我们的动作类.我们这里有两个动作方法 -  execute()和listStudents(). execute()方法用于添加新的学生记录.我们使用dao的save()方法来实现这一点.

另一种方法listStudents()用于列出学生.我们使用dao的list方法来获取所有学生的列表.

package com.it1352.struts2; import java.util.ArrayList;import java.util.List;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import com.it1352.hibernate.Student;import com.it1352.hibernate.StudentDAO;public class AddStudentAction extends ActionSupport implements ModelDriven {   Student student  = new Student();   List students = new ArrayList();   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 getStudents() {      return students;   }   public void setStudents(List students) {      this.students = students;   }}

您会注意到我们正在实施ModelDriven界面.当您的操作类处理具体模型类(例如Student)而不是单个属性(例如firstName,lastName)时,将使用此方法. ModelAware接口要求您实现返回模型的方法.在我们的例子中,我们返回"学生"对象.

创建视图文件

现在让我们创建 student.jsp 查看具有以下内容的文件 :

<%@ page contentType = "text/html; charset = UTF-8"%><%@ taglib prefix = "s" uri = "/struts-tags"%>         Hello World                                                                  
                                                                                                                                                                                                                          
First NameLast NameMarks
         

student.jsp非常简单.在顶部,我们有一个提交"addStudent.action"的表单.它接受firstName,lastName和标记.因为addStudent操作与ModelAware"AddSudentAction"相关联,所以将自动创建一个学生bean,其中firstName,lastName和marks的值自动填充.

在底部,我们去通过学生列表(参见AddStudentAction.java).我们遍历列表并在表格中显示名字,姓氏和标记的值.

Struts配置

让我们把它全部一起使用 struts.xml :

                                 listStudents                              /students.jsp         

这里要注意的重要一点是我们的包"myhibernate"扩展了名为"hibernate-default"的struts2默认包.然后我们声明两个动作 -  addStudent和listStudents. addStudent在AddStudentAction类上调用execute(),然后在成功时调用listStudents操作方法.

listStudent操作方法调用AddStudentAction类上的listStudents()并使用该学生.jsp作为视图.

现在,右键单击项目名称,然后单击导出> WAR文件以创建War文件.然后在Tomcat的webapps目录中部署此WAR.最后,启动Tomcat服务器并尝试访问URL http://localhost:8080/HelloWorldStruts2/student.jsp .这将生成以下屏幕 :

Struts and Hibernate Result

在上面的部分中,我们得到一个表单,用于输入新学生记录的值,底部部分列出数据库中的学生.继续添加新的学生记录并按提交.每次单击"提交"时,屏幕将刷新并显示更新列表.