24
LUVINA SOFTWARE COMPANY Ngy to: 04/12/2008 Huong dan su dung su ket hop: Spring + Hibernate + JSF Trang: 1 /24 Hướng dẫn sử dụng Sự kết hợp của 2 framework Spring + Hibernate với JSF Version 1.0

Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

  • Upload
    congku

  • View
    692

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

LUVINA SOFTWARE COMPANY Ngay tao: 04/12/2008

Huong dan su dung su ket hop: Spring + Hibernate + JSF

Trang: 1 /23

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

với JSFVersion 1.0

Page 2: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

Revision History

Date Version Description Author

Thứ năm, Ngay 04/12/2008 1.0 - Khởi tao

- Viết hướng dẫn sử dụng

Lê Diệp Oanh

document.doc Lê Diệp Oanh Page 2 of 23

Page 3: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

Table of Contents

1. Overview 4

2. Các resource cần thiết va version 4

3. Hướng dẫn sử dụng 6

4. Chay ứng dụng: 20

5. Tai liệu tham khảo 23

document.doc Lê Diệp Oanh Page 3 of 23

Page 4: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

1. OverviewĐây la 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 va tầng tương tác với DB do Hibernate đảm nhiệm.Không giám khẳng định rằng đây la sự kết hợp tốt nhất, nhưng sự kết hợp của Spring va Hibernate thì không có vấn đề gì phải phan nan cả. Va hiện nay theo một số ý kiến thì JSF còn tốt hơn cả Struts (http://www.theserverside.com/discussions/thread.tss?thread_id=33884)

2. Các resource cần thiết và versiona. Spring 2.5.4: Tìm trong spring-framework-2.5.4.zip các thư viện sau:

i. spring.jarb. 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.jarii. commons-codec-1.3.jar

iii. commons-collections-3.2.jariv. commons-digester-1.8.jarv. commons-discovery-0.4.jar

vi. commons-logging-1.1.1.jarvii. myfaces-api-1.2.3.jar

viii. myfaces-impl-1.2.3.jarc. jstl 1.2: Tìm trong jstl-1.2.jar.zip những thư viện sau:

i. jstl-1.2.jard. tomahawk12-1.1.7: Tìm trong tomahawk12-1.1.7-bin.zip những thư viện sau:

i. tomahawk12-1.1.7.jare. Hibernate 3.2.6: Tìm trong hibernate-3.2.6.ga.zip những thư viện sau:

i. ant-1.6.5.jarii. ant-antlr-1.6.5.jar

iii. ant-junit-1.6.5.jariv. ant-launcher-1.6.5.jarv. antlr-2.7.6.jar

vi. ant-swing-1.6.5.jarvii. asm.jar

viii. asm-attrs.jarix. c3p0-0.9.1.jarx. cglib-2.1.3.jar

xi. checkstyle-all.jarxii. cleanimports.jar

xiii. concurrent-1.3.2.jarxiv. dom4j-1.6.1.jarxv. ehcache-1.2.3.jar

xvi. jaas.jarxvii. jacc-1_0-fr.jar

xviii. javassist.jarxix. jaxen-1.1-beta-7.jar

document.doc Lê Diệp Oanh Page 4 of 23

Page 5: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

xx. jboss-cache.jarxxi. jboss-common.jar

xxii. jboss-jmx.jarxxiii. jboss-system.jarxxiv. jgroups-2.2.8.jarxxv. jta.jar

xxvi. junit-3.8.1.jarxxvii. log4j-1.2.11.jar

xxviii. oscache-2.1.jarxxix. proxool-0.8.3.jarxxx. swarmcache-1.0rc2.jar

xxxi. syndiag2.jarxxxii. versioncheck.jar

xxxiii. xerces-2.6.2.jarxxxiv. xml-apis.jar

f. Chỉ chay trên Tomcat >= 6.0: apache-tomcat-6.0.16.exeg. jdk >=1.5: jdk-1_5_0_15-windows-i586-p.exeh. PostgresSQL8.2 : postgresql-8.2.6-2.zip la bộ cai đặt va postgresql-8.2-509.jdbc2.jar

la thư viện JDBCi. Eclipse 3.3: eclipse-jee-europa-winter-win32j. Tomcat plugin cho Eclipse 3.3: tomcatPluginV321.zip (Chay tomcat trên eclipse),

sau khi copy thư mục com.sysdeo.eclipse.tomcat_3.2.1 vao trong thư mục plugin của eclipse, ta thiết định Tomcat như sau:Vao mục Preference…

Thiết định Tomcat như sau:

document.doc Lê Diệp Oanh Page 5 of 23

Page 6: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

3. Hướng dẫn sử dụngB1: Tạo 1 project dạng Tomcat project: Tên project JSF_SP_Hi01

document.doc Lê Diệp Oanh Page 6 of 23

Page 7: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

Cấu trúc project sau khi tao xong: (Tao 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 hanh add vao Libraries trong Java Build Path

document.doc Lê Diệp Oanh Page 7 of 23

Page 8: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

B3: Kiểm tra jdk có phải là đang sử dụng jdk 5 hay không:Vao Project properties -> vao Java Build Path, kiểm tra đúng như hình sau không:

document.doc Lê Diệp Oanh Page 8 of 23

Page 9: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

Sau đó vao mục Java Compiler kiểm tra đúng như man hình sau hay không:

document.doc Lê Diệp Oanh Page 9 of 23

Page 10: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

B4: Cấu hình file web.xml như sau:Những đoan text bôi mau đỏ la những đoan có thể tùy biến, cụ thể như sau:+<display-name>JSF_SP_Hi01</display-name> Tag nay có thể có hoặc không, la tên hiển thị của web application+ <welcome-file>index.html</welcome-file>

Tag nay có hoặc không, chỉ định file mặc định chay ứng dụng. Ví dụ khi nhập vao địa chỉ: http://localhost:8080/JSF_SP_Hi01/, nó sẽ dựa vao welcome-file nay ma chay 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>

Chỉ định dang url nao sẽ được javax.faces.webapp.FacesServlet xử lý. Chính la 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>

document.doc Lê Diệp Oanh Page 10 of 23

Page 11: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

Chỉ định dang url nao sẽ được filter bởi org.springframework.orm.hibernate3.support.OpenSessionInViewFilter. Đây la phần filter của Spring với các request dang .jsf

document.doc Lê Diệp Oanh Page 11 of 23

Page 12: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"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ụ la postgresql: /WEB-INF/postgres.properties

document.doc Lê Diệp Oanh Page 12 of 23

Page 13: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

driverClassName=org.postgresql.Driverurl=jdbc:postgresql://localhost:5432/DRDatabaseusername=postgrespassword=lediepoanhdialect=org.hibernate.dialect.PostgreSQLDialecthbm2ddl.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 tao ở bước 4+<value>${driverClassName}</value>

Các tên trong dấu ${} la 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 tao ra trong project để xử lý ở tầng Database

document.doc Lê Diệp Oanh Page 13 of 23

Page 14: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd"><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>

document.doc Lê Diệp Oanh Page 14 of 23

Page 15: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

B6: Tao 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; }}

