版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、本科生畢業(yè)論文(設(shè)計(jì)) 題 目 基于 jsp 的單詞通系統(tǒng)的設(shè)計(jì)與實(shí) 現(xiàn) 學(xué) 院 計(jì)算機(jī)學(xué)院 專 業(yè) 計(jì)算機(jī)科學(xué)和技術(shù) 學(xué)生姓名 學(xué) 號 年級 指導(dǎo)教師 教務(wù)處制表 二 一 年五月二十六日 基于基于 jsp 的單詞通系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)的單詞通系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 計(jì)算機(jī)科學(xué)與技術(shù) 摘要 英語在生活中越來越重要,如何簡單有效地學(xué)習(xí)英語成為人們關(guān)心的問題,單詞通系統(tǒng)的應(yīng) 用能夠提高背單詞的效率,幫助用戶簡單快速掌握英語?;?jsp 的單詞通系統(tǒng)是一個(gè)集單詞查詢, 用戶注冊登陸,生詞表管理,根據(jù)艾賓浩斯記憶曲線背誦單詞等功能為一體的輔助學(xué)習(xí)英語系統(tǒng)。本 文研究了單詞通系統(tǒng)在我國發(fā)展?fàn)顩r,分析了 jsp
2、技術(shù)的基本語法和運(yùn)行機(jī)制,使用 jsp 技術(shù)進(jìn)行動(dòng) 態(tài)頁面設(shè)計(jì),研究了 mvc 三層框架的組成和運(yùn)行過程,對艾賓浩斯記憶曲線進(jìn)行了研究。利用 jsp 技術(shù)和 mvc 框架實(shí)現(xiàn)了基于 jsp 的單詞通系統(tǒng)。搭建了基于 b/s 模式的三層架構(gòu)模式,將理論技術(shù) 運(yùn)用于實(shí)際生活的研究,使更多的人受益于現(xiàn)代科技,因此此項(xiàng)研究頗具現(xiàn)實(shí)意義。 主題詞 jsp;單詞通系統(tǒng);mvc 框架;b/s 模式;艾賓浩斯記憶曲線 the design 進(jìn)行跳轉(zhuǎn)。 運(yùn)用 flash 按鈕使界面更加美觀,有好,方便用戶的使用和操作。 按鈕功能介紹: 首頁:用于跳轉(zhuǎn)到首頁,便于對單詞意義進(jìn)行查詢; 登陸:注冊用戶登陸,查看自己
3、的生詞庫,背誦單詞,查看自己的學(xué)習(xí)情況; 我的生詞表:登陸用戶查看自己的生詞,可以對生詞添加和刪除; 背單詞:登陸用戶背誦生詞表單詞,并可根據(jù)艾賓浩斯記憶曲線和自己自身情況背 誦單詞; 修改個(gè)人信息:登陸用戶修改自己的注冊信息(性別,出身日期,郵箱) ; 修改密碼:登陸用戶修改登陸密碼; 注冊:用戶注冊,填寫個(gè)人信息,之后系統(tǒng)自動(dòng)記錄學(xué)習(xí)過程; 退出登陸:登陸用戶退出登陸,系統(tǒng)暫停記錄學(xué)習(xí)過程,只可查詢單詞解釋。 界面中間是艾賓浩斯記憶曲線,讓用戶直觀地了解記憶曲線。記憶曲線下方可以查 詢生詞。 界面的 html 設(shè)計(jì)通過 frameset 元素,把頁面分成三個(gè)部分,頭部的 flash 按鈕
4、(top.html) ,中間的主框架對單詞查詢(mainframe.html),底部的標(biāo)題(bottom.html)。主要 框架代碼如下: 當(dāng)遇到生詞,可以把單詞輸入進(jìn)行單詞解釋查詢,通過互聯(lián)網(wǎng)就會搜索后臺數(shù)據(jù)庫, 尋找單詞解釋。單詞查詢結(jié)果如下圖: 圖 5.2 單詞查詢結(jié)果 主要的數(shù)據(jù)庫連接代碼和數(shù)據(jù)選擇操作代碼如下: string sql = select word,explain from dic where word=+s+; try dbmanager db = new dbmanager(); connection dbcon =db.getdbconnection(); resu
5、ltset rs = null; statement dbstatement = null; dbstatement = dbcon.createstatement(); rs = dbstatement.executequery(sql); while (rs.next() word t=new word(); t.setword(rs.getstring(word); t.setexplain(rs.getstring(explain); words.add(t); db.closeconnections(); catch (exception e) e.printstacktrace()
6、; 本系統(tǒng)可以進(jìn)行模糊查詢,當(dāng)忘記欲查詢單詞的正確拼寫時(shí),可將忘記字母以“?” 或代替,系統(tǒng)將列出所有符合條件之單詞供選擇,方便用戶查詢單詞。 用戶注冊和登錄系統(tǒng)是方便記錄用戶在背誦學(xué)習(xí)的工程,可以根據(jù)記憶曲線選擇自己 的背誦的單詞。 圖 5.3 注冊界面 圖 5.4 登陸界面 在注冊中判斷注冊失敗有該會員名已被使用或者輸入的字符不符合要求,以及在輸入密 碼時(shí)兩次輸入的密碼不相同,主要判斷代碼如下: try m=sql.executeupdate(); catch(sqlexception exp) backnews=該會員名已被使用或你的輸入不符合要求!; reg.setbacknews(b
7、acknews); else backnews=兩次輸入的密碼不相符!請重新輸入!;reg.setbacknews(backnews); elsebacknews=信息填寫不完整或名字中有非法字符,請重新輸入!; reg.setbacknews(backnews); 登陸后,系統(tǒng)就對用戶的背誦過程進(jìn)行記錄,用戶可以添加刪除自己的生詞。 下圖是添加生詞后的生詞本: 圖 5.5 生詞本 系統(tǒng)記錄每次添加單詞的用戶名,把用戶名和單詞作為生詞表的主碼,用于區(qū)別不 同用戶添加的單詞。以下是添加生詞的主要代碼,根據(jù)登陸用戶的用戶名 logname 來判斷 不同用戶的生詞表。及時(shí)不同用戶都存有相同的單詞也不
8、會混淆。 vector newwords = new vector(); string snewword=(string)req.getsession().getattribute(newword); string sexplain=(string)req.getsession().getattribute(explain); newwords nwd = new newwords(); nwd.setword(snewword); nwd.setexplain(sexplain); string sql = null; sql = insert into newwords(name,word
9、,explain)values(+logname+,+ snewword + ,+ sexplain+); 用戶可以選擇已背生詞選擇沒有背誦過的單詞,這樣可以減少重復(fù)背誦增加效率。 添加生詞后可以進(jìn)行記憶生詞,下圖是生詞背誦界面: 圖 5.6 背誦界面 背誦生詞時(shí)是根據(jù)解釋和單詞的詞性在空白表格中填入單詞,提交后系統(tǒng)會自動(dòng)判 斷,精確單詞的背誦正誤,并給出正確答案,這樣可以幫助用戶及時(shí)更改,更好的學(xué)習(xí)。 以下代碼是對填入的單詞與數(shù)據(jù)庫正確的單詞進(jìn)行比較,判斷單詞的正誤,并且把 背誦單詞的時(shí)間寫入數(shù)據(jù)庫: string sqls = select * from newwords where na
10、me = + logname + ; try int i = 1; dbmanager db = new dbmanager(); connection dbcon = db.getdbconnection(); resultset rs = null; statement dbstatement = null; dbstatement = dbcon.createstatement(); rs = dbstatement.executequery(sqls); while (rs.next() string sanswer = req.getparameter(i + ); i+; bool
11、ean boo = sanswer.equals(rs.getstring(word); if (!boo) word tt = new word(); tt.setword(rs.getstring(word); tt.setexplain(rs.getstring(explain); simpledateformat df = new simpledateformat(yyyy-mm-dd);/ string time = df.format(new date();/ string sqlhc = update newwords set data= + time + where word
12、= + rs.getstring(word) + ; dbmanager db1 = new dbmanager(); connection dbcon1 = db1.getdbconnection(); statement dbstatement1 = null; dbstatement1 = dbcon1.createstatement(); dbstatement1.executeupdate(sqlhc); answers.add(tt); simpledateformat df = new simpledateformat(yyyy-mm-dd); string time = df.
13、format(new date(); string sqlhc = update newwords set data= + time + where word = + rs.getstring(word) + ; dbmanager db1 = new dbmanager(); connection dbcon1 = db1.getdbconnection(); statement dbstatement1 = null; dbstatement1 = dbcon1.createstatement(); dbstatement1.executeupdate(sqlhc); db.closeco
14、nnections(); catch (exception e) e.printstacktrace(); 背錯(cuò)單詞進(jìn)行提醒: 圖 5.7 背錯(cuò)單詞糾錯(cuò) 在背誦單詞的同時(shí)把背誦的時(shí)間日期寫入生詞數(shù)據(jù)表,記錄用戶背誦這些單詞的時(shí) 間,可以根據(jù)艾賓浩斯記憶曲線,在不同的時(shí)間:當(dāng)天,1 天后,2 天后,3 天后,5 天 后,7 天后,進(jìn)行重復(fù)記憶,加深記憶,提高記憶效果。運(yùn)用下拉表單的形式主要是可以 方便用戶選擇,按照時(shí)間先后次序,可以提醒用戶先選擇 7 天前背誦單詞進(jìn)行復(fù)習(xí),鞏 固背誦,提高記憶效果。 圖 5.8 選擇不同時(shí)間背誦的單詞 單詞背誦選擇界面和后臺程序主要代碼如下: 界面主要代碼: 請
15、選擇天數(shù) 7天前 5天前 3天前 2天前 1天前 0天前 后臺程序主要代碼: string date=(string) req.getparameter(select); int idate = 0; if(date.equals(seven) idate = 7; else if(date.equals(five) idate = 5; else if(date.equals(three) idate = 3; else if(date.equals(two) idate = 2; else if(date.equals(one) idate = 1; else idate = 0; cal
16、endar cal = calendar.getinstance();/使用默認(rèn)時(shí)區(qū)和語言環(huán)境獲得一個(gè)日歷。 cal.add(calendar.day_of_month, -idate);/取當(dāng)前日期的前n天. java.text.simpledateformat format = new java.text.simpledateformat(yyyy-mm-dd); string date1=format.format(cal.gettime(); string sqls = select * from newwords where name = + logname + and data=+
17、date1+; try dbmanager db = new dbmanager(); connection dbcon = db.getdbconnection(); resultset rs = null; statement dbstatement = null; dbstatement = dbcon.createstatement(); rs = dbstatement.executequery(sqls); while (rs.next() word word = new word(); word.setword(rs.getstring(word); word.setexplai
18、n(rs.getstring(explain); answers.add(word); db.closeconnections(); catch (exception e) e.printstacktrace(); 單詞背誦正確率查詢: 圖5.9 背誦正確率曲線 通過背誦正確率曲線可以清楚地看到用戶在記憶單詞時(shí)學(xué)習(xí)情況,了解自己的情況不 斷地調(diào)整學(xué)習(xí)對策,可以有效地背誦單詞。 5.3 本章小結(jié)本章小結(jié) 本章主要利用 dreamweaver 對界面進(jìn)行設(shè)計(jì),利用 jsp 技術(shù)和 mvc 框架進(jìn)行系統(tǒng)設(shè)計(jì), 實(shí)現(xiàn)系統(tǒng),完善系統(tǒng)單詞查詢,登陸,添加生詞等功能。熟悉 html 標(biāo)記語言,利用 jsp
19、技術(shù)在 html 文本中添加代碼實(shí)現(xiàn)動(dòng)態(tài)功能。利用 flash 按鈕,美化界面。利用 postgresql 數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲。 第六章第六章 小結(jié)小結(jié) 經(jīng)過一段時(shí)間的畢業(yè)設(shè)計(jì),在指導(dǎo)老師的指導(dǎo)下基本完成了單詞通系統(tǒng),本系統(tǒng)功 能還不是十分的完善,完成了主要的基本功能:單詞的查詢,用戶注冊和登陸,生詞的 添加刪除,單詞背誦,根據(jù)艾賓浩斯記憶曲線選擇背誦等功能。 通過這次畢業(yè)設(shè)計(jì)以及撰寫本畢業(yè)論文,我學(xué)會了利用先進(jìn)的 jsp 技術(shù)結(jié)合數(shù)據(jù)庫 的方法和技術(shù),而且對程序中的錯(cuò)誤有進(jìn)一步的認(rèn)識。我將大學(xué)學(xué)到的軟件設(shè)計(jì)充分應(yīng) 用于實(shí)踐,除此之外,我還掌握了 dreamweaver 等開發(fā)工具,提高了自己
20、的動(dòng)手能力。 我對于軟件設(shè)計(jì)的相關(guān)步驟和流程有了更深刻的理解,熟悉并掌握了數(shù)據(jù)庫操作和 html 的編寫,也對數(shù)據(jù)庫語言的功能有了更深刻的體會。鍛煉我整體分析能力,在系統(tǒng)分析 和開發(fā)過程中需要全面考慮整體分析,因?yàn)橹挥羞@樣才能設(shè)計(jì)和開發(fā)出使用戶滿意的系 統(tǒng)。同時(shí),在這里感謝我的指導(dǎo)老師悉心指導(dǎo)。 本系統(tǒng)實(shí)現(xiàn)了單詞通所應(yīng)有的基本功能,但是還一部分未能實(shí)現(xiàn),今后分析問題應(yīng)該 全面細(xì)致,設(shè)計(jì)完整的系統(tǒng),使操作更加方便。該系統(tǒng)還存在很多不足,由于本人對界 面設(shè)計(jì)了解不多,導(dǎo)致對界面的控制能力不夠,界面不美觀,數(shù)據(jù)庫方面的知識不足, 對與各個(gè)表之間的關(guān)系不能完全掌握,數(shù)據(jù)表設(shè)計(jì)簡單。在對用戶個(gè)人信息的輸
21、入時(shí), 密碼沒有加密處理。以前對這一問題沒有很高的認(rèn)識。對用戶密碼信息就行加密處理, 可以很好的安全手段,使用戶的權(quán)益得到保證。加密技術(shù)是網(wǎng)絡(luò)安全采取的主要安全保 密措施,是最常用的安全保密手段,利用技術(shù)手段把重要的數(shù)據(jù)變?yōu)閬y碼(加密)傳送, 到達(dá)目的地后再用相同或不同的手段還原(解密) 。加密技術(shù)包括兩個(gè)元素:算法和密鑰。 算法是將普通的文本(或者可以理解的信息)與一竄數(shù)字(密鑰)的結(jié)合,產(chǎn)生不可理 解的密文的步驟,密鑰是用來對數(shù)據(jù)進(jìn)行編碼和解碼的一種算法。學(xué)習(xí)和了解加密技術(shù) 后,在以后的系統(tǒng)設(shè)計(jì)時(shí),應(yīng)對用戶信息進(jìn)行安全加密,保證用戶的權(quán)益,使系統(tǒng)設(shè)計(jì) 更加完善。 在系統(tǒng)開發(fā)過程中,充分的學(xué)
22、習(xí)到 mvc 框架,mvc 框架對于系統(tǒng)開發(fā)和重用都起到很 好的效果。希望在今后自己能繼續(xù)對 jsp 等技術(shù)進(jìn)行深入的學(xué)習(xí)。 參考文獻(xiàn)參考文獻(xiàn) 1 明日科技.jsp 開發(fā)技術(shù)大全m.北京:人民郵電出版社, 2007. 2 y.daniel liang.java 程序設(shè)計(jì)導(dǎo)論m.北京:機(jī)械工業(yè)出版社, 2007. 3 明日科技 王國輝 網(wǎng)易.jsp 數(shù)據(jù)庫系統(tǒng)開發(fā)案例精選m .北京:人民郵電出版社,2006 4 王珊 薩師宣.數(shù)據(jù)庫系統(tǒng)概論m.北京:高等教育出版社, 2006. 5耿祥義.jsp 基礎(chǔ)教程m .北京:清華大學(xué)出版社,2004. 6bruce eckel 著,thinking in
23、 javam.北京:機(jī)械工業(yè)出版社,2009. 7陳威,白偉明,李楠著,jsp 工程應(yīng)用與項(xiàng)目實(shí)踐m.北京:機(jī)械工業(yè)出版社,2009. 8孫衛(wèi)琴,精通struts,基于mvc的java web設(shè)計(jì)與開發(fā)m.北京:電子工業(yè)出版社,2008.87-35. 9 武延軍 黃飛躍. 精通 jsp 編程技術(shù)m.北京:人民郵電出版社,2001.8:170-200 10 柏亞軍. jsp 編程基礎(chǔ)及應(yīng)用實(shí)例集錦m.北京:人民郵電出版社,2001.7:10-60 11 清宏計(jì)算機(jī)工作室.jsp 編程技巧m.北京:機(jī)械工業(yè)出版社,2000.1:103-106 12 周影 .網(wǎng)絡(luò)編程語言 jsp 實(shí)例教程m.北京:
24、電子工業(yè)出版社,2003.6:30-55 13 陳海山.深入 java servlet 網(wǎng)絡(luò)編程m.北京:清華大學(xué)出版社,2002.2 :12-20 14donny.jsp 與網(wǎng)站開發(fā)編程實(shí)戰(zhàn)m.北京:科學(xué)出版社 ,2001.7:166-184 15steven holzner.java 技術(shù)內(nèi)幕m.北京:機(jī)械工業(yè)出版社,2002.1:65-70 16 phil hanna .jsp 技術(shù)大全m.北京:機(jī)械工業(yè)出版社, 2002.3 :37-57 17 karl moss. java servlet 開發(fā)人員指南m.北京:清華大學(xué)出版社,2002:189-192 18蔡劍,景楠. java w
25、eb 應(yīng)用開發(fā):j2ee 和 tomcatm.北京: 清華大學(xué)出版社. 2005:23-132 19 http:/ 20 http:/ 聲聲 明明 本人聲明所呈交的學(xué)位論文是本人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。 據(jù)我所知,除了文中特別加以標(biāo)注和致謝的地方外,論文中不包含其他人已經(jīng)發(fā)表或撰 寫過的研究成果,也不包含為獲得四川大學(xué)或其他教育機(jī)構(gòu)的學(xué)位或證書而使用過的材 料。與我一同工作的同志對本研究所做的任何貢獻(xiàn)均已在論文中作了明確的說明并表示 謝意。 本學(xué)位論文成果是本人在四川大學(xué)讀書期間在導(dǎo)師指導(dǎo)下取得的,論文成果歸四川 大學(xué)所有,特此聲明。 學(xué)位論文作者(簽名) 論文指導(dǎo)教師(簽
26、名) _ 20 年月日 致致 謝謝 首先我在這里向養(yǎng)育和培養(yǎng)我的父母表示深深地思念和感謝,再向關(guān)心我,幫助我 的老師和同學(xué)表示感謝! 能順利圓滿地完成我的設(shè)計(jì),離不開自身的努力,離不開指導(dǎo)老師 老師的指點(diǎn), 更離不開 大學(xué)這個(gè)大環(huán)境四年來在學(xué)習(xí)和生活的熏陶和培養(yǎng)。 大四下學(xué)期開始不久,我開始了我的畢業(yè)設(shè)計(jì)。在這幾個(gè)月里,我得到了導(dǎo)師代老 師的關(guān)心和教導(dǎo), 老師在學(xué)術(shù)上的淵博知識讓我在這幾個(gè)月的學(xué)習(xí)和研究中深受其益。 我向于老師表示深深地謝意;再向和我進(jìn)行討論問題,讓彼此相互幫助和學(xué)習(xí)工作的同 學(xué)表示感謝;向計(jì)算機(jī)學(xué)院實(shí)驗(yàn)室中,陪著我們度過幾多光陰的管理員和老師表示謝意。 設(shè)計(jì)的完成,為我在川大
27、的學(xué)習(xí)生涯畫上了一個(gè)圓滿的句號。在 大學(xué)度過的美好 時(shí)光將使我終生受益。 譯文:譯文: servlets 和和 jsp 頁面的最佳實(shí)踐頁面的最佳實(shí)踐 java servlet 技術(shù)和 jsp(javaserver pages)是服務(wù)器端的技術(shù),目前這種技術(shù)控 制了整個(gè)服務(wù)器端 java 技術(shù)市場,并且逐漸成為開發(fā)商業(yè)網(wǎng)絡(luò)應(yīng)用程序的技術(shù)標(biāo)準(zhǔn)。 java 開發(fā)人員喜歡使用這項(xiàng)技術(shù)開發(fā)應(yīng)用程序有很多的原因,包括:很容易學(xué)習(xí)這種技 術(shù),并且在基于 web 的應(yīng)用程序中,一次編寫代碼,到處可以運(yùn)行,具有很強(qiáng)的跨平臺 性。 更重要的是,如果按照最佳實(shí)踐方式 servlet 和 jsp 可以有效地幫助開發(fā)者
28、把網(wǎng)頁 邏輯與界面設(shè)計(jì)和顯示分離。最佳實(shí)踐方法已被證實(shí)是在應(yīng)用中可以開發(fā)高質(zhì)量、可重 用與易維護(hù)的 web 應(yīng)用程序的較好的方法。與此相似的技術(shù)有很多比如,嵌入到 html 文 件中的 java 代碼(腳本),作為的文件中的部分,可能會導(dǎo)致那些復(fù)雜的應(yīng)用程序運(yùn)行 效率不高,難以重復(fù)利用,維護(hù)難等問題。但是利用最佳實(shí)踐方法可以改變這些弊端。 在這篇文章中,將介紹 servlet 和 jsp 技術(shù)的最佳實(shí)踐的重要性,這里假設(shè)讀者已經(jīng) 有這兩種技術(shù)的基本原理知識。 這篇文章將涵蓋以下內(nèi)容: 簡要介紹 java servlets 和 jsp(javaserver pages)基本知識。 為開發(fā) ser
29、vlet 和 jsp 的開發(fā)人員提出一些建議,技術(shù)和規(guī)則。 提供關(guān)于 servlet 和 jsp 開發(fā)的最佳實(shí)踐。 概述概述 servletsservlets 和和 jspjsp 技術(shù)技術(shù) 類似公共網(wǎng)關(guān)接口(cgi)腳本,servlet 的支持請求和響應(yīng)的編程模型。 當(dāng)客戶端 向服務(wù)器發(fā)送請求,服務(wù)器將請求發(fā)送到 servlet。 然后 servlet 構(gòu)建一個(gè)響應(yīng),服務(wù) 器將該響應(yīng)發(fā)送回客戶端。 但是不像 cgi 腳本那樣,servlet 與 http 服務(wù)器是運(yùn)行在相 同的進(jìn)程內(nèi)。 當(dāng)客戶端發(fā)出請求的情況下, service 方法被調(diào)用,并且通過一個(gè)請求和創(chuàng)建響應(yīng) 對象。 servlet
30、首先確定該請求是一個(gè) get 操作還是 post 操作。 然后它調(diào)用下列方法 之一: doget 或者 dopost。如果請求是 get 操作就會調(diào)用 doget 方法,如果請求是 post 操作則會調(diào)用 dopost 方法。doget 和 dopost 兩種方法都會接受請求( httpservletrequest )和響應(yīng)( httpservletresponse )。 簡而言之,servlet 是 java 的一個(gè)特殊的類。servlet 可以使用 print 語句生成動(dòng) 態(tài)的 html 網(wǎng)頁內(nèi)容。但是需要注意的重要問題是,servlet 是在容器中運(yùn)行的,并且對 會話和對象生命周期的管理
31、是由那些 api 提供的。 因此,當(dāng)你使 servlets 的時(shí)候,你 將會繼承到 java 平臺的所有優(yōu)勢,其中包括安全性,跨平臺性等。servlet 的數(shù)據(jù)庫是 通過 jdbc 來訪問 api 和具有跨平臺的可移植性的 servlet。 java server page(jsp) jsp 技術(shù)是 servlet 技術(shù)的一個(gè)更高水平層次的抽象。它是由 sun 公司研究和開發(fā)的 一個(gè)開放的,免費(fèi)提供規(guī)范的技術(shù),主要作為與微軟的 active server pages(asp)技 術(shù)相比較并且改進(jìn)的技術(shù),以及作為 java 2 企業(yè)版(j2ee)的一個(gè)關(guān)鍵組件。目前,許 多商用的應(yīng)用程序服務(wù)器,
32、如 bea 的 weblogic,ibm 公司的 websphere,live 的 jrun,orion 等等)都支持 jsp 技術(shù)。 jspjsp 頁面是如何工作的?頁面是如何工作的? jsp 頁面實(shí)際上是由傳統(tǒng)的 html 頁面嵌入 java 代碼形成的 web 頁面。 jsp 頁面文件 擴(kuò)展名是.jsp,而不是.html 或者是.htm,該擴(kuò)展名將告訴服務(wù)器,此網(wǎng)頁需要特殊處理, 這個(gè)特殊處理是由服務(wù)器擴(kuò)展功能實(shí)現(xiàn)或者插件來完成。 當(dāng)一個(gè) jsp 頁面被調(diào)用時(shí),它首先會被編譯(由 jsp 引擎編譯)成一個(gè) java servlet。與此同時(shí),這個(gè) servlet 就像其他的 servle
33、t 一樣被 servlet 引擎處理。然后 該 servlet 引擎會加載這個(gè) servlet 類(使用類加載器)并執(zhí)行它,用來創(chuàng)建動(dòng)態(tài) html 頁面,之后發(fā)送到瀏覽器,為用戶顯示結(jié)果,處理過程如圖 1 所示。該 servlet 創(chuàng)建一 些必要的對象,而這些對象會作為一個(gè)特殊的字符串寫入輸出流,并且會在瀏覽器中顯 示這些字符串對象。 圖 1:調(diào)用 jsp 頁面 請求/響應(yīng)流程 下一次請求該頁面時(shí),jsp 引擎將會執(zhí)行已經(jīng)加載的 servlet 的 jsp 頁面,除非該 jsp 頁面發(fā)生了變化。如果發(fā)生這種情況,jsp 引擎會自動(dòng)重新編譯已經(jīng)修改過的 jsp 頁 面并執(zhí)行。 最佳實(shí)踐最佳實(shí)踐
34、在本節(jié)中,闡述在 servlet,特別是在 jsp 頁面中的最佳實(shí)踐的做法。重點(diǎn)強(qiáng)調(diào) jsp 最佳實(shí)踐,主要是因?yàn)?jsp 技術(shù)比 servlet 技術(shù)似乎更廣泛的應(yīng)用(可能是因?yàn)?jsp 技 術(shù)推動(dòng)了頁面表示與邏輯的分離)。最好的實(shí)踐結(jié)合是集成了 servlet 技術(shù)和 jsp 頁面 技術(shù),是模型、視圖、控制器(mvc)設(shè)計(jì)模式,將在本文的后面部分進(jìn)行討論分析。 在在 htmlhtml 頁面中不要過度使用嵌入的頁面中不要過度使用嵌入的 javajava 代碼代碼:在很小的項(xiàng)目應(yīng)用中將所有 java 代 碼直接嵌入到 jsp 頁面中是沒有什么問題的。但是過度使用此功能導(dǎo)致頁面程序代碼 像意大利
35、面一樣雜亂無章,使人不容易閱讀和理解。 因此應(yīng)該盡量減少 html 頁面中 的 java 代碼,編寫單獨(dú)的 java 類,用它來執(zhí)行計(jì)算等其他邏輯,簡化 jsp 頁面代碼。 一旦這些類被測試,實(shí)例就已經(jīng)被創(chuàng)建了。 選擇合適的選擇合適的 includeinclude 機(jī)制:機(jī)制:那些靜態(tài)數(shù)據(jù),如頁眉,頁腳和導(dǎo)航欄的內(nèi)容是最好保 存在單獨(dú)的文件中,并且不要重復(fù)的編譯動(dòng)態(tài)生成它們。 一旦這些內(nèi)容存儲在各個(gè) 不同的文件中,就可以使用下面 include 機(jī)制中的任何一種就可以在所有的頁面中引 入它們: 1. include 指令: 2. include 行動(dòng): 在 jsp 頁面轉(zhuǎn)換為 servlet
36、時(shí)(轉(zhuǎn)換階段) ,第一種 include 機(jī)制是包含指定的文件 內(nèi)容,第二個(gè) include 行為,指定頁面已經(jīng)執(zhí)行后,頁面包含 response 動(dòng)作產(chǎn)生的內(nèi)容。 如果頁面包含的內(nèi)容不會經(jīng)常改變的時(shí)候,我推薦使用第一種 include 指令方式,因?yàn)?它執(zhí)行的速度快,性能較好。當(dāng)頁面包含的文件經(jīng)常改變,并且在執(zhí)行頁面時(shí)還沒有辦 法確定所要引入的頁面的時(shí)候,我推薦使用第二種 include 行為的方式。 另一種 include 機(jī)制是使用由 javaserver pages 標(biāo)準(zhǔn)標(biāo)記庫(jstl)提供的 行為標(biāo)記。 用戶可以使用此標(biāo)記來引用本地或者遠(yuǎn)程的文件內(nèi)容。 下面是 一些例子: 不要將業(yè)
37、務(wù)邏輯和表示混為一體不要將業(yè)務(wù)邏輯和表示混為一體 :對于更高級更為復(fù)雜的應(yīng)用中,并且當(dāng)涉及更多 的代碼時(shí),不要將業(yè)務(wù)邏輯和表示混在同一個(gè)文件時(shí)十分重要的。因?yàn)楫?dāng)把業(yè)務(wù)邏輯 和表示分開后,任何一方的改動(dòng),不至于會影響到另一方。但是編寫的 jsp 代碼應(yīng)僅 限于前端顯示,不能處理后臺邏輯。那么,應(yīng)該怎樣實(shí)現(xiàn)業(yè)務(wù)邏輯這一部分呢?這就 是 javabeans 技術(shù)發(fā)揮作用的地方。javabeans 技術(shù)是一種便攜的,平臺無關(guān)的組件 模型,它可以是開發(fā)人員編寫的組件和并且可以在任何地方重用組件。在 jsp 頁面中, javabeans 組件將會處理業(yè)務(wù)邏輯并將數(shù)據(jù)返回到 jsp 頁面,同時(shí)格式化由 ja
38、vabeans 中返回的數(shù)據(jù),以便在瀏覽器中顯示。 一個(gè) jsp 頁面通過調(diào)用 javabeans 組件使用 set 方法和 get 方法來操作它的屬性。利用 javabeans 組件處理 jsp 頁面中 的業(yè)務(wù)邏輯的好處是: 1. 可重用的組件:不同的應(yīng)用程序?qū)⒛軌蛑貜?fù)使用相同的組件。 2. 業(yè)務(wù)邏輯和表示邏輯分離:可以在 jsp 頁面上更改數(shù)據(jù)的表現(xiàn)方式而不影 響業(yè)務(wù)邏輯。 換句話說,網(wǎng)頁設(shè)計(jì)師可以只專注于頁面的設(shè)計(jì),而 java 開發(fā)人員可以只專注于業(yè)務(wù)邏輯設(shè)計(jì),兩者互不影響。 3. 保護(hù)源代碼的安全,維護(hù)自己的知識產(chǎn)權(quán)。 如果在你的應(yīng)用程序中使用了 enterprise javabea
39、ns(ejbs),就必須將業(yè)務(wù)邏 輯保留在 ejb 組件中,并且提供生命周期管理,事務(wù)支持,多客戶端訪問域?qū)ο螅▽?shí) 體 beans)。 可以在 enterprise blueprints 獲得更為詳細(xì)的資料。 使用自定義標(biāo)記使用自定義標(biāo)記 :并不是所有開發(fā)者都喜歡將 java 代碼(或 scriptlets)嵌入在 html 文檔中的,可能是因?yàn)樗麄儾涣私?java 語言并且也不樂意學(xué)習(xí)它的語法。雖然 javabeans 組件可以用來封裝了大部分的 java 代碼,但是在 jsp 頁面中使用那些代 碼仍然需要有一些與內(nèi)容開發(fā)有關(guān)的 java 語法知識。 jsp 技術(shù)可以允許開發(fā)者通過標(biāo)記庫引入
40、自定義標(biāo)記。 作為一個(gè) java 開發(fā)人員, 您可以通過引入可擴(kuò)展部署并且可以在 html 這類語法使用的自定義標(biāo)記來擴(kuò)展 jsp 頁面。 自定義標(biāo)記還允許你自己提供更好的封裝,來更好的使業(yè)務(wù)邏輯和表示邏輯 分隔。此外,它們提供了自定義表示的方法,而使用 jstl 卻很難做到這一點(diǎn)。 自定義標(biāo)記的好處:自定義標(biāo)記的好處: 1. 他們可以消除你的 jsp 應(yīng)用程序中的 scriptlets。標(biāo)記必要的參數(shù),參數(shù) 可以傳遞屬性或者內(nèi)容主體。因此,不需要 java 代碼來初始化或設(shè)置組件 屬性。 2. 自定義標(biāo)記語法更加的簡單。 腳本程序是用 java 編寫代碼,但自定義標(biāo) 記可以在類似于 html
41、 的語法中使用。 3. 自定義標(biāo)記可以提高非程序員內(nèi)容開發(fā)的效率,可以讓他們執(zhí)行由 html 文 件不能完成的任務(wù)。 4. 自定義標(biāo)記是可重用的。 節(jié)省了開發(fā)和測試時(shí)間。 scriptlets 是不可以 重復(fù)使用,除非你通過剪切和粘貼來重用,不能直接調(diào)用。 總之,你可以使用自定義標(biāo)記來完成復(fù)雜的任務(wù)像使用 html 文件中創(chuàng)建表達(dá)式一樣。 當(dāng)編寫自定義標(biāo)記庫的時(shí)應(yīng)遵守一下編程指南: 1. 簡單便捷簡單便捷:如果需要一個(gè)標(biāo)記中包含多個(gè)屬性,那么最好將它分為多個(gè)標(biāo) 記。 2. 可利用性:可利用性:標(biāo)記的使用者(html 開發(fā)者)更易使用,并且利用率高。 3. 不要在不要在 jspjsp 頁面中發(fā)明
42、另外一種編程語言:頁面中發(fā)明另外一種編程語言:用戶不要使用自定義標(biāo)記編寫 顯示的程序。 4. 盡量不要重新發(fā)明標(biāo)記盡量不要重新發(fā)明標(biāo)記:目前有幾個(gè)可用的 jsp 標(biāo)記庫,如 jakarta taglibs project 等。查看這些標(biāo)記庫,看是否有你想要的標(biāo)記,不要重復(fù) 開發(fā)。 不要重新發(fā)明標(biāo)記不要重新發(fā)明標(biāo)記 :雖然自定義標(biāo)記提供了重用有效組件的方法,但是仍然需要?jiǎng)?chuàng) 建,測試和調(diào)試它們。 此外,開發(fā)人員經(jīng)常重復(fù)的發(fā)明新的標(biāo)記,但是利用這些標(biāo) 記的解決方法不是最高效的。javaserver pages standard tag library(jstl)jsp 標(biāo)準(zhǔn)標(biāo)記庫,通過提供一組可重復(fù)
43、使用的標(biāo)準(zhǔn)標(biāo)記來解決使用自定義標(biāo)記的解決方法 效率不高的問題。jstl 定義了一個(gè)通用的標(biāo)準(zhǔn)的標(biāo)記庫,可以在任何地方使用,所 以這樣你就不再需要使用 scriptlet(或各種供應(yīng)商提供的迭代標(biāo)記)在集合中進(jìn)行 迭代。jstl 中的包括各類標(biāo)記,例如循環(huán)標(biāo)記,讀取沒有按照 java 語法的屬性,在 各種數(shù)據(jù)結(jié)構(gòu)的遍歷,有條件地計(jì)算表達(dá)式,通過一種精確地方式設(shè)置屬性和腳本變 量,并解析 xml 文檔等各類標(biāo)記。 使用使用 jstljstl 表達(dá)式語言表達(dá)式語言 :通過 jsp 屬性的范圍和參數(shù)請求將信息傳遞給 jsp 頁面。 表達(dá)式語言(el),是專門為網(wǎng)頁開發(fā)者特別設(shè)計(jì)的語言,是將 jsp 屬
44、性范圍提升為 業(yè)務(wù)邏輯到 jsp 頁面通信的標(biāo)準(zhǔn)方法。 但是,請注意的雖然 el 是 jsp 技術(shù)的一個(gè)關(guān) 鍵方面,但是它不是一個(gè)通用的編程語言。 相反,它只是一個(gè)簡單的數(shù)據(jù)訪問語言, 這種特性使得它可以方便地訪問(和操作)的應(yīng)用程序數(shù)據(jù),而無需使用 scriptlet 或請求時(shí)間表達(dá)式的值。 在 jsp 1.x 中,網(wǎng)頁作者必須使用表達(dá)式來存取系統(tǒng)的值,如下面 的例子: sometags:atag attribute=“ 或自定義的 javabeans 組件的值: 表達(dá)式語言允許網(wǎng)頁頁面作者使用一個(gè)簡化的語法訪問對象。 例如,要訪問一個(gè)簡 單的變量,你可以使用類似以下語句: 而如果要訪問嵌套
45、的 javabeans 屬性,您可以使用類似以下的語句: 如果您使用 javascript 開發(fā),你會感到非常熟悉,因?yàn)?el 采用 javascript 語法存取結(jié) 構(gòu)化數(shù)據(jù)。 必要時(shí)可以使用過濾器必要時(shí)可以使用過濾器 :過濾器是 jsp 一項(xiàng)新的技術(shù)特點(diǎn)。 如果你曾經(jīng)遇到一個(gè)這 樣的情況,你有多個(gè) servlets 或 jsp 頁面需要壓縮它們的內(nèi)容,你可以寫一個(gè)壓縮 過濾器并將其應(yīng)用到所有的資源上。例如, 在 java blueprints 中,通過過濾器來 提供 signon。 使用可移植的安全模型使用可移植的安全模型 :大多數(shù)應(yīng)用服務(wù)器具有服務(wù)器開發(fā)商或者供應(yīng)商特定的安 全功能,這樣
46、就將開發(fā)者局限在某臺特定的服務(wù)器。為了最大限度地提高企業(yè)應(yīng)用程 序的可移植性,可以使用一臺可移植性的 web 應(yīng)用程安全模型 。但是最后歸根結(jié)底, 這歸結(jié)成權(quán)衡問題 。 例如,如果你有一組很早就定義好的用戶,您可以使用基于表 單的登錄或基本身份驗(yàn)證來管理他們。 但是如果你需要?jiǎng)討B(tài)地創(chuàng)建用戶,你需要使 用特定容器的 api 來創(chuàng)建和管理用戶。雖然特定容器的 api 是無法移植的,但是使用 適配器設(shè)計(jì)模式就可以克服這一點(diǎn)。 使用數(shù)據(jù)庫存儲持久信息使用數(shù)據(jù)庫存儲持久信息:你可以通過 httpsession 對象來實(shí)現(xiàn)會話,httpsession 提供了一個(gè)簡單方便的機(jī)制來存儲用戶信息,識別用戶 co
47、okie。 使用會話存儲臨時(shí) 信息,即便這些信息丟失了,你也不用擔(dān)心。(當(dāng)會話過期或客戶端變更瀏覽器時(shí), 會話數(shù)據(jù)就會丟失。)如果你希望存儲更加持久會話信息,使用一個(gè)數(shù)據(jù)庫,在瀏覽 器之間共享數(shù)據(jù)庫中的持久信息更加安全更具有可移植性。 利用緩存內(nèi)容利用緩存內(nèi)容 :你永遠(yuǎn)不應(yīng)該動(dòng)態(tài)的重新生成請求之間不會更改的內(nèi)容。 您可以 在客戶端,代理端或服務(wù)器端緩存內(nèi)容。 使用連接池使用連接池 :我建議使用 jstl 進(jìn)行數(shù)據(jù)庫的訪問存取。 但是如果你希望編寫自己 的數(shù)據(jù)庫訪問存取行為,我建議你使用連接池,這樣可以有效地使所有請求共享數(shù)據(jù) 庫連接。 但是應(yīng)該注意的是,j2ee 服務(wù)器在后臺提供了這項(xiàng)功能。
48、通過緩存數(shù)據(jù)庫查詢結(jié)果通過緩存數(shù)據(jù)庫查詢結(jié)果 :如果你希望通過緩存數(shù)據(jù)庫請求結(jié)果,不要使用 jdbc 的 resultset 對象作為緩存的對象。 這是因?yàn)樗c一個(gè)鏈接緊密相連,而這個(gè)鏈接 和連接池沖突。 將數(shù)據(jù) resultset 復(fù)制到一個(gè)特定應(yīng)用的 bean,如 vector ,或 jdbc 的 rowsets 。 如果必要可以采用新的如果必要可以采用新的 jspjsp xmlxml 語法語法。 這確實(shí)取決于你所希望你的應(yīng)用程序如何遵 守 xml 語法。然而這需要權(quán)衡的分析,雖然這使得 jsp 功能更加強(qiáng)大,但是對開發(fā)者 卻不友好,不利于開發(fā)者開發(fā)使用。 閱讀并應(yīng)用閱讀并應(yīng)用 enter
49、priseenterprise blueprintsblueprints:sun 公司的 enterprise blueprints 向開發(fā)商 提供指南,模式和樣本應(yīng)用程序 ,如 adventure builder 和 pet store。 總的來說, j2ee blueprints 中提供最佳實(shí)踐的方法和一組設(shè)計(jì)模式,事實(shí)證明這些實(shí)踐和模式 具有可移植性,健壯性,可擴(kuò)展性的。這些都為企業(yè)在開發(fā) java 應(yīng)用程序經(jīng)常出現(xiàn) 的問題提供了解決方案。 servletsservlets 和和 jspjsp 頁面的集成頁面的集成 jsp 規(guī)范提出了使用 jsp 頁面構(gòu)建 web 應(yīng)用程序的兩種解決方案
50、:模式 1 和模式 2 兩 種體系結(jié)構(gòu)。 這兩個(gè)模型的區(qū)別是在不同的位置進(jìn)行數(shù)據(jù)處理。 在模型 1 的體系結(jié)構(gòu) 中,如圖 2 所示,jsp 頁面是負(fù)責(zé)處理請求并將響應(yīng)發(fā)送回給客戶端。 圖 2:jsp 模式 1 體系架構(gòu) 模型 2 體系架構(gòu),如圖 3 所示,集成使用了 servlet 和 jsp 頁面。 在這種模式下, jsp 頁面是用于表示層,servlets 負(fù)責(zé)處理各種業(yè)務(wù)。servlet 作為一個(gè)控制器,負(fù)責(zé)處 理請求和創(chuàng)建 jsp 頁面說需要的任何 bean。該控制器還負(fù)責(zé)決定將請求發(fā)送到哪個(gè) jsp 頁面。 jsp 頁面檢索 servlet 創(chuàng)建的對象并提取動(dòng)態(tài)內(nèi)容插入到模板中。 圖
51、 3:jsp 模型 2 架構(gòu) 這種模式促進(jìn)了模型視圖控制器(mvc)設(shè)計(jì)模式的使用。 請注意的是,已經(jīng)存在的幾 個(gè)框架,能夠?qū)崿F(xiàn)這種有用的設(shè)計(jì)模式,并且真正的把內(nèi)容和表示獨(dú)立分開。apache struts 是 mvc 的形式化框架。 這個(gè)框架非常適于開發(fā)復(fù)雜的應(yīng)用程序,在這些復(fù)雜的應(yīng) 用程序中單個(gè)請求或提交表單會產(chǎn)生更好的效果。 參考文獻(xiàn)原文參考文獻(xiàn)原文 servlets and jsp pages best practices java servlet technology and javaserver pages (jsp pages) are server-side technolog
52、ies that have dominated the server-side java technology market; theyve become the standard way to develop commercial web applications. java developers love these technologies for myriad reasons, including: the technologies are fairly easy to learn, and they bring the write once, run anywhere paradig
53、m to web applications. more importantly, if used effectively by following best practices, servlets and jsp pages help separate presentation from content. best practices are proven approaches for developing quality, reusable, and easily maintainable servlet- and jsp-based web applications. for instan
54、ce, embedded java code (scriptlets) in sections of html documents can result in complex applications that are not efficient, and difficult to reuse, enhance, and maintain. best practices can change all that. in this article, ill present important best practices for servlets and jsp pages; i assume t
55、hat you have basic working knowledge of both technologies. this article: presents an overview of java servlets and javaserver pages (jsp pages) provides hints, tips, and guidelines for working with servlets and jsp pages provides best practices for servlets and jsp pages overviewoverview ofof servle
56、tsservlets andand jspjsp pagespages similar to common gateway interface (cgi) scripts, servlets support a request and response programming model. when a client sends a request to the server, the server sends the request to the servlet. the servlet then constructs a response that the server sends bac
57、k to the client. unlike cgi scripts, however, servlets run within the same process as the http server. when a client request is made, the service method is called and passed a request and response object. the servlet first determines whether the request is a get or post operation. it then calls one
58、of the following methods: doget or dopost . the doget method is called if the request is get , and dopost is called if the request is post . both doget and dopost take request ( httpservletrequest ) and response ( httpservletresponse ). in the simplest terms, then, servlets are java classes that can
59、 generate dynamic html content using print statements. what is important to note about servlets, however, is that they run in a container, and the apis provide session and object life-cycle management. consequently, when you use servlets, you gain all the benefits from the java platform, which inclu
60、de the sandbox (security), database access api via jdbc, and cross-platform portability of servlets. javaserver pages (jsp) the jsp technology-which abstracts servlets to a higher level-is an open, freely available specification developed by sun microsystems as an alternative to microsofts active se
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)軟件管理系統(tǒng)采購協(xié)議樣本一
- 2025年度拆墻工程安全施工與質(zhì)量驗(yàn)收合同4篇
- 二零二五版智能法律咨詢APP下載服務(wù)條款3篇
- 二零二五年度消防培訓(xùn)與應(yīng)急演練服務(wù)合同3篇 - 副本
- 人教版九年級化學(xué)上冊第3章物質(zhì)構(gòu)成的奧秘《第2節(jié) 組成物質(zhì)的化學(xué)元素》第一課時(shí)公開課教學(xué)課件
- 2025年度拆除廣告牌與城市公共安全施工合同范本4篇
- 二零二五年度建筑鋼材材料代購與配送服務(wù)合同3篇
- 2025年度建筑拆除與環(huán)保處理一體化施工合同4篇
- 2025年度工業(yè)用地場地代租賃合同參考范本4篇
- 2024院同樂分院中草藥保健品生產(chǎn)加工合同3篇
- 新員工入職培訓(xùn)測試題附有答案
- 勞動(dòng)合同續(xù)簽意見單
- 大學(xué)生國家安全教育意義
- 2024年保育員(初級)培訓(xùn)計(jì)劃和教學(xué)大綱-(目錄版)
- 河北省石家莊市2023-2024學(xué)年高二上學(xué)期期末考試 語文 Word版含答案
- 企業(yè)正確認(rèn)識和運(yùn)用矩陣式管理
- 分布式光伏高處作業(yè)專項(xiàng)施工方案
- 陳閱增普通生物學(xué)全部課件
- 檢驗(yàn)科主任就職演講稿范文
- 人防工程主體監(jiān)理質(zhì)量評估報(bào)告
- 20225GRedCap通信技術(shù)白皮書
評論
0/150
提交評論