2013-03-0710級建設(shè)SSH項(xiàng)目教程X - 復(fù)旦大學(xué)精品課程_第1頁
2013-03-0710級建設(shè)SSH項(xiàng)目教程X - 復(fù)旦大學(xué)精品課程_第2頁
2013-03-0710級建設(shè)SSH項(xiàng)目教程X - 復(fù)旦大學(xué)精品課程_第3頁
2013-03-0710級建設(shè)SSH項(xiàng)目教程X - 復(fù)旦大學(xué)精品課程_第4頁
2013-03-0710級建設(shè)SSH項(xiàng)目教程X - 復(fù)旦大學(xué)精品課程_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、高級WEB技術(shù)課程Struts Hibernate Spring 工程建設(shè)教程工程名稱SSHDEMO-用戶登錄系統(tǒng)版本Version.1 時間2021年3月11日 至2021年3月15日老師戴開宇撰寫人吉亞云聯(lián)系方式Tel :ail: 11212021013 Addr: 復(fù)旦大學(xué)軟件樓109室工程準(zhǔn)備開發(fā)環(huán)境開發(fā)IDE: MyEclipse 8.x 或以上, JDK 1.5 或以上。數(shù)據(jù)庫: MySQL 5.5 或以上 , mysql-connector-java-5.1.23.jar。框架版本:Struts2.0, Hibernate3.X, Sp

2、ring 3.x。Web效勞器: Tomcat 6.0。注意:數(shù)據(jù)庫同學(xué)們不一定要使用MySQL,也可以使用Oracle等其他關(guān)系數(shù)據(jù)庫管理系統(tǒng)軟件,我們會在配置Hibernate的時候講解與其他數(shù)據(jù)庫軟件如何配置。軟件下載地址列表: MyEclipse HYPERLINK :/ /index.php?topic=1452.msg7635;highlight=myeclipse l msg7635 :/ /index.php?topic=1452.msg7635;highlight=myeclipse#msg7635 同學(xué)們可以直接在

3、學(xué)校PT上直接下載。JDK HYPERLINK :/ oracle /technetwork/java/javase/downloads/index.html :/ oracle /technetwork/java/javase/downloads/index.html MySQL HYPERLINK :/ mysql / :/ mysql / 官網(wǎng)下載。MySQL JDBC HYPERLINK :/dev.mysql /downloads/connector/j/ :/dev.mysql /downloads/connector/j/ MySQL官網(wǎng)下載。Struts HYPERLINK :

4、//download.cgi l struts238 ://download.cgi#struts238 Hibernate HYPERLINK :/ / :/ / Spring HYPERLINK :/ / :/ / Tomcat HYPERLINK :// :// 新建工程這個SSH例如工程是一個簡單的用戶登錄系統(tǒng)。首先,我們翻開MyEcli

5、pse新建一個Web工程,工程名稱為SSHDemo。操作:MyEclipse 菜單 - File- New -Web Project。J2EE版本:根據(jù)自己機(jī)器上安裝的實(shí)際版本而定。我們將SSHDemo發(fā)布到Tomcat中,在Myeclipse中啟動Tomcat,然后在瀏覽其中輸入工程地址預(yù)覽它的index.jsp。工程地址: HYPERLINK :/localhost:8080/SSHDemo/index.jsp :/localhost:8080/SSHDemo/index.jsp 。這樣我們就新建好了一個空的Web工程。創(chuàng)立數(shù)據(jù)庫安裝MySQL5.0以上的版本,會自帶MySQL的圖形界面操

