天天看點

Struts2 Spring hibernate 整合示例

示例工具:MyEclipse 7.0、Tomcat 6.0、MySql

步驟:

1.建立一個WEB工程,命名為BookShop(名字自己取,此處為示例工程名);

2.導入struts2的核心jar包,也就是在WEB-INF下的lib檔案夾中放入jar封包件,

freemaker-2.3.8.jar

ognl-2.6.11.jar

struts2-core-2.0.14.jar

struts2-spring-plugin-2.0.14.jar

xwork-2.0.7.jar

3.加載spring,選中工程名,右擊并選擇【MyEclipse】選項下的【Add Spring Capabilities...】(或者在工具欄中選擇【MyEclipse】下的【Add Spring Capabilities...】),在彈出的對話框中進行如下選擇:

 Spring 2.5 AOP Libraries

 Spring 2.5 Core Libraries

 Spring 2.5 Persistence Core Libraries

 Spring 2.5 PersistenceJDBC Libraries

 Spring 2.5 Web Libraries

點選【Next】,點選Folder文本框後的【Browse】,在彈出對話框中選擇spring配置檔案存儲位置為WEB-INF檔案夾:

點選【OK】後,再點選【Finish】完成。至此,已經完成加載spring,在WEB-INF檔案夾下已經生成了配置檔案applicationContext.xml。

4.加載Hibernate,選擇【MyEclipse】下的【Add Hibernate Capabilities...】,在彈出對話框中進行如下所示操作:  

全選 MyEclipse Libraries, 然後選擇 Copy checked Library.......

點選【Next】後,選擇Existing Spring configuration file單選框,在SessionFactory Id文本框中填入"sessionFactory",如下所示 :

選擇 Existing Spring configuration file,選擇前面的 applicationContext.xml SessionFactory Id : sessionFactory

點選【Next】,進行如下所示操作:

這裡需要選擇一個之前在 MyEclipse 中配置好的一個資料庫連結

該操作中,隻需在Bean Id文本框中輸入一個Id名,作為資料庫源的代用名,意義不大。然後在DB Driver下拉清單中,選擇MyEclipse中建立好的資料庫源xiaoqi,其他資訊将自動填寫。點選【Next】,在彈出對話框中去掉Create SessionFactory class?複選框,不建立該類,點選【Finish】完成(建立過程中,加載的jar封包件可能有重複,是以這個時候如果提示有某些jar包重複,問全部儲存【Keep Exiting】,還是替換掉【Replace】,可以選擇替換掉【Replace】)。

5.建立struts.xml檔案,在src包下建立一個struts.xml檔案,該檔案内容如下:

<!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<!--下述語句是将struts2交給spring管理 -->

<constant name="struts.objectFactory" value="spring" />

<!--導入struts-default.xml檔案 -->

<include file="struts-default.xml"></include>

<!--将action内容放在package元素下,package元素的name值與extends值可以使用預設值,如下所示 -->

<package name="login" namespace="/login" extends="struts-default"> 

<!--例如與使用者登入相關的LoginAction,配置如下,其中,class值與applicationContext.xml檔案中該action的id值相對應,name值作為辨別-->

   <action name="loginAction" class="LoginAction">

<!--result元素設定頁面跳轉值,其中name值為目标頁面的字元串辨別,如下,登入失敗時回到login.jsp頁面,成功時,轉向success.jsp頁面 -->

    <result name="fail">/login.jsp </result>

    <result name="success">/success.jsp</result>

   </action>

</package>

</struts>

6.配置web.xml檔案,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/applicationContext.xml</param-value>

</context-param>

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<listener>

<listener-class>

   org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

</web-app>

7.反向生成實體類檔案

在src包下建立一個entity包,将前面資料源xiaoqi所示資料庫bookshop中的user表反向生成Hibernate實體類檔案。

8.建立資料操作檔案

在src包下建立dao包,在該包下建立類檔案PersonManage.java,其内容如下所示:

package dao;

