javascript
Struts+Spring+Hibernate整合入门详解
標簽:?strutshibernatespringbeanactionimport
2007-08-12 16:05?36280人閱讀?評論(13)?收藏?舉報 分類: STRUTS&SPRING&HIBERNATE(12)?Java?5.0?
Struts?2.0.9
spring?2.0.6
hibernate?3.2.4
?????????????????????????????????????????????作者:??Liu Liu 轉載請注明出處
基本概念和典型實用例子。
一、基本概念
??????Struts:作為基于?MVC?模式的?Web?應用最經典框架,兩個項目Struts?和webwork已經集成,成為現在的Struts2。目前的最新版本是2.0.9(2007-7)。
??????Spring:?是一個輕型的容器,利用它可以使用一個外部?XML?配置文件方便地將對象連接在一起。每個對象都可以通過顯示一個?JavaBean?屬性收到一個到依賴對象的引用,留給您的簡單任務就只是在一個?XML?配置文件中把它們連接好。
??????Hibernate?是一個純?Java?的對象關系映射和持久性框架,它允許您用?XML?配置文件把普通Java?對象映射到關系數據庫表。使用?Hibernate?能夠節約大量項目開發時間,因為整個?JDBC?層都由這個框架管理。這意味著您的應用程序的數據訪問層位于?Hibernate?之上,完全是從底層數據模型中抽象出來的。
??????三種技術到目前已經比較成熟,而且他們都是免費的!讓我們對三者集成進行一個初覽(簡單而不專業):
??????我們用Struts實現從Web(網頁,MVC中的View)到后臺系統的映射(WebàAction),然后由Spring管理這些Action,把它們作為Bean和其他對象一起處理。這些Bean之間處理業務邏輯、數據、系統狀態等,且它們被Spring統一管理,為了區分,就算大概包括MVC的MC部分吧。然后需要持久化的數據由Spring和Hibernate之間的接口交由Hibernate處理(這個屬于持久層)。
??????必須基礎:只要Java基礎,一點HTML知識、XML基礎就可以了。本文的目的就是從零開始建立第一個Struts+Spring+Hibernate應用。即使它是最簡單的,我們也希望初學者能夠從中理解一些思想,其中也包括系統架構的設計思想。
?
二、環境搭建
??????我們堅持免費才是硬道理,開源才是好事情,所以我們全部使用開源免費的工具和軟件。如果使用MyEclipse,其中的工具將有助于簡化下面演示的工程開發,但本文不用。
??????所需軟件包如下表:
| 序號 | 包 | 下載地址和文件(包)名 | 說明 | |
| 1 | JDK5.0 | http://java.sun.com/javase/downloads/index.jsp | JDK5.0 | |
| 2 | Eclipse WTP | Eclipse?IDE for Java?EE?Developers 下載All in One,這樣不用自己下載其他插件 | 包含網站開發的Eclipse,v3.3,下載All in One | |
| 3 | HibernateSynchronizer-3.1.9 | https://sourceforge.net/project/showfiles.php?group_id=99370 | 幫助開發Hibernate應用的Eclipse插件 | |
| 4 | Hibernate3 | http://sourceforge.net/project/showfiles.php?group_id=40712?à?hibernate3所指示的包 | Hibernate支持包 | |
| 5 | Spring | http://sourceforge.net/project/showfiles.php?group_id=73357 ? | spring-framework-2.0.6-with-dependencies.zip | |
| 6 | SpringIDE(可選) | http://springide.org/updatesite/?包名如 | ||
| 7 | Struts | http://struts.apache.org/download.cgi ? | 為了較全的例子和文檔,建議下載 | |
| 8 | Tomcat | http://tomcat.apache.org? | 建議下載v5.5以上版本,應用服務器(支持JSP等)Apache項目之一 | |
| 9 | MySQL | ? | Hibernate演示需要 | |
| ? | ? | ? | ? | ? |
?
??????1、下載了eclipse以后安裝。在所安裝的目錄下有兩個子目錄plugins和features,這是兩個放eclipse插件的目錄,即可以通過拷貝需要的文件到這些目錄里面,從而給eclipse添加新的功能。
??????2、將第3、6的包解壓,將其中的plugins目錄直接復制到eclipse安裝目錄下,選擇“全部”替換。
?
?
??????3、運行eclipse,選擇一個空目錄作為工作區(WorkSpace),啟動以后可以看到Welcome.html的歡迎界面。現在建立新工程FileàNewàProject,在打開的New Project窗口中選擇WebàDynamic Web Project。輸入Project name,在Target Runtime一項選擇新建(New),選擇你所安裝的Apache Tomcat,在彈出窗口輸入相關信息(Tomcat安裝目錄等)。
?
??????新建工程流程如下圖。
?
工程結構如下:
?
其中我們要寫的Java代碼在Java Resource: src(以后直接稱src)下,網站根目錄內容在WebContent下,類所在根目錄是WEB-INF/classes,Eclipse會自動將build/classes里面已經編譯的類同步過去。
?
向WEB-INF下的lib目錄添加如下所列的jar包。?
(1)這些包在下載解壓后Spring,Struts,Hibernate的lib目錄或者dist/module目錄下面(如果不在,可以到網上google一把。列表中mysql-*.jar包是MySQL數據庫的JDBC Driver)。也可以把所有lib和dist下的jar包拷貝過來(可以在系統復制這些jar包,然后到Eclipse里面選中WEB-INF里面的lib包,然后粘帖就可以了)。但要注意全拷貝可能會存在沖突,如struts*plugin.jar等包不能引入,否則不能運行。
(2)這些Jar包是:
antlr-2.7.2.jar
cglib-nodep-2.1_3.jar
commons-beanutils-1.6.jar
commons-chain-1.1.jar
commons-collections-2.1.1.jar
commons-dbcp.jar
commons-digester.jar
commons-logging-1.0.4.jar
commons-logging-api-1.1.jar
commons-pool.jar
commons-validator-1.3.0.jar
dom4j-1.6.1.jar
el-api.jar
el-ri.jar
freemarker-2.3.8.jar
hibernate3.jar
jsf-api.jar
jta.jar
mysql-connector-java-3.0.14-production-bin.jar
ognl-2.6.11.jar
oro-2.0.8.jar
spring-hibernate3.jar
spring.jar
struts-config.xml
struts-core-1.3.5.jar
struts2-codebehind-plugin-2.0.9.jar
struts2-config-browser-plugin-2.0.9.jar
struts2-core-2.0.9.jar
struts2-jasperreports-plugin-2.0.9.jar
struts2-jfreechart-plugin-2.0.9.jar
struts2-jsf-plugin-2.0.9.jar
struts2-pell-multipart-plugin-2.0.9.jar
struts2-plexus-plugin-2.0.9.jar
struts2-sitegraph-plugin-2.0.9.jar
struts2-sitemesh-plugin-2.0.9.jar
struts2-spring-plugin-2.0.9.jar
struts2-struts1-plugin-2.0.9.jar
struts2-tiles-plugin-2.0.9.jar
tiles-api-2.0.4.jar
tiles-core-2.0.4.jar
tiles-jsp-2.0.4.jar
xwork-2.0.4.jar
三、開始工作
在WebContent下建立index.jsp,建立方式如圖。
?
?
index.jsp的內容如表,我們暫時不分析。
| <%@?page?contentType="text/html; charset=UTF-8"?%> <html> ??<head>?<title>Example by Doer Liu@UTStarcom sz </title></head> ??<body> ????This is my JSP page.?<br> ????<form?name="userInfoForm"?action="login.do"?method="post"> ????用戶名:? ????<input?name="username"?type="text"?/> ????密碼: ????<input?name="password"?type="password"> ????<input?name="sub"?type="submit"?value="增加"?/> ????<input?name="res"?type="reset"?value="重置"?/> ??</form> ??</body> </html> |
?
此時就可以運行該工程,忙了這么久,看看效果吧。
運行方式:右鍵點擊index.jsp,選擇Run/Debug AsàRun on Server,在彈出窗口中默認我們使用的Tomcat Server,點擊finish完成。可以看到eclipse中內嵌的瀏覽器顯示我們的網頁。其中表單的輸入在我們的工程中將得到輸入數據(用戶名和密碼),這些數據會傳給我們將要建立的Action處理。
?
?
現在來看看如何建立我們的Action。在src下新建一個package(包)名為action用于保存響應Web請求的Action類。在action包下新建Action類LoginAction(action.LoginAction)如下,注意類的繼承關系。
| package?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.validator.DynaValidatorForm; import?org.springframework.web.struts.ActionSupport; ? //我們繼承spring提供的Action衍生類org.springframework.web.struts.ActionSupport public?class?LoginAction?extends?ActionSupport{ ? ????public?ActionForward?execute( ?????????????ActionMapping mapping, ?????????????ActionForm form, ?????????????HttpServletRequest request, ?????????????HttpServletResponse response) { ???????return?mapping.findForward("success"); ??????? ????} } |
?
但是現在index.jsp的內容怎么和LoginAction的數據匹配呢,我們看到LoginAction的execute方法有一個屬性ActionForm,于是我們建立一個類forms.UserInfoForm如下,繼承ActionForm。
| package?forms; import?org.apache.struts.action.ActionForm; public?class?UserInfoForm?extends?ActionForm { ????private?String username; ????private?String password; ???? ????public?String getUsername() {?return?username; } ????public?void?setUsername(String username)? ????{?this.username = username; } ? ????public?String getPassword() {?return?password; } ????public?void?setPassword(String password)? ????{?this.password = password; } } ? |
?
有了兩個頭,又有了保持內容的類,現在看看我們如何用struts把他們聯系起來吧。
現在需要在WEB-INF下建立文件struts-config.xml。其中form-beans定義了表單是如何映射的,這里用我們剛剛定義的forms.UserInfoForm。
| <?xml?version=”1.0”?encoding="ISO-8859-1"?> <!DOCTYPE?struts-config?PUBLIC???"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"??????????"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> ? <struts-config> ????<form-beans> ???????<form-bean?name="userInfoForm"?type="forms.UserInfoForm"/> ????</form-beans> ???? ????<action-mappings> ???????<action?attribute="userInfoForm"?path="/login"?input="/index.jsp"?type="org.springframework.web.struts.DelegatingActionProxy" ??????????????name="userInfoForm"?scope="session"?validate="false"> ???????????<forward?name="success"?path="/success.html"/> ???????</action> ????</action-mappings> </struts-config> |
?
在<action-mappings>中定義了我們的Action。它的屬性attribute指出Action的內容輸入是我們自定義的ActionForm,path給Action賦予一個路徑,input指明只接受index.jsp的輸入,<forward標簽定義了當Action返回"success"的時候,將定向到/success.html這個網頁。?最重要的是type,它定義了這個處理這個請求的Action類,本來應該是我們自定義的LoginAction,但我們卻用了spring的一個Action,為什么?因為我們要用Spring管理我們自定義的Action。看,struts和Spring在這里就開始連接起來了。
?
但還有兩個問題,Struts和Spring又是如何知道對方的存在,如何溝通呢?Spring如何知道把控制權交給我們自定義的LoginAction呢?
我們先來解決第一個問題,web.xml是Tomcat這些應用服務器管理的,因此我們在這里將struts和Spring配置聯系起來。這是整個web.xml。請看注釋。
| <?xml?version="1.0"?encoding="UTF-8"?> <web-app?version="2.5"?id="WebApp" ????xmlns="http://java.sun.com/xml/ns/javaee"? ????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"? ????xsi:schemaLocation="http://java.sun.com/xml/ns/javaee? ????http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> ? <display-name>?Struts2+Spring2+Hibernate3 simple example by Doer Liu@UTstarcom</display-name> ?<!-- filter就理解為一些對網頁請求的過濾吧?--> ?<!-- encodingFilter是為了處理國際化,交由Spring處理,設置為UTF-8 --> ?<filter> ?<filter-name>encodingFilter</filter-name> ?<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> ?<init-param> ?<param-name>encoding</param-name> ?<param-value>UTF-8</param-value> ?</init-param> ?</filter> ?<!-- struts?是struts的filter,這個定義就將可以將請求交給struts過濾一番了?--> ?<filter> ?<filter-name>struts</filter-name>?<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> ?</filter> ? <!--?那么哪些請求交給struts過濾呢,這里包括?/struts2spring2hib3bydoer下和根目錄/下的所有請求--> ?<filter-mapping> ?<filter-name>struts</filter-name> ?<url-pattern>/struts2spring2hib3bydoer/*</url-pattern> ?<url-pattern>/*</url-pattern> ?</filter-mapping> ? ?<!--?定義一個監聽器,處理整個WebContext,簡單的理解為整個網站的上下文環境監聽器吧這個屬于Spring--> ?<listener> ??<listener-class> ???org.springframework.web.context.ContextLoaderListener ??</listener-class> ?</listener> ? <!-- servlet定義一個servlet為struts的ActionServlet --> ????<servlet> ???????<servlet-name>doertest</servlet-name> ???????<servlet-class>org.apache.struts.action.ActionServlet</servlet-class> ???????<load-on-startup>1</load-on-startup> ????</servlet> ? <!-- servlet-mapping將servlet和請求對應起來,這里是所有*.do的請求交由上面定義的doertest處理?--> ????<servlet-mapping> ???????<servlet-name>doertest</servlet-name> ???????<url-pattern>*.do</url-pattern> ????</servlet-mapping> ? <!--?定義默認返回頁,如輸入http://127.0.0.1/那么根目錄下的index.html或者其他文件就被請求?--> ????<welcome-file-list> ????????<welcome-file>index.html</welcome-file> ???????<welcome-file>index.htm</welcome-file> ???????<welcome-file>index.jsp</welcome-file> ???????<welcome-file>default.html</welcome-file> ???????<welcome-file>default.htm</welcome-file> ???????<welcome-file>default.jsp</welcome-file> ????</welcome-file-list> </web-app> ? |
?
通過web.xml兩者聯系上了。現在它們各自還需要一些配置。
Struts在我們的例子里比較簡單,在build/class下面(最終會被eclipse同步到網站的WEB-INF/classes下面)建立struts.xml:
| <!DOCTYPE?struts?PUBLIC ????????"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" ????????"http://struts.apache.org/dtds/struts-2.0.dtd"> ? <struts> ????<include?file="struts-default.xml"?/> </struts> |
Spring的默認配置文件是WEB-INF/applicationContext.xml,目前其內容很簡單,我們只是把struts的Bean放進來,如下:
映射的規則:bean的name屬性必須等于struts-config.xml里面定義的action的path屬性,class就是這個bean的類action.LoginAction。
| <?xml?version="1.0"?encoding="UTF-8"?>?? <!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">?? ? <beans> ??<!-- Action Bean ,?對應的部分?struts-config.xml form-bean and action-mappings --> ??<bean?name="/login"?class="action.LoginAction?"?singleton="false"> ??? ??</property> ??</bean> ? </beans> |
?
現在在WebContent下面建立success時重定向的目標success.html,方法和index.jsp類似,但選擇THML類型,隨便輸入內容以便測試。這時候struts和Spring就簡單的連接起來了。先停掉剛才運行起來的Tomcat,重新啟動,運行index.jsp,點擊網頁中的按鈕<添加>,看看有什么效果。
現在,然我們簡略描述一下數據和請求的流程。
點擊<添加>,index.jsp的這個表單發送的請求是login.do(<form name="userInfoForm" action="login.do" method="post">),請求被傳給后臺,生成了doertest(處理*.do的請求)集合的一個servlet,然后傳到path為/login的action,被Spring的org.springframework.web.struts.DelegatingActionProxy處理,該類找到name是/login的Bean,轉交處理權,等待結果。這個Bean就是我們的action.LoginAction。我們的execute中返回一個forward是"success"對應的網頁,就是success.html。所以……,你已經看到了,struts和spring已經聯系起來了。OK!
?
下面我們需要把hibernate整合進來了,本來考慮到例子的簡單性,打算用更簡單的類,但既然用三者整合,就是要有良好的設計。我們需要以下幾個層次的設計:表現層,業務層,持久層。表現層就是網頁;表現層和業務層之間的接口就是網頁和action的接口,由struts處理了;業務層包括業務邏輯和事務管理等,由Spring管理,我們只是建立具體處理對象;業務層和持久層之間由數據訪問對象DAO處理,持久層交給hibernate處理。貫穿這些層的是領域對象(domain object),即表示現實世界的對象(base object),如訂單對象,人物信息對象等等。現在看看我們需要的剩余設計結構。
業務層:放進包service
數據訪問對象:?放進包dao
持久層:hibernate
領域對象:放進包bo
既然領域對象是最基本的對象,我們就得首先建立,本例中,可以借助HibernateSynchronizer生成:
首先在mysql中創建表
CREATE TABLE `userinfo` (?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????`id` int(11) primary key auto_increment,???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????`username` varchar(20) default NULL,?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????`Password` varchar(20) default NULL???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????)
?
在Eclipse中,建立hibernate的map文件:右鍵點擊WEB-INF(或其他目錄都可,后面會提到如何使用該文件),選擇newàother,在彈出窗口中選擇Hibernate Mapping File。在彈出窗口輸入url,用戶名和密碼后點擊Refresh,可以看到你選擇的數據庫的表,選中userinfo表。輸入包bo,用來保存從數據庫提取的領域對象。在Properties中將Id generator改為native。
?
?
HibernateSynchronizer將在WEB-INF下生成Uerinfo.hbm.xml文件。
?
右鍵點擊該文件,選擇Hibernate SynchronizeràSynchronize Files。將自動生成bo.base.BaseUserinfo和bo.Userinfo類。這兩個就是領域對象。工具正好啊!
?
?
現在bo包里面的對象自動生成了。
下面建立dao包中對象dao.UserinfoDAO:
| package?dao; import?org.springframework.orm.hibernate3.support.HibernateDaoSupport; import?bo.Userinfo; //從HibernateDaoSupport繼承,從而可以使用getHibernateTemplate().save保存數據。 public?class?UserinfoDAO?extends?HibernateDaoSupport { ? ????public?void?save(Userinfo userinfo) { ???????System.out.println("saved!"); ???????getHibernateTemplate().save(userinfo); ????} ? } ? |
再建立service包中的業務對象,service.UserinfoService:
| package?service; import?dao.UserinfoDAO; import?bo.Userinfo; package?service; public?class?LoginService { ????private?UserinfoDAO?userinfoDAO; ? ????public?UserinfoDAO getUserinfoDAO() { ???????System.out.println("shit"); ???????return?userinfoDAO; ????} ? ????public?void?setUserinfoDAO(UserinfoDAO userinfoDAO) { ???????System.out.println("LoginService:setAdminDAO"); ???????this.userinfoDAO?= userinfoDAO; ????} ? ????public?void?saveinfo(Userinfo userinfo) { ?????????//進行相關業務處理,比如validate之類的。 ???????userinfoDAO.save(userinfo); ????} } |
?
好了,所有我們應該建立的對象都生成了,現在把hibernate整合進來再進行一些后續處理。
首先,在applicationContext.xml文件中加入必需的Bean定義,成為如下內容,注意其中注釋。
| <?xml?version="1.0"?encoding="UTF-8"?>?? <!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">?? ? <beans> ??<!-- Action Bean ,?對應的部分?struts-config.xml form-bean and action-mappings --> ??<bean?name="/login"?class="action.LoginAction"?singleton="false"> ??<!-- property是該bean的屬性,如下面的property,在類LoginAction?中必有字段定義LoginService loginService;和getLoginService()以及setLoginService方法--> ??<property?name="loginService"> ????<ref?bean="loginService"?/> ??</property> ?? ??</bean> ? ?<!--?定義DBCP的數據庫連接屬性,該數據源會被hibernate使用,DBCP是連接池開源包,其中的url,username,password需要替換成你的數據庫訪問屬性?--> ?<bean?id="dataSource"?class="org.apache.commons.dbcp.BasicDataSource"?destroy-method="close"> ??<property?name="driverClassName"> ???<value>com.mysql.jdbc.Driver</value> ??</property> ??<property?name="url"> ???<value>jdbc:mysql://localhost/mysql</value> ??</property> ??<property?name="username"> ???<value>root</value> ??</property> ??<property?name="password"> ???<value>doerliu</value> ??</property> ?</bean> ? ?<!--?配置sessionFactory,?為Hibernate配置屬性??--> ?<bean?id="sessionFactory"?class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> ??<property?name="dataSource"> ???<ref?local="dataSource"?/> ??</property> ??<property?name="mappingResources"> ???<list> ????<!—Hibernate的map?文件在這里配置了,注意文件的相對位置。?--> ????<value>../Userinfo.hbm.xml</value> ???</list> ??</property> ??<property?name="hibernateProperties"> ???<props> ????<prop?key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> ????<prop?key="hibernate.show_sql">true</prop> ???</props> ??</property> ?</bean> ? ?<!--?業務層的事務管理由該bean管理--> ?<bean?id="transactionManager"?class="org.springframework.orm.hibernate3.HibernateTransactionManager"> ??<property?name="sessionFactory"> ???<ref?local="sessionFactory"?/> ??</property> ?</bean> ? ?<!--?事務處理環境(代理)配置,為業務處理LoginService定義一個事務處理*****--> ?<bean?id="userDAOProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> ??<property?name="transactionManager"> ???<ref?bean="transactionManager"?/> ??</property> ??<property?name="target"> ???<ref?local="loginService"?/> ??</property> ??<property?name="transactionAttributes"> ???<props> ????<prop?key="save*">PROPAGATION_REQUIRED</prop> ????<prop?key="get*">PROPAGATION_REQUIRED,readOnly</prop> ????<prop?key="is*">PROPAGATION_REQUIRED,readOnly</prop> ???</props> ??</property> ?</bean> ? ?<!--?業務處理Bean定義?--> ?<bean?id="loginService"?class="service.LoginService"> ??<property?name="userinfoDAO"> ???<ref?bean="userinfoDAO"?/> ??</property> ?</bean> ? ?<!--?數據訪問對象的Bean --> ?<bean?id="userinfoDAO"?class="dao.UserinfoDAO"> ??<property?name="sessionFactory"><ref?local="sessionFactory"/></property> ?</bean> ? </beans> |
?
最后,LoginAction可以處理請求并和業務層進行交流了。因此需要增加實質性內容:
| package action; ? /* @sample for training. ?* @author doer.liu@utstarcom ?* @date?2007-7-30 ?*/ 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.springframework.web.struts.ActionSupport; ? import bo.Userinfo; ? import forms.UserInfoForm; ? import service.LoginService; ? //我們繼承spring提供的Action衍生類org.springframework.web.struts.ActionSupport public class LoginAction extends ActionSupport { ? ??????LoginService loginService; ? ??????public ActionForward execute(ActionMapping mapping, ActionForm form, ?????????????????HttpServletRequest request, HttpServletResponse response) { ???????????UserInfoForm userInfoForm = (UserInfoForm) form; ???????????String username = userInfoForm.getUsername(); ???????????String password = userInfoForm.getPassword(); ???????????Userinfo userinfo = new Userinfo(); ???????????userinfo.setUsername(username); ???????????userinfo.setPassword(password); ???????????loginService.saveinfo(userinfo);//?保存前臺的數據,插入數據庫 ? ???????????return mapping.findForward("success"); //返回頁。 ? ??????} ? ??????public LoginService getLoginService() { ???????????return loginService; ??????} ? ??????public void setLoginService(LoginService loginService) { ???????????System.out.println("setLoginService=" + loginService); ???????????this.loginService = loginService; ??????} } |
?
Ok!整個流程到此就走通了。運行看看吧。還有什么說的呢,動手開始吧,在此基礎上不斷修改測試,再參考相關文檔,一切都將越來越簡單!——有問題,看日志!
??? 附件是導出的WAR文件,其中lib已被清空,只要加入文中列出的lib文件即可運行(可以將WAR導入eclipse,或者將war文件放到Tomcat的webaspps下)http://dl2.csdn.net/down4/20070806/06111224839.war
?
??????當然這個例子為了清晰起見,在各種模式,java編程習慣上是不合適的,比如應該面向接口編程,而不是統統拿類,拿對象來處理。應該定義如ILoginService, ILoginDAO等接口,使得系統更靈活,更易移植。當然為了說明,我們這樣做是可以原諒的,但工作中切記不要只圖簡單!否則還不如不用這種高級優秀的構架,因為你一用就把它破壞殆盡了。
??????讓我們前進吧
??????Day day up!
?? 頂- 上一篇網絡規劃中的IP地址分配
- 下一篇Spring+Mysql+Jbpm整合(轉)
我的同類文章
STRUTS&SPRING&HIBERNATE(12)- ?struts 2學習(有關Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory的錯誤)?2008-02-01閱讀2723
- ?spring+hibernate+jbpm整合成功2007-07-30閱讀677
- ?使用eclipse開發struts+spring+hibernate免費插件套裝?2007-07-24閱讀1344
- ?Struts+Spring+Hibernate練習(完整)-轉貼?2007-07-24閱讀935
- ?Hibernate和Spring對DAO處理的實例?2007-07-24閱讀578
- ?Eclipse開發: Struts 2 + Spring 2 + JPA + AJAX?2007-07-30閱讀1123
- ?struts2.0 配置篇?2007-07-25閱讀1308
- ?Spring IoC容器-編碼方式比較?2007-07-24閱讀607
- ?Struts+Spring+Hibernate之搭建Eclipse + MyEclipse 開發環境?2007-07-24閱讀2460
- ?玩玩Spring之IOC?2007-07-24閱讀366
參考知識庫
MySQL知識庫
8381關注|1396收錄
大型網站架構知識庫
1098關注|532收錄
Java EE知識庫
1120關注|581收錄
Java SE知識庫
9391關注|454收錄
Java Web知識庫
9681關注|1017收錄
轉載于:https://www.cnblogs.com/iOS-mt/p/5959662.html
總結
以上是生活随笔為你收集整理的Struts+Spring+Hibernate整合入门详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ios 缺少合规证明
- 下一篇: 理解RESTful架构【转】