(二十六)Struts2 Hibernate集成


  

让我们过一下hibernate配置文件。首先,我们声明使用MySQL驱动程序。然后我们声明了jdbc url用于连接到数据库。接着我们声明连接的用户名,密码和池大小。我们还指出希望通过将show_sql打开为true来查看日志文件中的SQL。

环境搭建

这个项目需要很多jar文件,以下的是所需的JAR文件的完整列表的屏幕截图:

技术分享

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

  • Hibernate的jar文件-Hibernate.org

  • Struts的Hibernate插件-Struts hibernate plugin

  • JTA文件-JTA file

  • Dom4j文件-Dom4j

  • SLF4J文件-SLF4J

  • log4j文件-log4j

其余的文件,你应该能够从struts2 中分配。

Hibernate类

现在让我们为hibernate集成创建所需的java类。按照Student.java的内容:

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

package cn.w3cschool.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 ListStudent getStudents()
   {
      ListStudent students = new ArrayListStudent();
      try
      {
         students = session.createQuery("from Student").list();
      }
      catch(Exception e)
      {
         e.printStackTrace();
      }
      return students;
   }

   public void addStudent(Student student)
   {
      session.save(student);
   }
}

  

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

Action类

下面的文件AddStudentAction.java定义了我们的action类。我们在这里有两个action方法:execute()和listStudents()。execute()方法用于添加新的学生记录。我们使用dao的save()方法来实现这一点。另一种listStudents()方法用于列出学生。我们使用dao的列表方法来获取所有学生的列表。

package cn.w3cschool.struts2;

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

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import cn.w3cschool.hibernate.Student;
import cn.w3cschool.hibernate.StudentDAO;

public class AddStudentAction extends ActionSupport 
            implements ModelDrivenStudent{

   Student student  = new Student();
   ListStudent students = new ArrayListStudent();
   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 ListStudent getStudents() {
      return students;
   }

   public void setStudents(ListStudent students) {
      this.students = students;
   }
	
}

  

你会注意到我们正在实现ModelDriven接口。这是在你的action类处理一个具体的模型类(如Student)而不是个别的属性(如firstName,lastName)时使用。ModelAware接口需要你实现一个方法来返回模型。在我们的例子中,我们返回student对象。

创建视图文件

现在创建包含以下内容的student.jsp视图文件:

%@ page contentType="text/html; charset=UTF-8"%
%@ taglib prefix="s" uri="/struts-tags"%
html
head
titleHello World/title
s:head /
/head
body
   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/
   hr/
   table
      tr
         tdFirst Name/td
         tdLast Name/td
         tdMarks/td
      /tr
      s:iterator value="students"	
         tr
            tds:property value="firstName"//td
            tds:property value="lastName"//td
            tds:property value="marks"//td
           /tr
      /s:iterator	
   /table
   /s:form
/body
/html

  

student.jsp非常简单。在上面部分,我们有一个提交到addStudent.action的表单。它接受firstName,lastName和marks。因为addStudent action绑定到ModelAware的AddSudentAction,所以将自动创建一个学生bean,其值自动填充为firstName,lastName和marks。
在下面部分,我们浏览学生列表(参见AddStudentAction.java),并在表中显示firstname,lastname和marks的值。

Struts配置

让我们使用struts.xml

?xml version="1.0" encoding="UTF-8"?
!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd"

struts
   constant name="struts.devMode" value="true" /

   package name="myhibernate" extends="hibernate-default"

      action name="addStudent" method="execute"
         class="cn.w3cschool.struts2.AddStudentAction"
         result name="success" type="redirect"
               listStudents
         /result
      /action

      action name="listStudents" method="listStudents"
         class="cn.w3cschool.struts2.AddStudentAction"
         result name="success"/students.jsp/result
      /action

/package

/struts

  

要注意的要点是,我们的包myhibernate扩展了名为hibernate-default的struts2默认包。然后我们声明两个action:addStudent和listStudents。addStudent调用AddStudentAction类的execute(),然后在成功时调用listStudents方法。listStudent方法调用AddStudentAction类上的listStudents(),并使用student.jsp作为视图。

现在,右键单击项目名称,然后单击Export WAR File以创建WAR文件。然后在Tomcat的webapps目录中部署WAR文件。最后,启动Tomcat服务器并尝试访问URL http://localhost:8080/HelloWorldStruts2/student.jsp,将显示以下界面:

技术分享

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

(二十六)Struts2 Hibernate集成

原文地址:http://www.cnblogs.com/w894819398/p/7298352.html


最新回复(0)
/jishuDjccWNaV_2FAFLkMjfWwQaH01OHy3LjJ74AP7QNw_3D_3D4719021
8 简首页