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表單頁面進行驗證,成功插入。
(記得輸入表單數據時得重新啓動服務器哈,因爲修改了配置文件的)