Struts 2와 Hibernate 통합
Hibernate는 오픈 소스 GNU Lesser General Public License (LGPL)에 따라 라이센스가 부여되고 무료로 다운로드 할 수있는 고성능 객체 / 관계형 지속성 및 쿼리 서비스입니다. 이 챕터에서는. 우리는 Hibernate와 Struts 2 통합을 달성하는 방법을 배울 것입니다. 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의 설정 파일 인 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 드라이버를 사용하고 있다고 선언했습니다. 그런 다음 데이터베이스에 연결하기위한 jdbc URL을 선언했습니다. 그런 다음 연결의 사용자 이름, 암호 및 풀 크기를 선언했습니다. 또한 "show_sql"을 true로 설정하여 로그 파일에서 SQL을보고 싶다고 표시했습니다. 이러한 속성의 의미를 이해하려면 최대 절전 모드 자습서를 참조하십시오.
마지막으로이 장에서 생성 할 매핑 클래스를 com.tutorialspoint.hibernate.Student로 설정합니다.
환경 설정
다음으로이 프로젝트에는 많은 항아리가 필요합니다. 첨부는 필요한 JAR 파일의 전체 목록의 스크린 샷입니다.
대부분의 JAR 파일은 struts 배포의 일부로 얻을 수 있습니다. glassfish, websphere 또는 jboss와 같은 응용 프로그램 서버가 설치되어있는 경우 응용 프로그램 서버의 lib 폴더에서 나머지 jar 파일 대부분을 가져올 수 있습니다. 그렇지 않은 경우 파일을 개별적으로 다운로드 할 수 있습니다.
Hibernate jar 파일 -Hibernate.org
Struts Hibernate 플러그인 − Struts Hibernate 플러그인
JTA 파일 -JTA 파일
Dom4j 파일 -Dom4j
log4j 파일 -log4j
나머지 파일은 Struts2 배포판에서 가져올 수 있습니다.
Hibernate 클래스
이제 최대 절전 모드 통합에 필요한 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 클래스입니다. studentHibernate 사양에 따라 테이블. 학생 테이블의 열 이름에 해당하는 속성 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 ()는 학생을 나열하는 데 사용됩니다. 우리는 모든 학생의 목록을 얻기 위해 dao의 목록 방법을 사용합니다.
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 인터페이스를 구현하고 있음을 알 수 있습니다. 이는 액션 클래스가 개별 속성 (예 : firstName, lastName)이 아닌 구체적인 모델 클래스 (예 : Student)를 처리 할 때 사용됩니다. 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"에 연결되어 있기 때문에 firstName, lastName 및 마크에 대한 값이 자동으로 채워지는 학생 빈이 자동으로 생성됩니다.
하단 섹션에서 학생 목록을 살펴 봅니다 (AddStudentAction.java 참조). 목록을 반복하고 이름, 성 및 마크 값을 테이블에 표시합니다.
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 = "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"패키지가 "hibernate-default"라는 struts2 기본 패키지를 확장한다는 것입니다. 그런 다음 addStudent 및 listStudents의 두 가지 작업을 선언합니다. addStudent는 AddStudentAction 클래스에서 execute ()를 호출 한 다음 성공하면 listStudents 작업 메서드를 호출합니다.
listStudent 작업 메서드는 AddStudentAction 클래스에서 listStudents ()를 호출하고 student.jsp를보기로 사용합니다.
이제 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 Export > WAR FileWar 파일을 만듭니다. 그런 다음 Tomcat의 webapps 디렉토리에이 WAR을 배포합니다. 마지막으로 Tomcat 서버를 시작하고 URL에 액세스하십시오.http://localhost:8080/HelloWorldStruts2/student.jsp. 다음 화면이 생성됩니다.
상단 섹션에는 새 학생 기록에 대한 값을 입력하는 양식이 있고 하단 섹션에는 데이터베이스의 학생이 나열됩니다. 계속해서 새 학생 기록을 추가하고 제출을 누르십시오. 제출을 클릭 할 때마다 화면이 새로 고쳐지고 업데이트 된 목록이 표시됩니다.