Tải bản đầy đủ (.pdf) (24 trang)

Hướng dẫn sử dụng Sự kết hợp của 2 framework Spring + Hibernate với JSF

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (885.39 KB, 24 trang )

Hướng dẫn sử dụng Sự kết hợp của
2 framework Spring + Hibernate
với JSF
Version 1.0

Revision History
Date Version Description Author
Thứ năm, Ngày 04/12/2008 1.0 - Khởi tạo
- Viết hướng dẫn sử dụng
Lê Diệp Oanh
166365631.doc
Nguyen Anh Kien
Page 2 of 24
Table of Contents
1. Overview 4
2. Các resource cần thiết và version 4
3. Hướng dẫn sử dụng 7
4. Chạy ứng dụng: 22
5. Tài liệu tham khảo 24
166365631.doc
Nguyen Anh Kien
Page 3 of 24
1. Overview
Đây là 1 sự kết hợp để xây dựng 1 ứng dụng web theo mô hình MVC: Tầng view do JSF đảm
nhận, tầng bussiness Spring đảm nhận và tầng tương tác với DB do Hibernate đảm nhiệm.
Không giám khẳng định rằng đây là sự kết hợp tốt nhất, nhưng sự kết hợp của Spring và Hibernate
thì không có vấn đề gì phải phàn nàn cả. Và hiện nay theo một số ý kiến thì JSF còn tốt hơn cả
Struts ( />2. Các resource cần thiết và version
a. Spring 2.5.4: Tìm trong spring-framework-2.5.4.zip các thư viện sau:
i. spring.jar
b. JSF 1.2.3: Tìm trong myfaces-core-1.2.3-bin.zip các thư viện sau:


i. commons-beanutils-1.7.0.jar
ii. commons-codec-1.3.jar
iii. commons-collections-3.2.jar
iv. commons-digester-1.8.jar
v. commons-discovery-0.4.jar
vi. commons-logging-1.1.1.jar
vii. myfaces-api-1.2.3.jar
viii. myfaces-impl-1.2.3.jar
c. jstl 1.2: Tìm trong jstl-1.2.jar.zip những thư viện sau:
i. jstl-1.2.jar
d. tomahawk12-1.1.7: Tìm trong tomahawk12-1.1.7-bin.zip những thư viện sau:
i. tomahawk12-1.1.7.jar
e. Hibernate 3.2.6: Tìm trong hibernate-3.2.6.ga.zip những thư viện sau:
i. ant-1.6.5.jar
ii. ant-antlr-1.6.5.jar
iii. ant-junit-1.6.5.jar
iv. ant-launcher-1.6.5.jar
v. antlr-2.7.6.jar
166365631.doc
Nguyen Anh Kien
Page 4 of 24
vi. ant-swing-1.6.5.jar
vii. asm.jar
viii. asm-attrs.jar
ix. c3p0-0.9.1.jar
x. cglib-2.1.3.jar
xi. checkstyle-all.jar
xii. cleanimports.jar
xiii. concurrent-1.3.2.jar
xiv. dom4j-1.6.1.jar

xv. ehcache-1.2.3.jar
xvi. jaas.jar
xvii. jacc-1_0-fr.jar
xviii. javassist.jar
xix. jaxen-1.1-beta-7.jar
xx. jboss-cache.jar
xxi. jboss-common.jar
xxii. jboss-jmx.jar
xxiii. jboss-system.jar
xxiv. jgroups-2.2.8.jar
xxv. jta.jar
xxvi. junit-3.8.1.jar
xxvii. log4j-1.2.11.jar
xxviii. oscache-2.1.jar
xxix. proxool-0.8.3.jar
xxx. swarmcache-1.0rc2.jar
xxxi. syndiag2.jar
xxxii. versioncheck.jar
166365631.doc
Nguyen Anh Kien
Page 5 of 24
xxxiii. xerces-2.6.2.jar
xxxiv. xml-apis.jar
f. Chỉ chạy trên Tomcat >= 6.0: apache-tomcat-6.0.16.exe
g. jdk >=1.5: jdk-1_5_0_15-windows-i586-p.exe
h. PostgresSQL8.2 : postgresql-8.2.6-2.zip là bộ cài đặt và postgresql-8.2-509.jdbc2.jar
là thư viện JDBC
i. Eclipse 3.3: eclipse-jee-europa-winter-win32
j. Tomcat plugin cho Eclipse 3.3: tomcatPluginV321.zip (Chạy tomcat trên eclipse),
sau khi copy thư mục com.sysdeo.eclipse.tomcat_3.2.1 vào trong thư mục plugin của

eclipse, ta thiết định Tomcat như sau:
Vào mục Preference…
Thiết định Tomcat như sau:
166365631.doc
Nguyen Anh Kien
Page 6 of 24
3. Hướng dẫn sử dụng
B1: Tạo 1 project dạng Tomcat project: Tên project JSF_SP_Hi01
166365631.doc
Nguyen Anh Kien
Page 7 of 24
Cấu trúc project sau khi tạo xong: (Tạo thêm thư mục jsp để chứa các file jsp)
B2: Copy các thư viện ở trên vào thư mục /WEB-INF/lib/
Sau đó tiến hành add vào Libraries trong Java Build Path
166365631.doc
Nguyen Anh Kien
Page 8 of 24
B3: Kiểm tra jdk có phải là đang sử dụng jdk 5 hay không:
Vào Project properties -> vào Java Build Path, kiểm tra đúng như hình sau không:
166365631.doc
Nguyen Anh Kien
Page 9 of 24
Sau đó vào mục Java Compiler kiểm tra đúng như màn hình sau hay không:
166365631.doc
Nguyen Anh Kien
Page 10 of 24
B4: Cấu hình file web.xml như sau:
Những đoạn text bôi màu đỏ là những đoạn có thể tùy biến, cụ thể như sau:
+<display-name>JSF_SP_Hi01</display-name>
Tag này có thể có hoặc không, là tên hiển thị của web application

+ <welcome-file>index.html</welcome-file>
Tag này có hoặc không, chỉ định file mặc định chạy ứng dụng. Ví dụ khi nhập vào địa chỉ:
http://localhost:8080/JSF_SP_Hi01/, nó sẽ dựa vào welcome-file này mà chạy file tương ứng.
http://localhost:8080/JSF_SP_Hi01/ tương đương với
http://localhost:8080/JSF_SP_Hi01/index.html
+<url-pattern>*.jsf</url-pattern>
166365631.doc
Nguyen Anh Kien
Page 11 of 24
Chỉ định dạng url nào sẽ được javax.faces.webapp.FacesServlet xử lý. Chính là phần xử lý liên
quan đến JSF
+ <param-value>/WEB-INF/JSF_SP_Hi01.xml</param-value>
Chỉ định đến file cấu hình Spring + Hibernate của project, đặt tên file xml tùy ý
+ <url-pattern>*.jsf</url-pattern>
Chỉ định dạng url nào sẽ được filter bởi
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter. Đây là phần filter của
Spring với các request dạng .jsf
166365631.doc
Nguyen Anh Kien
Page 12 of 24
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi=" />xmlns=" />xmlns:web=" />xsi:schemaLocation="
/>id="WebApp_ID" version="2.5">
<display-name>JSF_SP_Hi01</display-name>
<! welcome files >
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<! JSF >
<servlet>

<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-
class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/JSF_SP_Hi01.xml</param-value>
</context-param>
<! Spring + Hibernate >
<filter>
<filter-name>sessionFilter</filter-name>
<filter-
class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
<listener>
<listener-

class>org.springframework.web.context.ContextLoaderListener</listener-
class>
</listener>
<listener>
<listener-
class>org.apache.myfaces.webapp.StartupServletContextListener</listener-
class>
</listener>
</web-app>
B5: Tạo file properties kết nối với DB, cụ thể ví dụ là postgresql: /WEB-
INF/postgres.properties
166365631.doc
Nguyen Anh Kien
Page 13 of 24
driverClassName=org.postgresql.Driver
url=jdbc:postgresql://localhost:5432/DRDatabase
username=postgres
password=lediepoanh
dialect=org.hibernate.dialect.PostgreSQLDialect
hbm2ddl.auto=update
B5: Cấu hình file cho sự kết hợp Spring + Hibernate: JSF_SP_Hi01.xml như sau:
Lưu ý những phần tô đỏ sau:
+ <value>/WEB-INF/postgres.properties</value>
Tên file dùng để kết nối DB đã được tạo ở bước 4
+<value>${driverClassName}</value>
Các tên trong dấu ${} là tên 1 phần tử tương ứng trong file postgres.properties
+ <list><value>/bean/User.hbm.xml</value></list>
Chỉ đến file hibernate XML Mapping (.hbm.xml)
+<bean id="HibernateSpringDaoTarget" class="dao.HibernateSpringDAOImpl">
Class được tạo ra trong project để xử lý ở tầng Database

166365631.doc
Nguyen Anh Kien
Page 14 of 24
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
" /><beans>
<! property Configurer >
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/postgres.properties</value>
</property>
</bean>
<! jdbc >
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${driverClassName}</value>
</property>
<property name="url">
<value>${url}</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
</bean>
<! Mapping files >

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list><value>/bean/User.hbm.xml</value></list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${dialect}</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">${hbm2ddl.auto}</prop>
</props>
</property>
</bean>
<! SessionFactory >
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<! My bean >
<bean id="HibernateSpringDaoTarget" class="dao.HibernateSpringDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<bean id="SpringHibernateDao"

class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref local="transactionManager" />
</property>
<property name="target">
<ref local="HibernateSpringDaoTarget" />
</property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="store*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
</props>
</property>
166365631.doc
Nguyen Anh Kien
Page 15 of 24
B6: Tạo 1 Class User tương ứng với table users trong DB như sau: bean.User
package bean;
import java.io.Serializable;
public class User implements Serializable {
private Integer userId;
private String userName;
private String userPassword;
private String userEmail;
private String userAddress;
public User(Integer userId, String userName, String userPassword,
String userEmail, String userAddress) {

this.userId = userId;
this.userName = userName;
this.userPassword = userPassword;
this.userEmail = userEmail;
this.userAddress = userAddress;
}
public User() {
}
public User(Integer userId) {
this.userId = userId;
}
public Integer getUserId() {
return this.userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return this.userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public String getUserEmail() {

return this.userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
public String getUserAddress() {
return this.userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
}
166365631.doc
Nguyen Anh Kien
Page 16 of 24
Và tạo file mapping User.hbm.xml như đã khai báo trong file cấu hình Spring + Hibernate:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping
DTD//EN"
" />3.0.dtd">
<hibernate-mapping auto-import="true" default-lazy="false">
<class name="bean.User" table="users">
<id name="userId" type="java.lang.Integer" column="userId">
<generator class="increment" />
</id>
<property name="userName" type="java.lang.String"
column="userName" length="20" />
<property name="userPassword" type="java.lang.String"
column="userPassword" length="11" />
<property name="userEmail" type="java.lang.String"

column="userEmail" length="30" />
<property name="userAddress" type="java.lang.String"
column="userAddress" length="30" />
</class>
</hibernate-mapping>
B7: Tạo ra 1 class dùng để check user: bean.CheckValidUser
166365631.doc
Nguyen Anh Kien
Page 17 of 24
package bean;
import util.ServiceFinder;
import dao.HibernateSpringDAO;
public class CheckValidUser {
String userName;
String pwd;
boolean exist;
public void setUserName(String userName) {
this.userName = userName;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public void setExist(boolean exist) {
this.exist = exist;
}
public String getUserName() {
return userName;
}
public String getPwd() {
return pwd;

}
public boolean getExist() {
return exist;
}
public String checkUser() throws Exception {
String status = "failure";
HibernateSpringDAO dao = (HibernateSpringDAO) ServiceFinder
.findBean("SpringHibernateDao");
if (dao.validateUser(getUserName(), getPwd()) != null) {
exist = false;
status = "success";
}
exist = true;
return status;
}
}
B8: Tạo 1 interface DAO dao.HibernateSpringDAO có chứa phương thức validateUser()
được sử dụng trong class CheckValidUser:
package dao;
import org.springframework.dao.DataAccessException;
import bean.User;
public interface HibernateSpringDAO {
public User validateUser(String strUserName,String password)
throws DataAccessException,java.sql.SQLException;
}
Và 1 class để implement interface này: dao. HibernateSpringDAOImpl như sau:
166365631.doc
Nguyen Anh Kien
Page 18 of 24
package dao;

import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Expression;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import bean.User;
public class HibernateSpringDAOImpl extends HibernateDaoSupport
implements HibernateSpringDAO {
public User validateUser(String strUserName,String password)
throws DataAccessException, java.sql.SQLException {
User obj = null;
DetachedCriteria criteria =
DetachedCriteria.forClass(User.class);
criteria.add(Expression.eq("userName", strUserName));
criteria.add(Expression.eq("userPassword", password));
List objs = getHibernateTemplate().findByCriteria(criteria);
if ((objs != null) && (objs.size() > 0)) {
obj = (User) objs.get(0);
}
return obj;
}
}
B9: Tạo 1 Class util.ServiceFinder để tìm các bean như sau:
package util;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import org.springframework.context.ApplicationContext;
import
org.springframework.web.context.support.WebApplicationContextUtils;
public class ServiceFinder {

public static Object findBean(String beanName) {
FacesContext context = FacesContext.getCurrentInstance();
ServletContext servletContext = (ServletContext) context
.getExternalContext().getContext();
ApplicationContext appContext = WebApplicationContextUtils
.getWebApplicationContext(servletContext);
Object o = appContext.getBean(beanName);
return o;
}
}
B10: Tạo file xml faces-config.xml để khai báo các file jsf và bean
166365631.doc
Nguyen Anh Kien
Page 19 of 24
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
" /><faces-config>
<managed-bean>
<managed-bean-name>CheckValidUser</managed-bean-name>
<managed-bean-class>bean.CheckValidUser</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/jsp/index.jsp</from-view-id>
<navigation-case>
<from-outcome>failure</from-outcome>
<to-view-id>/jsp/index.jsp</to-view-id>
</navigation-case>
<navigation-case>

<from-outcome>success</from-outcome>
<to-view-id>/jsp/welcome.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
B11: Tạo các file html và jsp như đã khai báo ở trên như sau:
File index.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
" /><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Refresh" content="0;url=jsp/index.jsf">
<title>JSF_SP_Hi01</title>
</head>
<body>
<h3>Loading </h3>
</body>
</html>
File /jsp/index.jsp:
166365631.doc
Nguyen Anh Kien
Page 20 of 24
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri=" /><%@ taglib prefix="h" uri=" /><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
" /><html>
<f:view>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-
8">

<title>JSF_SP_Hi01</title>
</head>
<body>
<h:form>
<h:outputLabel value="UserName: "/><h:inputText
id="UserName" value="#{CheckValidUser.userName}" size="27"
required="true" /><br/>
<h:outputLabel value="Password: "/><h:inputSecret
id="Password" value="#{CheckValidUser.pwd}" size="27"
required="true" /><BR/>
<h:commandButton value="Check"
action="#{CheckValidUser.checkUser}" />
</h:form>
</body>
</f:view>
</html>
File welcome.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri=" /><%@ taglib prefix="h" uri=" /><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
" /><html>
<f:view>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-
8">
<title>JSF_SP_Hi01</title>
</head>
<body>
<h2><h:outputText value="Testing successfully!"/></h2>
</body>

</f:view>
</html>
166365631.doc
Nguyen Anh Kien
Page 21 of 24
4. Chạy ứng dụng:
B1: Start Tomcat: Click vào biểu tượng
B2: Đưa project vào server Tomcat như sau
Đảm bảo quá trình trên không có lỗi xảy ra, màn hình kết quả như sau (Trên Console)
166365631.doc
Nguyen Anh Kien
Page 22 of 24
Và:
B3: Vào trình duyệt, gõ vào address: http://localhost:8080/JSF_SP_Hi01/
Màn hình như sau:



166365631.doc
Nguyen Anh Kien
Page 23 of 24

Hoàn tất demo về sự kết hợp giữa Spring + Hibernate + JSF
5. Tài liệu tham khảo
- />166365631.doc
Nguyen Anh Kien
Page 24 of 24

×