Spring 聯合Hibernate ,Struts開發之基本配置

Myeclipse中添加插件順序爲:
Spring -》Hibernate-》Struts。順序一定不能變哦。

本次主要介紹哈如何把Spring ,Hibernate ,Struts三者加在一起使用。

下面就先寫個簡單的Spring+Hibernate示例:
當然請先新建一個項目,然後添加相應包,這些步驟就不贅述了哈
(新手注意要先加Spring,再加Hibernate哦,如果還有Struts,當然她是最後在加的)。

開始之前先告訴大家一點點和以前不同之處就是:
    在spring框架中當編寫需要操作數據庫的類時,只需要繼承HibernateDaoSupport父類就可以
    進行增刪改查了。而不再需要編寫DAO了。
例如:
先寫一個vo類:
package com.ssh;

public class Person {
 private int id ;
 private String name ;
 private String password ;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
}
然後就是寫實現類,記住不再需要DAO類了餓,直接繼承HibernateDaoSuppor就可:
package com.ssh;

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

public class PersonDAOImpl extends HibernateDaoSupport {
 public void insert(Person person)
 {
  this.getSession().save(person);
  this.getSession().beginTransaction().commit();
  this.getSession().close();
 }
}


接下來就是配置了:

大家肯定都注意到了,上面的實現類和以往不同的地方就是繼承了一個HibernateDaoSuppor類,
這是肯定的。我們繼續,因爲繼承了這個類,而要使得這個類發揮作用,在Spring中呢就還必須
得依靠HibernateTemplate的支持,所以呢,這裏我們首先就的配置這個HibernateTemplate模板。
說白了其實就是通過配置使得實現類可以使用sessionFactory,以便對數據庫進行操作。具體配置
如下:
 <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
  <property name="sessionFactory" ref="sessionFactory"></property>
 </bean>
 <bean id="persondaoImpl" class="com.ssh.PersonDAOImpl">
  <property name="hibernateTemplate" ref="hibernateTemplate">
  </property>
 </bean>
剩下的就是創建Person.hbm.xml的Hibernate映射文件了,這一步也不用說了吧,前頭搞忘了說建立數據庫表person了
看到這裏你該不會不知道我的person表結構吧??(參看前面的vo類:Person )。

最後寫個測試類測試一下:
package com.ssh;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
 public static void main(String[] args) {
  ApplicationContext ctx = null;
  ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  
  PersonDAOImpl pdi = (PersonDAOImpl)ctx.getBean("persondaoImpl");
  Person per = new Person();
  
  per.setName("陳霞");
  per.setPassword("1588");
  pdi.insert(per);
 }
}
運行一下能成功插入的哦。這樣一個完整的簡單的操作就完成了哈。
如果你想向在Hibernate中那樣顯示sql語句,只需在Spring配置文件中加入如下內容:
 <prop key="hibernate.dialect">
  org.hibernate.dialect.MySQLDialect
 </prop>
 <prop key="hibernate.show_sql">true</prop>
看懂了在哪加了不???沒動就再比對比對哈。

也許細心的讀者注意到了 ,Struts呢 怎麼不見Struts啊 哈哈  是的哈 沒有忘記,下面就繼續往項目中添加Struts支持,
但是此步驟跟直接添加Struts支持沒啥特別的地方,所以你就直接加吧,我也懶的說了哦。
添加完Struts支持之後呢,
接下來還是繼續配置哈,不過就比前邊複雜的多了哦 細心點哈。

第一步,配置Spring支持;
打開項目中的web.xml文件添加Spring支持:
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
 <servlet>
 <servlet-name>context</servlet-name>
 <servlet-class>
  org.springframework.web.context.ContextLoaderServlet
 </servlet-class>
 <load-on-startup>1</load-on-startup>
</servlet>
上面配了個監聽器,主要是用於監聽程序出錯,因爲Spring是比較容易出錯的,但是並不是出錯到不好用那中哈。不要誤會。
Struts聯合Spring配置只有一種方式,但是實現有兩種方式:
先是寫好action:

package com.sshDemo.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.ssh.Person;
import com.ssh.PersonDAOImpl;
import com.sshDemo.struts.form.PersonForm;

public class PersonAction extends DispatchAction {

 private PersonDAOImpl persondaoImpl;
 //persondaoImpl需要Spring注入到Struts中去。即是修改Struts配置文件。詳情請看後邊。

 public ActionForward insert(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  PersonForm personForm = (PersonForm) form;// TODO Auto-generated method stub
  Person per = new Person();
  per.setName(personForm.getName());
  per.setPassword(personForm.getPassword());
  persondaoImpl.insert(per);
  return null;
 }
 public PersonDAOImpl getPersondaoImpl() {
  return persondaoImpl;
 }
 public void setPersondaoImpl(PersonDAOImpl persondaoImpl) {
  this.persondaoImpl = persondaoImpl;
 }
}
如何把persondaoImpl通過Spring注入到Struts中去呢?
首先添加一個Struts-Plugin插件:
新建》myeclipse》web-Struts》Struts1.2 Plugin
Plugin class 選擇爲:org.springframework.web.struts.ContextLoaderPlugIn。
set properties設置爲:
 Property:contextConfigLocation
 value:    /WEB-INF/classes/applicationContext.xml
添加完這個插件之後點完成。
好,現在講:
第一種實現方式:
把<action
      attribute="personForm"
      input="/form/person.jsp"
      name="personForm"
      parameter="status"
      path="/person"
      scope="request"
      type="com.sshDemo.struts.action.PersonAction" />
替換成Spring中專門解決Struts集成代理問題,
<action
      attribute="personForm"
      input="/form/person.jsp"
      name="personForm"
      parameter="status"
      path="/person"
      scope="request"
      type="org.springframework.web.struts.DelegatingActionProxy" />
還沒完,接着修改Spring的配置文件,在其中添加如下內容:
 <bean name="/person" class="org.lxh.struts.action.PersonAction">
  <property name="persondao">
   <ref bean="persondao"/>
  </property>
 </bean>
現在主要工作基本做完了。
現在建立一個帶Struts標籤的jsp頁面,然後建立如下表單:
<html:form action="person.do" method="post">
      name:<html:text property="name"></html:text>
      password:<html:text property="password"></html:text>
      <input type="hidden" name="status" value="insert"/>
      <p><br></p>
      <html:submit value="提交"></html:submit>
     </html:form>
最後啓動服務器,寫入表單值,提交,成功插入數據。ok,結束。

上面介紹的這種方式呢有個問題就是需要修改action中的type值,有沒有一種方法不去修改該type值,而同樣達
到被Spring管理的目的呢?
答案是可以:通過DelegatingRequestProcessor 》來完成。

實現方式二:
第一步,把type修改爲原來的值:com.sshDemo.struts.action.PersonAction
第二步,在Struts配置文件中添加一個處理器元素:
 <controller
  processorClass="org.springframework.web.struts.DelegatingRequestProcessor">
 </controller>

然後在進入剛纔建立的jsp表單頁面進行驗證,成功插入。
(記得輸入表單數據時得重新啓動服務器哈,因爲修改了配置文件的)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章