Struct2、Hibernate3、Spring3框架搭建實戰

jopen 12年前發布 | 132K 次閱讀 Struct2 Spring3 JEE框架 Hibernate3

采用目前最新的struts-2.3.1.2、hibernate3.6.10.Final、spring-framework-3.1.1.RELEASE開發包,以及eclipse-jee-indigo-SR2-win32、apache-tomcat-7.0.27服務器、JDK6和mysql5做開發環境,參考了前輩的一篇相關文章,改正了其中的錯誤和疏漏,克服了公司分配的“新”機器每小時自動重啟三次的困難,終于把環境給搭好了。整個過程中遵循的一個原則是,避免引入用不到的jar包,以求搭建一個最小的SSH運行環境。

首先創建一個Dynamic web project 輸入任意名字如SSHBase。

第一步:加載Spring環境

我們需要引入的包有:

org.springframework.asm-3.1.1.RELEASE.jar org.springframework.beans-3.1.1.RELEASE.jar org.springframework.context-3.1.1.RELEASE.jar

org.springframework.core-3.1.1.RELEASE.jar org.springframework.expression-3.1.1.RELEASE.jar org.springframework.jdbc-3.1.1.RELEASE.jar

org.springframework.web-3.1.1.RELEASE.jar org.springframework.orm-3.1.1.RELEASE.jar

由于spring默認開啟了日志,還需要加入commons-logging的jar包,否則會報錯。

建議不要一次性加入 應該先加最核心的運行代碼看缺少什么加什么,這樣就不會加多余的包進來了,spring3已經把包按功能分開,不像以前一個包,這樣更靈活,只要運行我們需要的功能,而沒用到的就不用在硬性的添加進來。

包加好了之后我們開始創建spring應用,創建一個XML文件ApplicationContext.xml(放在src根目錄),下面是基本結構

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!--在這里面添加beans-->

</beans></pre>

寫一個用例來測試一下spring搭建好了沒有,創建一個Person類:

public class Person {

private String name;
private int age;

/* 也可以寫get方法這邊就不寫了,不寫也行spring沒有要求一定要有 */

public void setName(String name) {
    this.name = name;
}

public void setAge(int age) {
    this.age = age;
}

public String toString() {
    return "name : " + name + " age : " + age; // 重寫toString方法以便輸出信息
}

}</pre>

然后在配置文件,也就是AppliccationContext.xml里面添加bean相關配置,要注意類的包路徑(這是值注入,還有接口和構造注入):

<bean  id="nike" class="Person"  scope="prototype" >

<property name="name" value="XXX"></property>

<property name="age" value="18"></property>

</bean></pre>

再寫一個測試類,來進行測試:

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;

public class testSpring {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    XmlBeanFactory beansfactory = new XmlBeanFactory(new FileSystemResource("src/ApplicationContext.xml"));
    System.out.println(beansfactory);
    Person nike = (Person)beansfactory.getBean("nike");
    System.out.println(nike);
}

}</pre>

運行效果應該看到: name : XXX age : 18

這就證明搭建好了,beans已經自己創建。

第二步:整合hibernate

需要的包如下:

antlr-2.7.6.jar commons-collections-3.1.jar commons-logging-1.1.1.jar dom4j-1.6.1.jar

hibernate3.jar slf4j-api-1.6.1.jar hibernate-jpa-2.0-api-1.0.1.Final.jar

javassist-3.12.0.GA.jar jta-1.1.jar ejb3-persistence.jar

加好之后在spring里面配置hibernate(假定在數據庫已經創建了一個叫做myTest的數據庫)

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">   <!-- 定義數據源 -->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/><!-- 定義數據庫驅動-->
        <property name="url" value="jdbc:mysql://localhost:3306/mytest?characterEncoding=UTF-8"/><!-- 連接字符串-->
        <property name="username" value="root" /><!-- 賬號-->
        <property name="password" value="root"/><!-- 密碼-->
    </bean>

<!-- 配置sessionFactory 配置 -->
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="annotatedClasses" >
        <list>
            <value>com.neareast.test.Person</value><!-- 定義元素關聯,xml文件也可以配置我這邊直接用annoration配置 -->
        </list>
    </property>
    <property name="hibernateProperties"><!--hibernate參數-->
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hiberante.format_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
</bean>

<!--定義DAO-->
<bean id="personDao" class="com.neareast.test.PersonDao">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean></pre> <p style="padding-bottom:0px;margin-top:0px;padding-left:0px;padding-right:0px;margin-bottom:0px;padding-top:0px;"></p>

