Struts 2 и интеграция с Hibernate

Hibernate - это высокопроизводительная служба объектно-реляционной сохраняемости и запросов, которая лицензируется по лицензии GNU Lesser General Public License (LGPL) с открытым исходным кодом и доступна для бесплатной загрузки. В этой главе. мы собираемся узнать, как добиться интеграции Struts 2 с Hibernate. Если вы не знакомы с Hibernate, вы можете проверить наше руководство по Hibernate .

Настройка базы данных

В этом руководстве я собираюсь использовать базу данных MySQL "struts2_tutorial". Я подключаюсь к этой базе данных на своем компьютере, используя имя пользователя «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.cfg.xml, который является файлом конфигурации гибернации.

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

<hibernate-configuration>
   <session-factory>
      <property name = "hibernate.connection.driver_class">c
         om.mysql.jdbc.Driver
      </property>
      
      <property name = "hibernate.connection.url">
         jdbc:mysql://www.tutorialspoint.com/struts_tutorial
      </property>
      
      <property name = "hibernate.connection.username">root</property>
      
      <property name = "hibernate.connection.password"></property>
      
      <property name = "hibernate.connection.pool_size">10</property>
      
      <property name = "show_sql">true</property>
      
      <property name = "dialect">
         org.hibernate.dialect.MySQLDialect
      </property>
      
      <property name = "hibernate.hbm2ddl.auto">update</property>
      
      <mapping class = "com.tutorialspoint.hibernate.Student" />
   </session-factory>
</hibernate-configuration>

Давайте рассмотрим конфигурационный файл гибернации. Сначала мы заявили, что используем драйвер MySQL. Затем мы объявили URL-адрес jdbc для подключения к базе данных. Затем мы объявили имя пользователя, пароль и размер пула подключения. Мы также указали, что хотели бы видеть SQL в файле журнала, установив для "show_sql" значение true. Просмотрите руководство по гибернации, чтобы понять, что означают эти свойства.

Наконец, мы устанавливаем класс сопоставления com.tutorialspoint.hibernate.Student, который мы создадим в этой главе.

Настройка Envrionment

Затем вам понадобится много банок для этого проекта. Прилагается снимок экрана с полным списком необходимых файлов JAR -

Большинство файлов JAR можно получить как часть вашего дистрибутива struts. Если у вас установлен сервер приложений, например glassfish, websphere или jboss, вы можете получить большую часть оставшихся файлов jar из папки lib сервера приложений. Если нет, вы можете скачать файлы по отдельности -

  • Файлы jar для Hibernate - Hibernate.org

  • Плагин Struts hibernate - плагин Struts hibernate

  • Файлы JTA - файлы JTA

  • Файлы Dom4j - Dom4j

  • файлы log4j - log4j

Остальные файлы вы сможете получить из своего дистрибутива Struts2.

Классы гибернации

Давайте теперь создадим необходимые классы Java для интеграции гибернации. Ниже приводится содержаниеStudent.java -

package com.tutorialspoint.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, представляющий studentтаблица согласно спецификации Hibernate. У него есть свойства id, firstName и lastName, которые соответствуют именам столбцов таблицы студентов. Далее давайте создадимStudentDAO.java файл следующим образом -

package com.tutorialspoint.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 - это уровень доступа к данным для класса Student. В нем есть методы для составления списка всех студентов, а затем для сохранения новой студенческой записи.

Класс действия

Следующий файл AddStudentAction.javaопределяет наш класс действия. Здесь у нас есть два метода действий - execute () и listStudents (). Метод execute () используется для добавления новой записи студента. Для этого мы используем метод dao save ().

Другой метод, listStudents (), используется для составления списка студентов. Мы используем метод списка дао, чтобы получить список всех учеников.

package com.tutorialspoint.struts2;

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

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.tutorialspoint.hibernate.Student;
import com.tutorialspoint.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. Это используется, когда ваш класс действий имеет дело с конкретным классом модели (например, Student), а не с отдельными свойствами (такими как firstName, lastName). Интерфейс ModelAware требует, чтобы вы реализовали метод для возврата модели. В нашем случае мы возвращаем объект «студент».

Создать файлы просмотра

Давайте теперь создадим student.jsp просмотреть файл со следующим содержимым -

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

<html>
   <head>
      <title>Hello 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>
               <td>First Name</td>
               <td>Last Name</td>
               <td>Marks</td>
            </tr>
            
            <s:iterator value = "students">	
               <tr>
                  <td><s:property value = "firstName"/></td>
                  <td><s:property value = "lastName"/></td>
                  <td><s:property value = "marks"/></td>
                 </tr>
            </s:iterator>	
         </table>
      </s:form>
   </body>
</html>

Student.jsp довольно прост. В верхнем разделе у нас есть форма, которая отправляется в «addStudent.action». Он принимает firstName, lastName и метки. Поскольку действие addStudent привязано к ModelAware «AddSudentAction», автоматически будет создан компонент Student со значениями для firstName, lastName и автоматически заполненными метками.

В нижнем разделе мы просматриваем список студентов (см. AddStudentAction.java). Мы просматриваем список и отображаем значения для имени, фамилии и оценок в таблице.

Конфигурация распорок

Давайте соберем все вместе, используя 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 = "com.tutorialspoint.struts2.AddStudentAction">
         <result name = "success" type = "redirect">
            listStudents
         </result>
      </action>

      <action name = "listStudents" method = "listStudents"
         class = "com.tutorialspoint.struts2.AddStudentAction">
         <result name = "success">/students.jsp</result>
      </action>

   </package>
</struts>

Здесь важно отметить, что наш пакет "myhibernate" расширяет стандартный пакет struts2, называемый "hibernate-default". Затем мы объявляем два действия - addStudent и listStudents. addStudent вызывает метод execute () класса AddStudentAction, а затем в случае успеха вызывает метод действия listStudents.

Метод действия listStudent вызывает listStudents () класса AddStudentAction и использует в качестве представления student.jsp.

Теперь щелкните правой кнопкой мыши имя проекта и нажмите Export > WAR Fileдля создания файла War. Затем разверните эту WAR в каталоге веб-приложений Tomcat. Наконец, запустите сервер Tomcat и попробуйте получить доступ к URL-адресуhttp://localhost:8080/HelloWorldStruts2/student.jsp. Это создаст следующий экран -

В верхнем разделе мы получаем форму для ввода значений для новой записи студента, а в нижнем разделе перечисляются студенты в базе данных. Добавьте новую студенческую запись и нажмите "Отправить". Экран будет обновляться и показывать обновленный список каждый раз, когда вы нажимаете «Отправить».