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,內容如下
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>
接下來是最關鍵的配置--Spring配置文件applicationContext.xml,以下內容都在<Beans>配置節裏添加:
1。首先添加數據源Bean
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>
2。讓Spring管理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>
在源包新建類User,裏面只有一個字段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寫入的)
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}
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(修改自動生成的配置文件如下)
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>
修改HelloWorld.jsp的內容如下
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>
首先在源包增加一個Hibernate映射文件user.hbm.xml(可用Netbeans的嚮導輔助)
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>
在Spring配置文件找到剛纔的管理Hibernate的配置節,如下方法把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
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}
代碼很容易明白,不多說了,然後在applicationContext.xml增加如下配置節
2 <property name="sessionFactory">
3 <ref bean="sessionFactory"></ref>
4 </property>
5 </bean>
然後就要修改HelloWorld.java,給它添加一個UserDao私有字段和set方法,刪掉原來的user字段。
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}