Tích hợp Struts 2 và Hibernate
Hibernate là một dịch vụ truy vấn và bền bỉ đối tượng / quan hệ hiệu suất cao được cấp phép theo Giấy phép Công cộng GNU Ít hơn (LGPL) nguồn mở và miễn phí tải xuống. Trong chương này. chúng ta sẽ tìm hiểu cách tích hợp Struts 2 với Hibernate. Nếu bạn không quen với Hibernate, thì bạn có thể xem hướng dẫn Hibernate của chúng tôi .
Thiết lập cơ sở dữ liệu
Đối với hướng dẫn này, tôi sẽ sử dụng cơ sở dữ liệu MySQL "struts2_tutorial". Tôi kết nối với cơ sở dữ liệu này trên máy của mình bằng tên người dùng "root" và không có mật khẩu. Trước hết, bạn cần chạy đoạn mã sau. Tập lệnh này tạo một bảng mới có tênstudent và tạo một vài bản ghi trong bảng này -
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);
Cấu hình ngủ đông
Tiếp theo, chúng ta hãy tạo hibernate.cfg.xml, đây là tệp cấu hình của hibernate.
<?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>
Hãy để chúng tôi xem qua tệp cấu hình ngủ đông. Đầu tiên, chúng tôi đã khai báo rằng chúng tôi đang sử dụng trình điều khiển MySQL. Sau đó, chúng tôi khai báo url jdbc để kết nối với cơ sở dữ liệu. Sau đó, chúng tôi khai báo tên người dùng, mật khẩu và kích thước nhóm của kết nối. Chúng tôi cũng chỉ ra rằng chúng tôi muốn xem SQL trong tệp nhật ký bằng cách bật "show_sql" thành true. Vui lòng xem qua hướng dẫn ngủ đông để hiểu ý nghĩa của các thuộc tính này.
Cuối cùng, chúng tôi đặt lớp ánh xạ thành com.tutorialspoint.hibernate.Student mà chúng tôi sẽ tạo trong chương này.
Thiết lập môi trường
Tiếp theo, bạn cần rất nhiều lọ cho dự án này. Đính kèm là ảnh chụp màn hình danh sách đầy đủ các tệp JAR được yêu cầu -
Hầu hết các tệp JAR có thể được lấy như một phần của bản phân phối thanh chống của bạn. Nếu bạn đã cài đặt một máy chủ ứng dụng như glassfish, websphere hoặc jboss, thì bạn có thể lấy phần lớn các tệp jar còn lại từ thư mục lib của máy chủ ứng dụng. Nếu không, bạn có thể tải từng tệp xuống -
Các tệp jar Hibernate - Hibernate.org
Struts hibernate plugin - Struts hibernate plugin
Tệp JTA - Tệp JTA
Tệp Dom4j - Dom4j
tệp log4j - log4j
Phần còn lại của các tệp, bạn sẽ có thể lấy từ bản phân phối Struts2 của mình.
Lớp học ngủ đông
Bây giờ chúng ta hãy tạo các lớp java cần thiết để tích hợp ngủ đông. Sau đây là nội dung củaStudent.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;
}
}
Đây là một lớp POJO đại diện cho studentbảng theo đặc điểm kỹ thuật Hibernate. Nó có id thuộc tính, firstName và lastName tương ứng với tên cột của bảng sinh viên. Tiếp theo hãy để chúng tôi tạoStudentDAO.java tập tin như sau -
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);
}
}
Lớp StudentDAO là lớp truy cập dữ liệu cho lớp Sinh viên. Nó có các phương thức để liệt kê tất cả học sinh và sau đó để lưu một hồ sơ học sinh mới.
Lớp hành động
Theo dõi tệp AddStudentAction.javaxác định lớp hành động của chúng tôi. Chúng ta có hai phương thức hành động ở đây - execute () và listStudents (). Phương thức execute () được sử dụng để thêm bản ghi sinh viên mới. Chúng tôi sử dụng phương thức save () của dao để đạt được điều này.
Phương thức khác, listStudents () được sử dụng để liệt kê các sinh viên. Chúng tôi sử dụng phương pháp danh sách của dao để có được danh sách tất cả các học sinh.
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;
}
}
Bạn sẽ nhận thấy rằng chúng tôi đang triển khai giao diện ModelDriven. Điều này được sử dụng khi lớp hành động của bạn đang xử lý một lớp mô hình cụ thể (chẳng hạn như Sinh viên) thay vì các thuộc tính riêng lẻ (chẳng hạn như firstName, lastName). Giao diện ModelAware yêu cầu bạn triển khai một phương thức để trả về mô hình. Trong trường hợp của chúng tôi, chúng tôi đang trả về đối tượng "student".
Tạo tệp xem
Bây giờ hãy để chúng tôi tạo student.jsp xem tệp với nội dung sau:
<%@ 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 khá đơn giản. Ở phần trên cùng, chúng tôi có một biểu mẫu gửi tới "addStudent.action". Nó có trong firstName, lastName và các dấu. Vì hành động addStudent được gắn với "AddSudentAction" của ModelAware, tự động một bean sinh viên sẽ được tạo với các giá trị cho firstName, lastName và đánh dấu được tự động điền.
Ở phần dưới cùng, chúng ta xem qua danh sách sinh viên (xem AddStudentAction.java). Chúng tôi lặp qua danh sách và hiển thị các giá trị cho tên, họ và dấu trong bảng.
Cấu hình Struts
Hãy để chúng tôi kết hợp tất cả lại với nhau bằng cách sử dụng 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>
Điều quan trọng cần lưu ý ở đây là gói "myhibernate" của chúng tôi mở rộng gói mặc định struts2 được gọi là "hibernate-default". Sau đó, chúng tôi khai báo hai hành động - addStudent và listStudents. addStudent gọi thực thi () trên lớp AddStudentAction và sau đó khi thành công, nó gọi phương thức hành động listStudents.
Phương thức hành động listStudent gọi listStudents () trên lớp AddStudentAction và sử dụng student.jsp làm dạng xem.
Bây giờ, nhấp chuột phải vào tên dự án và nhấp vào Export > WAR Fileđể tạo tệp Chiến tranh. Sau đó, triển khai WAR này trong thư mục ứng dụng web của Tomcat. Cuối cùng, khởi động máy chủ Tomcat và cố gắng truy cập URLhttp://localhost:8080/HelloWorldStruts2/student.jsp. Điều này sẽ tạo ra màn hình sau:
Trong phần trên cùng, chúng tôi nhận được một biểu mẫu để nhập các giá trị cho hồ sơ học sinh mới và phần dưới cùng liệt kê các học sinh trong cơ sở dữ liệu. Hãy tiếp tục và thêm hồ sơ học sinh mới và nhấn gửi. Màn hình sẽ làm mới và hiển thị cho bạn danh sách cập nhật mỗi khi bạn nhấp vào Gửi.