import java.util.*;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import entity.*;

public class PersonManage extends HibernateDaoSupport {

//普通使用者登入驗證

@SuppressWarnings("unchecked")

public boolean checkUser(String userName,String userPassword){

   boolean flag = false;

   String hql = "from User as user where user.userName = '"+userName+"' and user.userPassword = '"+userPassword+"'";

   List<User> userList = this.getHibernateTemplate().find(hql);

   if(userList.size()>0){

    flag = true;

   }

   return flag;

}

}

9.建立Action

在src包下建立一個包,名為"com.xiaoqi.action"(名字僅為示例,隻寫一個com也可以,示例寫法是采取struts中的action包名寫法),在該包下建立一個action類LoginAction.java,其内容如下:

package com.xiaoqi.action;

import com.opensymphony.xwork2.ActionSupport;

import dao.PersonManage;

public class LoginAction extends ActionSupport{

private String userName;

private String userPassword;

private PersonManage personManage;

public String getUserName() {

   return userName;

}

public void setUserName(String userName) {

   this.userName = userName;

}

public String getUserPassword() {

   return userPassword;

}

public void setUserPassword(String userPassword) {

   this.userPassword = userPassword;

}

public void setPersonManage(PersonManage personManage) {

   this.personManage = personManage;

}

public String execute(){

   String page = "fail";

   boolean flag = false;

   flag = personManage.checkUser(userName, userPassword);

   if(flag){

    page = "success";

   }

   return page;

}

}

10.建立頁面,建立登入頁面login.jsp,内容如下:

<%@ page language="java" pageEncoding="gb2312"%>

<!-- 導入struts2标簽庫 -->

<%@taglib uri="/struts-tags" prefix="s"%>

<html>

<head>

   <title>使用者登入</title>

</head>

<body>

<center>

   <div id="login">

    <s:form action="loginAction">

     <s:textfield label="使用者名" name="userName"></s:textfield>

     <s:password label="密碼" name="userPassword"></s:password>

     <s:submit value="登入"></s:submit>

    </s:form>

   </div>

</center>

</body>

</html>

頁面中,先導入struts2标簽庫,用來建立form表單。form表單送出給與登入相關的LoginAction.java檔案,而LoginAction.java在struts.xml檔案中相應的name值為"loginAction”,是以這裡的action值為"loginAction"。至于使用者名文本框與密碼文本框的name值則與LoginAction.java檔案中的userName與userPassword完全比對。

11.配置applicationContext.xml檔案:

<?xml version="1.0" encoding="UTF-8"?>

<beans

xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!--   以下為資料源配置,自動生成 -->

<bean id="candy" class="org.apache.commons.dbcp.BasicDataSource">

   <property name="driverClassName"

    value="com.mysql.jdbc.Driver">

   </property>

   <property name="url"

    value="jdbc:mysql://localhost:3306/bookstore">

   </property>

   <property name="username" value="root"></property>

   <property name="password" value="sa"></property>

</bean>

<!--   以下為sessionFactory配置,自動生成 -->

<bean id="sessionFactory"

   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

   <property name="dataSource">

    <ref bean="candy" />

   </property>

   <property name="hibernateProperties">

    <props>

     <prop key="hibernate.dialect">

      org.hibernate.dialect.MySQLDialect

     </prop>

    </props>

   </property>

   <property name="mappingResources">

    <list>

     <value>entity/User.hbm.xml</value></list>

   </property></bean>

<!--   配置PersonManage.java類檔案 -->

<bean id="personManage" class="dao.PersonManage" abstract="false"

   lazy-init="default" autowire="default" dependency-check="default">

   <property name="sessionFactory" >

    <ref local="sessionFactory"/>

   </property>

</bean>

<!--   配置LoginAction.java類檔案 -->

<bean id="LoginAction" class="com.xiaoqi.action.LoginAction" >

       <property name="personManage">

           <ref bean="personManage" />

       </property>

</bean>

</beans>

繼續閱讀