NetBeans6.1下搭建Struts2.0+Spring2.5+Hibernate3開發環境

 Struts和Spring的新版本變動很大,搭建開發環境時配置文件的內容也隨着改變了,前段時間爲了搭建開發環境費了不小勁,現在發佈出來希望能給新手一點幫助。網上關於ssh開發環境的說明都是基於Struts1.2和Spring2的,而且都是以Eclipse爲IDE,當然IDE對開發環境的搭建沒有明顯的影響,但是在NetBeans下搭建ssh開發環境還是快捷得多的。
        NetBeans6.1自帶了Spring2.5,Struts1.2,沒有Hibernate支持,所以爲了搭建Struts2.0+Spring2.5+Hibernate3的開發環境,必需下載Struts2.0和Hibernate3的NetBeans插件,這都是很容易找到的,確實找不到就留下郵箱吧。在NetBeans裏安裝插件的方法: 工具-插件- 已下載-添加插件-安裝。
        好了,插件安裝完畢,重啓NetBeans後新建Web項目,修改項目名之後一路默認走下去,在框架選擇那一步把Struts2.0、Spring2.5和Hibernate勾上,完成,這樣就創建了一個具有ssh支持的Web項目。但是,要整合使用ssh還得進入最麻煩的一步:修改配置文件。下面就以一例子來說明修改配置文件的過程。
        新建了上面的項目後,NetBeans自動爲你生成了一個HelloWorld的Struts例子,就在這個例子上面改吧。
        在源包-缺省包裏有一個Struts配置文件example.xml,內容如下

1<struts>
2    <package name="example" namespace="/example" extends="struts-default">
3        <action name="HelloWorld" class="example.HelloWorld">
4            <result>/example/HelloWorld.jsp</result>
5        </action>
6    </package>
7</struts>
這只是一個簡單的action配置節,這個文件被struts.xml 包含(include),所以服務器能找到它。
接下來是最關鍵的配置--Spring配置文件applicationContext.xml,以下內容都在<Beans>配置節裏添加:
1。首先添加數據源Bean
 1<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 2       <!-- 指定連接數據庫的驅動 -->
 3        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
 4       <!-- 指定連接數據庫的URL -->
 5        <property name="url" value="jdbc:mysql://localhost:3306/sunsite"/>
 6       <!-- 指定連接數據庫的用戶名 -->
 7        <property name="username" value="root"/>
 8       <!-- 指定連接數據庫的密碼 -->
 9        <property name="password" value="123"/>
10    </bean>
添加mysql驅動包這些與主題不靠緊的話就不多說了,注意上面這段配置內容要根據你的實際情況配置url、username和password。
2。讓Spring管理Hibernate
 1<!-- 管理Hibernate -->
 2    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
 3        <property name="dataSource" ref="dataSource">
 4        </property>
 5        <property name="mappingResources">
 6        </property>
 7        <property name="hibernateProperties">
 8            <value>
 9                hibernate.dialect=org.hibernate.dialect.MySQLDialect
10            </value>
11        </property>
12    </bean>
這樣就將SSH整合了。

在源包新建類User,裏面只有一個字段user
1public class User {
2    private String name;
3    public String getName() {
4        return name;
5    }

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

9}

然後修改Action類HelloWorld.java,它繼承於com.opensymphony.xwork2.ActionSupport,繼承這個類的好處是你只需要覆蓋一個簡單的execute()並通過返回字符串來標識跳轉到的頁面。
在HelloWorld.java添加私有字段user和對應的set方法(可在添加字段後用Netbeans的 重構-封裝字段 生成set方法)
添加message字段和get方法(爲什麼這裏是get?因爲message是爲了後面讓jsp讀取的,而user是爲了讓Spring寫入的)
 1public class HelloWorld extends ActionSupport {
 2
 3    private User user;
 4    public void setUser(User user) {
 5        this.user = user;
 6    }

 7    private String message;
 8    public String getMessage() {
 9        return message;
10    }

11
12    @Override
13    public String execute() throws Exception {
14        this.message = user.getName();
15        return SUCCESS;
16    }

17}
然後在applicationContext.xml裏爲User實體和HelloWorld Action增加配置節
1<bean name="user" class="sunsite.po.User">
2        <property name="name" value="Ruby"></property>
3    </bean>
4    <bean id="helloAction" class="example.HelloWorld">
5        <property name="user" ref="user"/>
6    </bean>