Va tao file mapping User.hbm.xml như đã khai báo trong file cấu hình Spring + Hibernate:

document.doc Lê Diệp Oanh Page 15 of 23

Page 16: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-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: Tao ra 1 class dùng để check user: bean.CheckValidUser

document.doc Lê Diệp Oanh Page 16 of 23

Page 17: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

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: Tao 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;}

Va 1 class để implement interface nay: dao. HibernateSpringDAOImpl như sau:

document.doc Lê Diệp Oanh Page 17 of 23

Page 18: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

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: Tao 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: Tao file xml faces-config.xml để khai báo các file jsf va bean

document.doc Lê Diệp Oanh Page 18 of 23

Page 19: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"><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: Tao các file html va jsp như đã khai báo ở trên như sau:File index.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><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:

document.doc Lê Diệp Oanh Page 19 of 23

Page 20: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>

<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%><%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><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="http://java.sun.com/jsf/core"%><%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><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>

4. Chạy ứng dụng:

B1: Start Tomcat: Click vao biểu tượng

B2: Đưa project vao server Tomcat như sau

document.doc Lê Diệp Oanh Page 20 of 23

Page 21: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

Đảm bảo quá trình trên không có lỗi xảy ra, man hình kết quả như sau (Trên Console)

Va:

document.doc Lê Diệp Oanh Page 21 of 23

Page 22: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

B3: Vao trình duyệt, gõ vao address: http://localhost:8080/JSF_SP_Hi01/ Man hình như sau:

Hoan tất demo về sự kết hợp giữa Spring + Hibernate + JSF

document.doc Lê Diệp Oanh Page 22 of 23

Page 23: Huong Dan Su Dung Su Ket Hop Cua Spring + Hibernate + JSF

5. Tài liệu tham khảo- http://www.roseindia.net/jsf/myfacesspring/index.shtml\

document.doc Lê Diệp Oanh Page 23 of 23