然后修改一下剛才的Person類,并加上注解,就可以用了:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity @Table(name="person") public class Person { @Id @Column(unique=true,name="id",nullable=false) private int id ; @Column(name="name",length=20) private String name; @Column(name="age") private int age; /也可以寫get方法這邊就不寫了,不寫也行spring沒有要求一定要有/ public void setName(String name){ this.name=name; } public void setId(int id ){ this.id = id; } public void setAge(int age){ this.age=age; }

public String toString() {
    return "name : " + name + " age : " + age;//重寫toString方法以便輸出信息
}

}</pre>

DAO接口中定義了四個簡單的方法:

public interface IPersonDao {
    public void createPerson(Person person);
    public List<Serializable> getAll();
    public int count();
    public void drop(Person person);
}

其實現如下:

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

public class PersonDao implements IPersonDao {

private SessionFactory sessionFactory;

@Override
public void createPerson(Person person) {
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    session.save(person);
    session.beginTransaction().commit();
}

@Override
public List<Serializable> getAll() {
    Session session = sessionFactory.openSession();
    String sql = "from Person";
    session.beginTransaction();
    Query query = session.createQuery(sql);
    return query.list();
}

@Override
public int count() {
    Session session = sessionFactory.openSession();
    String sql = "from Person";
    session.beginTransaction();
    Query query = session.createQuery(sql);
    return query.list().size();
}

@Override
public void drop(Person person) {
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    session.delete(person);
    session.beginTransaction().commit();

}

public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

}</pre>

然后再寫一個簡單的用例來測試:

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;

public class TestHibernate { public static void main(String[] args) { XmlBeanFactory beansfactory = new XmlBeanFactory( new FileSystemResource("src/ApplicationContext.xml")); PersonDao persondao = (PersonDao) beansfactory.getBean("personDao"); Person person = new Person(); person.setAge(123); person.setName("哈哈哈"); persondao.createPerson(person); System.out.println(persondao.getAll().size()); } }</pre>

由于數據表設置成自動更新,在沒有表的情況下,hibernate會幫我們自動創建表和他們之間的關系。打開mysql客戶端 輸入:

use mytest;

select * from person;

如果看到我們的數據就證明OK了!

在這我們就已經將hibernate 基本整合好了!

第三步:整合Struts2

引入下列jar包:

struts2-core-2.3.1.2.jar struts2-spring-plugin-2.3.1.2.jar xwork-core-2.3.1.2.jar commons-io-2.0.1.jar commons-lang-2.5.jar

ognl-3.0.4.jar freemarker-2.3.18.jar commons-logging-api-1.1.jar commons-fileupload-1.2.2.jar

在WEB-INF目錄下,創建并編輯web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="

<display-name>SSHBase1.0</display-name>

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

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/ApplicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<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>

</web-app></pre>

在src下創建配置文件struts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    ";

<struts> <constant name="struts.devMode" value="true" /> <!--很重要注明工廠 --> <constant name="struts.objectFactory" value="spring"></constant>

<package name="myPackage" extends="struts-default">
    <action name="index">
        <result>/index.jsp</result>
    </action>
    <!-- 第一個測試的 -->
    <action name="helloAction" class="hello" method="getPerson">
        <result name="SUCCESS">/hello.jsp</result>
    </action>
</package>

</struts></pre>

接下來,創建相應的Action,(注意此處可能需要手動引入服務器的Server Runtime庫),例如:

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport; public class HelloAction extends ActionSupport {

private static final long serialVersionUID = 1L;
private IPersonDao dao;

/*
 * 測試方法 spring 值注入順序是按照配置文件值的順序注入
 */
public String getPerson() {
    System.out.println(dao);
    HttpServletRequest request = ServletActionContext.getRequest();
    request.getSession().setAttribute("personlist", dao.getAll());
    return "SUCCESS";
}

public IPersonDao getDao() {
    return dao;
}

public void setDao(IPersonDao dao) {
    this.dao = dao;
}

}</pre>

然后在spring的配置文件里,配置相應的class bean:

  <bean id="hello" class="com.neareast.test.HelloAction">
        <property name="dao" ref="personDao"></property>
    </bean>

接下來創建個頁面來進行測試,可在WebContent下面創建一個hello.jsp頁面:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!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">
<title>test OK</title>
</head>
<body>
    測試OK
    <br>
    <a> 姓 :</a>
    <label>${personlist}</label>
    <br />
</body>
</html>

最后,啟動服務器,在瀏覽器中輸入: http://localhost:8080/SSHBase/helloAction,就可以看到我們數據庫里的數據了。

至此,最基本的SSH已經整合完畢!

整個項目的代碼我已經打包上傳,歡迎下載,鏈接如下: http://download.csdn.net/detail/neareast/4223692


轉自:http://blog.csdn.net/neareast/article/details/7457618

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!