這樣,實體和Action就在Spring的管理之下了,於是可以在example.xml這樣配置Action(修改自動生成的配置文件如下)
1<struts>
2    <package name="example" namespace="/example" extends="struts-default">
3        <action name="HelloWorld" class="helloAction">
4            <result>/example/HelloWorld.jsp</result>
5        </action>
6    </package>
7</struts>
這裏class的值就是前面Spring配置文件裏定義的Action Bean,每當有請求發送到HelloWorld時,就會交由這個Bean處理。
修改HelloWorld.jsp的內容如下
 1<%@ page contentType="text/html; charset=UTF-8" %>
 2<%@ taglib prefix="s" uri="/struts-tags" %>
 3<html>
 4    <head>
 5        <title></title>
 6    </head>
 7    <body>
 8        <h2><s:property value="message"/></h2>
 9        <ul>
10            <li>
11                <s:url id="url" action="HelloWorld">
12                </s:url>
13                <s:a href="%{url}">獲得User的名字</s:a>
14            </li>
15        </ul>
16    </body>
17</html>
運行這個頁面,點擊“獲得User的名字”超鏈接就能看見“Ruby”了,這是你在Spring配置文件裏定義的。到這裏Struts和Spring整合的例子就完成了,如果要把Hibernate部分也包含進去,則要增加一個dao類用作數據存取。
首先在源包增加一個Hibernate映射文件user.hbm.xml(可用Netbeans的嚮導輔助)
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
3<hibernate-mapping>
4  <class dynamic-insert="false" dynamic-update="false" mutable="true" name="User" optimistic-lock="version" polymorphism="implicit" select-before-update="false" table="user">
5    <property column="userName" name="name" type="string"/>
6  </class>
7</hibernate-mapping>
(這裏假設你已經建立mysql數據和user表,裏面有userName這個字段)
在Spring配置文件找到剛纔的管理Hibernate的配置節,如下方法把Hibernate映射文件添加進去
 1<!-- 管理Hibernate -->
 2    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
 3        <property name="dataSource" ref="dataSource">
 4        </property>
 5        <property name="mappingResources">
 6            <list>
 7                <value>user.hbm.xml</value>
 8            </list>
 9        </property>
10        <property name="hibernateProperties">
11            <value>
12                hibernate.dialect=org.hibernate.dialect.MySQLDialect
13            </value>
14        </property>
15    </bean>

然後在源包添加類UserDao.java
 1import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
 2
 3public class UserDao extends HibernateDaoSupport {
 4    public void save(User user) throws Exception
 5    {
 6        try
 7        {
 8            getHibernateTemplate().save(user);
 9        }

10        catch(Exception err)
11        {
12            throw err;
13        }

14    }

15
16    public User getUser(String userName) {
17        return (User)getHibernateTemplate().find("from User as u where u.name = ?", userName).get(0);
18    }

19}
(必須繼承於HibernateDaoSupport ,否則無法獲取Hibernate上下文)
代碼很容易明白,不多說了,然後在applicationContext.xml增加如下配置節
1<bean id="userDao" class="UserDao">
2        <property name="sessionFactory">
3            <ref bean="sessionFactory"></ref>
4        </property>
5    </bean>
這裏之所以要設置sessionFactory屬性,是因爲這個dao類繼承了HibernateDaoSupport ,dao類正式通過這獲得Hibernate支持的。
然後就要修改HelloWorld.java,給它添加一個UserDao私有字段和set方法,刪掉原來的user字段。
 1public class HelloWorld extends ActionSupport {
 2
 3    private UserDao userDao;
 4    public void setUserDao(UserDao userDao) {
 5        this.userDao = userDao;
 6    }

 7
 8    @Override
 9    public String execute() throws Exception {
10        User user = userDao.getUser("ruby");
11        this.message = user.getName();
12        return SUCCESS;
13    }

14}
發佈了106 篇原創文章 · 獲贊 4 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章