6、作軟件 MySQL Workbench。我們新建一個數(shù)據(jù)庫ssh。 并創(chuàng)立一個用戶數(shù)據(jù)庫表。 CREATE DATABASE /*!32312 IF NOT EXISTS*/ssh /*!40100 DEFAULT CHARACTER SET utf8 */;USE ssh;/*Table structure for table user */DROP TABLE IF EXISTS user;CREATE TABLE user ( user_id int(11) NOT NULL AUTO_INCREMENT COMMENT 用戶ID, user_name varchar(20) NOT N

7、ULL DEFAULT New User COMMENT 用戶名稱, user_password varchar(20) NOT NULL COMMENT 用戶密碼, user_address varchar(100) DEFAULT NULL COMMENT 用戶地址, user_mail varchar(100) DEFAULT NULL COMMENT 用戶郵箱, user_telephone varchar(20) DEFAULT NULL COMMENT 用戶 , PRIMARY KEY (user_id), UNIQUE KEY name_unique (user_name) EN

8、GINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO ssh.user (user_id, user_name, user_password, user_address, user_mail, user_telephone) VALUES (NULL, alice, 123456, fudan university, alicegmail ,;INSERT INTO ssh.user (user_id, user_name, user_password, user_address, user_mail, user_telephon

9、e) VALUES (NULL, john, 123456, fudan university, johngmail ,;Struts使用2.1 添加struts框架基于大家已經(jīng)學(xué)過,根底WEB開發(fā)。接下來,我們將Struts框架到工程中。操作:工程名SSHDemo,右鍵菜單- MyEclipse- Add Struts Capabilities這里Struts版本:選擇Struts 1.2。 關(guān)于Struts版本的區(qū)別會在第七章講到。在Base package for new classes 中用自定義的名稱 (fdu)取代原來的yourcompany。然后我們在s

10、truts目錄下,添加action、form、service、bean、dao等分層目錄。2.2 Struts根本開發(fā)2.2.1 創(chuàng)立登錄頁面首先,我們在WebRoot目錄下創(chuàng)立一個用戶登錄頁面login.jsp。該頁面只有一個簡單的用戶登錄表格。Welcome to Alice Bank! UserName: Password: 頁面顯示效果為:同時我們編寫一個簡單的登錄成功頁面login_succeed.jsp和登錄失敗頁面login_failed.jsp。2.2.2 創(chuàng)立User ActionForm接下來,我們在form 目錄下建立一個UserForm.java 文件。UserForm

11、類繼承struts框架的ActionForm類。具體如下:import org.apache.struts.action.ActionForm;public class UserForm extends ActionForm private String username; private String password; /get and set methods 注意: 1) 這里的UserForm的屬性username和password名稱需要和login.jsp中的name保持一致。 2) 需要給這兩個屬性實(shí)現(xiàn)get和set方法。2.2.3創(chuàng)立用戶Action然后,我們在action目錄

12、下建立一個UserAction.java文件。UserAction類繼承struts框架的DispatchAction類。在使用Struts 動作時,每一個Action 都需要編寫一個類,并且要在struts-config.xml 進(jìn)行配置。這對于一個擁有很多Action 的Web 程序來說, 工作量是非常大的。為此, Struts 提供了DispatchAction 類,這個類允許將一個Action 作為一個方法來調(diào)用。在Web 瀏覽器中通過請求參數(shù)來指定要調(diào)用的動作。雖然DispatchAction 類是一個抽象類,但其中卻沒有一個抽象方法。因此,DisplatchAction的子類不用實(shí)

13、現(xiàn)任何DisplatchAction 類中的方法。但如果要處理Action 代碼,就必須根據(jù)相應(yīng)的Action 來編寫Action 方法。一個Action 方法除了方法名和execute 方法不一樣外,其他的都和execute 方法完全一樣。但編寫Action 方法時要注意,Action 方法名必須和用于指定動作的請求參數(shù)值一致大小寫也必須一致。在下面的例子中演示了通過DispatchAction 類實(shí)現(xiàn)方法和Action的對應(yīng)。方法名稱可自定義,但方法的參數(shù)需要和DispatchAction類的execute方法參數(shù)一致。import org.apache.struts.actions.Di

14、spatchAction;public class UserAction extends DispatchAction public ActionForward login(ActionMapping mapping, ActionForm form, ServletRequest request, ServletResponse response) throws Exception UserForm userForm=(UserForm)form; String userName=userForm.getUsername(); String password=userForm.getPass

15、word(); if(!.equals(userName)&!.equals(password) &alice.equals(userName)&123456.equals(password) return mapping.findForward(loginSucceed); else return mapping.findForward(loginFailed); public ActionForward logout(ActionMapping mapping, ActionForm form, ServletRequest request, ServletResponse respons

16、e) throws Exception /TODO . return mapping.findForward(index);這里我們實(shí)現(xiàn)用戶的兩個操作用戶登錄和登出,這里僅作簡單的驗(yàn)證,用戶名和密碼不為空,且默認(rèn)為alice用戶登錄。 2.2.4 配置Struts文件我們翻開struts的配置文件struts-config.xml,該文件在WebRoot-WEB-INF目錄下。然后將我們剛剛寫的UserForm和UserAction配置起來。 標(biāo)簽中的屬性含義描述如下:name:表示ActionForm 的名稱。也就是標(biāo)簽中的name 屬性的值。path:表示Struts 動作,必須以“/開頭

17、。scope:表示ActionForm 類的對象實(shí)例在本例中是UserForm 類的對象實(shí)例保存的范圍。這個屬性值只能取request 和session。默認(rèn)值是session。如果scope 的值為request,表示將UserForm類的對象實(shí)例以UserForm作為鍵值保存到了request 的屬性中。如果scope 的值為session,表示不將UserForm類的對象實(shí)例保存到request 的屬性中。但不管scope 的值是request 還是session。Struts 都會將UserForm類的對象實(shí)例保存到session 的屬性中。type:表示UserAction 類的全名

18、。valid: 表示是否使用Struts的驗(yàn)證框架。input:表示如果客戶端提交的數(shù)據(jù)未通過簡單驗(yàn)證后要跳轉(zhuǎn)到的頁面,也就是在UserForm類的validate 方法中返回的ActionErrors 對象中含有錯誤描述信息。Struts 會自動跳轉(zhuǎn)到input 屬性所指的JSP 頁面。 標(biāo)簽中的子標(biāo)簽 定義了可以在動作類 在本例中就是UserForm類中讀取的forward 頁的URL。2.2.5測試運(yùn)行我們重新發(fā)布這個工程,啟動Tomcat效勞器。在瀏覽器中輸入地址: HYPERLINK :/localhost:8080/SSHDemo/index.jsp :/localhost:808

19、0/SSHDemo/index.jsp 進(jìn)入index.jsp頁面。登錄頁面,輸入alice 和 123456: 提交后成功登錄:2.3 Struts功能應(yīng)用2.3.1 Struts標(biāo)簽Struts框架本身提供Struts標(biāo)簽,共分為以下幾種bean、html、logic、nested和tiles?,F(xiàn)在我們嘗試使用它的bean和html標(biāo)簽,修改登錄頁面。首先將標(biāo)簽庫引入到頁面中:然后使用struts的Html標(biāo)簽代替原來的HTML標(biāo)簽元素。 UserName: UserName: 2.3.2 Struts國際化處理為了方便的使一個頁面多個不同語言的人都能看懂Struts提供了很好的國際化語言

20、處理解決方法。首先,我們刪除了原來Struts添加時產(chǎn)生的ApplicationRperties文件,而是在src目錄下新建了兩個文件,如下列圖所示。然后我們將這兩個文件配置到struts-config.xml中。 這里的parameter是指語言文件所在的目錄。然后我們修改登錄頁面為: : : 這里的用戶名和密碼都換掉成了,使用struts的bean標(biāo)簽的message元素。然后我們分別在ApplicationResourcesCN.properties文件和ApplicationResourcesEN.properties文件中,添加頁面key所對應(yīng)的鍵值對。和這樣

21、,假設(shè)果你的瀏覽器語言是中文的,頁面顯示的就是中文,如果是英文的,那么顯示英文頁面。2.3.3 簡單表格驗(yàn)證表格的驗(yàn)證可以由javascript做,但是那還是比擬煩的如果每個表格都要驗(yàn)證的話。Struts提供了很方便的驗(yàn)證框架。我們來試一下。我們需要驗(yàn)證,用戶的用戶名和密碼不為空。那么我們只需要修改UserForm類即可,重寫ActionForm的validate方法。Overridepublic ActionErrors validate(ActionMapping mapping, ServletRequest request) ActionErrors errors=new Action

22、Errors();if(username=null|.equals(username)errors.add(username,new ActionMessage(user.logininfo.form.no.username);if(password=null|.equals(password)errors.add(username,new ActionMessage(user.logininfo.form.no.password);return errors;然后再登陸頁面添加錯誤顯示標(biāo)簽。 這個標(biāo)簽所在的位置,錯誤信息就會顯示在這個地方。 2.3.4 測試運(yùn)行 我們重新發(fā)布系統(tǒng),重啟Tom

23、cat,重新翻開瀏覽器到登錄頁面。我們以空密碼登錄,然后頁面響應(yīng)為:Hibernate使用3.1 創(chuàng)立MyEclipse數(shù)據(jù)庫驅(qū)動DB Driver操作:MyEclipse菜單- Window-Preferences-MyEclipse-Database Explorer-Drivers點(diǎn)擊DB BrowserView 新建一個MySql數(shù)據(jù)庫的DB Driver.Driver Name:mysql-testConnection URL:jdbc:mysql:/localhost:3306/ssh“Driver JARs添加“mysql-connector-java-5.1.4-bin.jar

24、“Driver classname選擇“com.mysql.jdbc.Driver3.2. 創(chuàng)立數(shù)據(jù)庫連接對象操作:MyEclipse菜單- Window-Open Perspective-MyEclipse Database Explorer在DB Browser中點(diǎn)擊mysql-test, 右擊選擇連接。 用戶名和密碼根據(jù)實(shí)際MySql數(shù)據(jù)庫的設(shè)置填寫。連接后,我們可以看到界面:3.1 添加Hibernate功能框架操作:工程名SSHDemo右鍵菜單- MyEclipse- Add Hibernate CapabilitiesHibernate版本:選擇Hibernate 3.2開發(fā)包li

25、braries選擇MyEclipse Libraries下的全部JAR Library Installation選擇“Copy checked Libraries Jars to “Library Folder項(xiàng)選擇“/WebRoot/WEB-INF/lib這樣的話所需的類庫都將拷貝到工程目錄,方便以后的部署, 點(diǎn)擊Next 在Javapackage下新建一個目錄com.fdu.hibernate,我們將HibernateSessionFactory文件放置在這里。3.2 配置Hibernate數(shù)據(jù)庫連接翻開Hibernate.cfg.xml文件,內(nèi)容: root123456com.mysql

26、.jdbc.Driverjdbc:mysql:/localhost:3306/ssh?useUnicode=true&characterEncoding=UTF-8org.hibernate.dialect.MySQLDialecttrue 3.3創(chuàng)立對象關(guān)系映射(O/R Mapping)的相關(guān)文件操作:MyEclipse菜單- Window-Open Perspective-MyEclipse hibernate選中剛剛創(chuàng)立的login-conn,點(diǎn)擊按鈕連接選中test庫中的user_table表點(diǎn)擊右鍵,選擇“Hibernate Reverse Engineering這樣Myeclips

27、e就自動的在bean目錄下生成了兩個文件,User.java 和User.hbm.xml。我們將User.hbm.xml配置到hibernate.cfg.xml文件中去:這里的resource為該映射文件的路徑。我們翻開User.hbm.xml并對其進(jìn)行修改。3.5 編寫UserDAO文件接下來我們編寫UserDAO接口文件,并在dao目錄下新建impl目錄,創(chuàng)立UserDAOImpl.java實(shí)現(xiàn)UserDAO接口。public class UserDAOImpl implements UserDAOpublic User getUserByName(String userName)Sess

28、ion session=null; try session=HibernateSessionFactory.getSession(); String queryString = from User as model where model.userName = ?; Query queryObject = session.createQuery(queryString); queryObject.setParameter(0, userName); List list = queryObject.list(); User user=null; if(list.size()0&list!=nul

29、l) user=(User)list.get(0); return user; catch (RuntimeException re) throw re; finally if (session != null)session.close(); 3.6 運(yùn)行測試在UserDAOImpl類中編寫一個main函數(shù),測試運(yùn)行:public static void main(String args) UserDAOImpl dao=new UserDAOImpl();User user=dao.getUserByName(alice);System.out.println(user.getUserNa

30、me();Spring使用4.1 添加Spring功能框架操作:工程名login右鍵菜單- MyEclipse- Add Spring Capabilities開發(fā)包libraries選擇MyEclipse Libraries下的全部本例中其實(shí)只用到了局部,為了擴(kuò)展方便建議選擇全部,當(dāng)然也可以選擇User Libraries使用自己下載的Spring包,將lib文件夾下的所有jar包導(dǎo)入。JAR Library Installation選擇“copy checked“Library Folder項(xiàng)選擇“/WebRoot/WEB-INF/lib這樣的話所需的類庫都將拷貝到工程目錄,方便以后的部署

31、點(diǎn)擊“下一步(Next)創(chuàng)立配置文件,修改文件路徑Folder到“WebRoot/WEB-INF目錄以便和Struts配置文件一起管理,文件名稱為默認(rèn)的“applicationContext.xml點(diǎn)擊Next按鈕。點(diǎn)擊Finish,如果出現(xiàn)局部jar包已經(jīng)存在的提示,選擇Keep Existing4.2 工程的三層開發(fā)一個大的工程一般都含有三層,action層作為控制層,service層為功能實(shí)現(xiàn)層,dao層為數(shù)據(jù)庫訪問層?,F(xiàn)在,我們用三層來實(shí)現(xiàn)用戶登錄。建立UserService來實(shí)現(xiàn)登錄功能。public class UserServiceImpl implements UserServ

32、iceprivate UserDAO userDAO=null;public UserDAO getUserDAO() return userDAO;public void setUserDAO(UserDAO userDAO) this.userDAO = userDAO;public boolean userLogin(ActionForm form, ServletRequest request, ServletResponse response)UserForm userForm=(UserForm)form; String userName=userForm.getUsername(

33、); String password=userForm.getPassword(); User user=userDAO.getUserByName(userName);if(password.equals(user.getUserPassword()request.getSession().setAttribute(user, user);request.getSession().setMaxInactiveInterval(1800); /設(shè)置Session失效時間30分鐘 return true;elsereturn false;public boolean userLogout(Act

34、ionForm form, ServletRequest request, ServletResponse response) / TODO Auto-generated method stubreturn false;接下來,修改UserAction的登錄方法。public ActionForward login(ActionMapping mapping, ActionForm form, ServletRequest request, ServletResponse response) throws Exception UserService loginService=new UserS

35、ervice(); boolean isSuccess=loginService.userLogin(form,request,response); if(isSuccess) return mapping.findForward(loginSucceed); else return mapping.findForward(loginFailed); 我們可以看到Action層的實(shí)現(xiàn)是很簡單的,它直接調(diào)用了Service層提供的功能。4.3 簡單的Bean依賴注入我們可以看到,action層調(diào)用了UserService的實(shí)現(xiàn),service層調(diào)用了UserDAO的實(shí)現(xiàn),這里我們是基于接口實(shí)現(xiàn)的

36、功能的,至于到底調(diào)用接口的實(shí)現(xiàn)在代碼里并不知道,這就是利用Spring框架的好處,它實(shí)現(xiàn)了真正的控制反轉(zhuǎn)。接下來我們翻開applicationConfigure.xml文件查看UserDAO,UserService在Spring中的配置。4.4 整合Struts框架整合Struts框架,就是把Struts的Action作為Bean配置到Spring中。首先我們翻開struts-config.xml文件,將Spring以插件的形式配置進(jìn)去。 注意1配置Controller。 2plug-in 設(shè)置屬性contextConfigLocation的值為Spring文件所在的目錄,假設(shè)果有多個配置文件,那么以list的形式配置,具體查看我給大家的推薦閱讀-Spring2.0技術(shù)手冊。然后我們把a(bǔ)ction配置到applicationContext.xml文件中。注意,這里bean的name屬性必須和struts配置里

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論