版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本科生畢業(yè)論文(設(shè)計(jì)) 題 目 基于 jsp 的單詞通系統(tǒng)的設(shè)計(jì)與實(shí) 現(xiàn) 學(xué) 院 計(jì)算機(jī)學(xué)院 專(zhuān) 業(yè) 計(jì)算機(jī)科學(xué)和技術(shù) 學(xué)生姓名 學(xué) 號(hào) 年級(jí) 指導(dǎo)教師 教務(wù)處制表 二 一 年五月二十六日 基于基于 jsp 的單詞通系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)的單詞通系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 計(jì)算機(jī)科學(xué)與技術(shù) 摘要 英語(yǔ)在生活中越來(lái)越重要,如何簡(jiǎn)單有效地學(xué)習(xí)英語(yǔ)成為人們關(guān)心的問(wèn)題,單詞通系統(tǒng)的應(yīng) 用能夠提高背單詞的效率,幫助用戶(hù)簡(jiǎn)單快速掌握英語(yǔ)?;?jsp 的單詞通系統(tǒng)是一個(gè)集單詞查詢(xún), 用戶(hù)注冊(cè)登陸,生詞表管理,根據(jù)艾賓浩斯記憶曲線(xiàn)背誦單詞等功能為一體的輔助學(xué)習(xí)英語(yǔ)系統(tǒng)。本 文研究了單詞通系統(tǒng)在我國(guó)發(fā)展?fàn)顩r,分析了 jsp
2、技術(shù)的基本語(yǔ)法和運(yùn)行機(jī)制,使用 jsp 技術(shù)進(jìn)行動(dòng) 態(tài)頁(yè)面設(shè)計(jì),研究了 mvc 三層框架的組成和運(yùn)行過(guò)程,對(duì)艾賓浩斯記憶曲線(xià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 模式;艾賓浩斯記憶曲線(xiàn) the design 進(jìn)行跳轉(zhuǎn)。 運(yùn)用 flash 按鈕使界面更加美觀,有好,方便用戶(hù)的使用和操作。 按鈕功能介紹: 首頁(yè):用于跳轉(zhuǎn)到首頁(yè),便于對(duì)單詞意義進(jìn)行查詢(xún); 登陸:注冊(cè)用戶(hù)登陸,查看自己
3、的生詞庫(kù),背誦單詞,查看自己的學(xué)習(xí)情況; 我的生詞表:登陸用戶(hù)查看自己的生詞,可以對(duì)生詞添加和刪除; 背單詞:登陸用戶(hù)背誦生詞表單詞,并可根據(jù)艾賓浩斯記憶曲線(xiàn)和自己自身情況背 誦單詞; 修改個(gè)人信息:登陸用戶(hù)修改自己的注冊(cè)信息(性別,出身日期,郵箱) ; 修改密碼:登陸用戶(hù)修改登陸密碼; 注冊(cè):用戶(hù)注冊(cè),填寫(xiě)個(gè)人信息,之后系統(tǒng)自動(dòng)記錄學(xué)習(xí)過(guò)程; 退出登陸:登陸用戶(hù)退出登陸,系統(tǒng)暫停記錄學(xué)習(xí)過(guò)程,只可查詢(xún)單詞解釋。 界面中間是艾賓浩斯記憶曲線(xiàn),讓用戶(hù)直觀地了解記憶曲線(xiàn)。記憶曲線(xiàn)下方可以查 詢(xún)生詞。 界面的 html 設(shè)計(jì)通過(guò) frameset 元素,把頁(yè)面分成三個(gè)部分,頭部的 flash 按鈕
4、(top.html) ,中間的主框架對(duì)單詞查詢(xún)(mainframe.html),底部的標(biāo)題(bottom.html)。主要 框架代碼如下: 當(dāng)遇到生詞,可以把單詞輸入進(jìn)行單詞解釋查詢(xún),通過(guò)互聯(lián)網(wǎng)就會(huì)搜索后臺(tái)數(shù)據(jù)庫(kù), 尋找單詞解釋。單詞查詢(xún)結(jié)果如下圖: 圖 5.2 單詞查詢(xún)結(jié)果 主要的數(shù)據(jù)庫(kù)連接代碼和數(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)行模糊查詢(xún),當(dāng)忘記欲查詢(xún)單詞的正確拼寫(xiě)時(shí),可將忘記字母以“?” 或代替,系統(tǒng)將列出所有符合條件之單詞供選擇,方便用戶(hù)查詢(xún)單詞。 用戶(hù)注冊(cè)和登錄系統(tǒng)是方便記錄用戶(hù)在背誦學(xué)習(xí)的工程,可以根據(jù)記憶曲線(xiàn)選擇自己 的背誦的單詞。 圖 5.3 注冊(cè)界面 圖 5.4 登陸界面 在注冊(cè)中判斷注冊(cè)失敗有該會(huì)員名已被使用或者輸入的字符不符合要求,以及在輸入密 碼時(shí)兩次輸入的密碼不相同,主要判斷代碼如下: try m=sql.executeupdate(); catch(sqlexception exp) backnews=該會(huì)員名已被使用或你的輸入不符合要求!; reg.setbacknews(b
7、acknews); else backnews=兩次輸入的密碼不相符!請(qǐng)重新輸入!;reg.setbacknews(backnews); elsebacknews=信息填寫(xiě)不完整或名字中有非法字符,請(qǐng)重新輸入!; reg.setbacknews(backnews); 登陸后,系統(tǒng)就對(duì)用戶(hù)的背誦過(guò)程進(jìn)行記錄,用戶(hù)可以添加刪除自己的生詞。 下圖是添加生詞后的生詞本: 圖 5.5 生詞本 系統(tǒng)記錄每次添加單詞的用戶(hù)名,把用戶(hù)名和單詞作為生詞表的主碼,用于區(qū)別不 同用戶(hù)添加的單詞。以下是添加生詞的主要代碼,根據(jù)登陸用戶(hù)的用戶(hù)名 logname 來(lái)判斷 不同用戶(hù)的生詞表。及時(shí)不同用戶(hù)都存有相同的單詞也不
8、會(huì)混淆。 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+); 用戶(hù)可以選擇已背生詞選擇沒(méi)有背誦過(guò)的單詞,這樣可以減少重復(fù)背誦增加效率。 添加生詞后可以進(jìn)行記憶生詞,下圖是生詞背誦界面: 圖 5.6 背誦界面 背誦生詞時(shí)是根據(jù)解釋和單詞的詞性在空白表格中填入單詞,提交后系統(tǒng)會(huì)自動(dòng)判 斷,精確單詞的背誦正誤,并給出正確答案,這樣可以幫助用戶(hù)及時(shí)更改,更好的學(xué)習(xí)。 以下代碼是對(duì)填入的單詞與數(shù)據(jù)庫(kù)正確的單詞進(jìn)行比較,判斷單詞的正誤,并且把 背誦單詞的時(shí)間寫(xiě)入數(shù)據(jù)庫(kù): 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í)間日期寫(xiě)入生詞數(shù)據(jù)表,記錄用戶(hù)背誦這些單詞的時(shí) 間,可以根據(jù)艾賓浩斯記憶曲線(xiàn),在不同的時(shí)間:當(dāng)天,1 天后,2 天后,3 天后,5 天 后,7 天后,進(jìn)行重復(fù)記憶,加深記憶,提高記憶效果。運(yùn)用下拉表單的形式主要是可以 方便用戶(hù)選擇,按照時(shí)間先后次序,可以提醒用戶(hù)先選擇 7 天前背誦單詞進(jìn)行復(fù)習(xí),鞏 固背誦,提高記憶效果。 圖 5.8 選擇不同時(shí)間背誦的單詞 單詞背誦選擇界面和后臺(tái)程序主要代碼如下: 界面主要代碼: 請(qǐng)
15、選擇天數(shù) 7天前 5天前 3天前 2天前 1天前 0天前 后臺(tái)程序主要代碼: 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ū)和語(yǔ)言環(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(); 單詞背誦正確率查詢(xún): 圖5.9 背誦正確率曲線(xiàn) 通過(guò)背誦正確率曲線(xiàn)可以清楚地看到用戶(hù)在記憶單詞時(shí)學(xué)習(xí)情況,了解自己的情況不 斷地調(diào)整學(xué)習(xí)對(duì)策,可以有效地背誦單詞。 5.3 本章小結(jié)本章小結(jié) 本章主要利用 dreamweaver 對(duì)界面進(jìn)行設(shè)計(jì),利用 jsp 技術(shù)和 mvc 框架進(jìn)行系統(tǒng)設(shè)計(jì), 實(shí)現(xiàn)系統(tǒng),完善系統(tǒng)單詞查詢(xún),登陸,添加生詞等功能。熟悉 html 標(biāo)記語(yǔ)言,利用 jsp
19、技術(shù)在 html 文本中添加代碼實(shí)現(xiàn)動(dòng)態(tài)功能。利用 flash 按鈕,美化界面。利用 postgresql 數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ)。 第六章第六章 小結(jié)小結(jié) 經(jīng)過(guò)一段時(shí)間的畢業(yè)設(shè)計(jì),在指導(dǎo)老師的指導(dǎo)下基本完成了單詞通系統(tǒng),本系統(tǒng)功 能還不是十分的完善,完成了主要的基本功能:?jiǎn)卧~的查詢(xún),用戶(hù)注冊(cè)和登陸,生詞的 添加刪除,單詞背誦,根據(jù)艾賓浩斯記憶曲線(xiàn)選擇背誦等功能。 通過(guò)這次畢業(yè)設(shè)計(jì)以及撰寫(xiě)本畢業(yè)論文,我學(xué)會(huì)了利用先進(jìn)的 jsp 技術(shù)結(jié)合數(shù)據(jù)庫(kù) 的方法和技術(shù),而且對(duì)程序中的錯(cuò)誤有進(jìn)一步的認(rèn)識(shí)。我將大學(xué)學(xué)到的軟件設(shè)計(jì)充分應(yīng) 用于實(shí)踐,除此之外,我還掌握了 dreamweaver 等開(kāi)發(fā)工具,提高了自己
20、的動(dòng)手能力。 我對(duì)于軟件設(shè)計(jì)的相關(guān)步驟和流程有了更深刻的理解,熟悉并掌握了數(shù)據(jù)庫(kù)操作和 html 的編寫(xiě),也對(duì)數(shù)據(jù)庫(kù)語(yǔ)言的功能有了更深刻的體會(huì)。鍛煉我整體分析能力,在系統(tǒng)分析 和開(kāi)發(fā)過(guò)程中需要全面考慮整體分析,因?yàn)橹挥羞@樣才能設(shè)計(jì)和開(kāi)發(fā)出使用戶(hù)滿(mǎn)意的系 統(tǒng)。同時(shí),在這里感謝我的指導(dǎo)老師悉心指導(dǎo)。 本系統(tǒng)實(shí)現(xiàn)了單詞通所應(yīng)有的基本功能,但是還一部分未能實(shí)現(xiàn),今后分析問(wèn)題應(yīng)該 全面細(xì)致,設(shè)計(jì)完整的系統(tǒng),使操作更加方便。該系統(tǒng)還存在很多不足,由于本人對(duì)界 面設(shè)計(jì)了解不多,導(dǎo)致對(duì)界面的控制能力不夠,界面不美觀,數(shù)據(jù)庫(kù)方面的知識(shí)不足, 對(duì)與各個(gè)表之間的關(guān)系不能完全掌握,數(shù)據(jù)表設(shè)計(jì)簡(jiǎn)單。在對(duì)用戶(hù)個(gè)人信息的輸
21、入時(shí), 密碼沒(méi)有加密處理。以前對(duì)這一問(wèn)題沒(méi)有很高的認(rèn)識(shí)。對(duì)用戶(hù)密碼信息就行加密處理, 可以很好的安全手段,使用戶(hù)的權(quán)益得到保證。加密技術(shù)是網(wǎng)絡(luò)安全采取的主要安全保 密措施,是最常用的安全保密手段,利用技術(shù)手段把重要的數(shù)據(jù)變?yōu)閬y碼(加密)傳送, 到達(dá)目的地后再用相同或不同的手段還原(解密) 。加密技術(shù)包括兩個(gè)元素:算法和密鑰。 算法是將普通的文本(或者可以理解的信息)與一竄數(shù)字(密鑰)的結(jié)合,產(chǎn)生不可理 解的密文的步驟,密鑰是用來(lái)對(duì)數(shù)據(jù)進(jìn)行編碼和解碼的一種算法。學(xué)習(xí)和了解加密技術(shù) 后,在以后的系統(tǒng)設(shè)計(jì)時(shí),應(yīng)對(duì)用戶(hù)信息進(jìn)行安全加密,保證用戶(hù)的權(quán)益,使系統(tǒng)設(shè)計(jì) 更加完善。 在系統(tǒng)開(kāi)發(fā)過(guò)程中,充分的學(xué)
22、習(xí)到 mvc 框架,mvc 框架對(duì)于系統(tǒng)開(kāi)發(fā)和重用都起到很 好的效果。希望在今后自己能繼續(xù)對(duì) jsp 等技術(shù)進(jìn)行深入的學(xué)習(xí)。 參考文獻(xiàn)參考文獻(xiàn) 1 明日科技.jsp 開(kāi)發(fā)技術(shù)大全m.北京:人民郵電出版社, 2007. 2 y.daniel liang.java 程序設(shè)計(jì)導(dǎo)論m.北京:機(jī)械工業(yè)出版社, 2007. 3 明日科技 王國(guó)輝 網(wǎng)易.jsp 數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)案例精選m .北京:人民郵電出版社,2006 4 王珊 薩師宣.數(shù)據(jù)庫(kù)系統(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ì)與開(kāi)發(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ò)編程語(yǔ)言 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)站開(kāi)發(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 開(kāi)發(fā)人員指南m.北京:清華大學(xué)出版社,2002:189-192 18蔡劍,景楠. java w
25、eb 應(yīng)用開(kāi)發(fā):j2ee 和 tomcatm.北京: 清華大學(xué)出版社. 2005:23-132 19 http:/ 20 http:/ 聲聲 明明 本人聲明所呈交的學(xué)位論文是本人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。 據(jù)我所知,除了文中特別加以標(biāo)注和致謝的地方外,論文中不包含其他人已經(jīng)發(fā)表或撰 寫(xiě)過(guò)的研究成果,也不包含為獲得四川大學(xué)或其他教育機(jī)構(gòu)的學(xué)位或證書(shū)而使用過(guò)的材 料。與我一同工作的同志對(duì)本研究所做的任何貢獻(xiàn)均已在論文中作了明確的說(shuō)明并表示 謝意。 本學(xué)位論文成果是本人在四川大學(xué)讀書(shū)期間在導(dǎo)師指導(dǎo)下取得的,論文成果歸四川 大學(xué)所有,特此聲明。 學(xué)位論文作者(簽名) 論文指導(dǎo)教師(簽
26、名) _ 20 年月日 致致 謝謝 首先我在這里向養(yǎng)育和培養(yǎng)我的父母表示深深地思念和感謝,再向關(guān)心我,幫助我 的老師和同學(xué)表示感謝! 能順利圓滿(mǎn)地完成我的設(shè)計(jì),離不開(kāi)自身的努力,離不開(kāi)指導(dǎo)老師 老師的指點(diǎn), 更離不開(kāi) 大學(xué)這個(gè)大環(huán)境四年來(lái)在學(xué)習(xí)和生活的熏陶和培養(yǎng)。 大四下學(xué)期開(kāi)始不久,我開(kāi)始了我的畢業(yè)設(shè)計(jì)。在這幾個(gè)月里,我得到了導(dǎo)師代老 師的關(guān)心和教導(dǎo), 老師在學(xué)術(shù)上的淵博知識(shí)讓我在這幾個(gè)月的學(xué)習(xí)和研究中深受其益。 我向于老師表示深深地謝意;再向和我進(jìn)行討論問(wèn)題,讓彼此相互幫助和學(xué)習(xí)工作的同 學(xué)表示感謝;向計(jì)算機(jī)學(xué)院實(shí)驗(yàn)室中,陪著我們度過(guò)幾多光陰的管理員和老師表示謝意。 設(shè)計(jì)的完成,為我在川大
27、的學(xué)習(xí)生涯畫(huà)上了一個(gè)圓滿(mǎn)的句號(hào)。在 大學(xué)度過(guò)的美好 時(shí)光將使我終生受益。 譯文:譯文: servlets 和和 jsp 頁(yè)面的最佳實(shí)踐頁(yè)面的最佳實(shí)踐 java servlet 技術(shù)和 jsp(javaserver pages)是服務(wù)器端的技術(shù),目前這種技術(shù)控 制了整個(gè)服務(wù)器端 java 技術(shù)市場(chǎng),并且逐漸成為開(kāi)發(fā)商業(yè)網(wǎng)絡(luò)應(yīng)用程序的技術(shù)標(biāo)準(zhǔn)。 java 開(kāi)發(fā)人員喜歡使用這項(xiàng)技術(shù)開(kāi)發(fā)應(yīng)用程序有很多的原因,包括:很容易學(xué)習(xí)這種技 術(shù),并且在基于 web 的應(yīng)用程序中,一次編寫(xiě)代碼,到處可以運(yùn)行,具有很強(qiáng)的跨平臺(tái) 性。 更重要的是,如果按照最佳實(shí)踐方式 servlet 和 jsp 可以有效地幫助開(kāi)發(fā)者
28、把網(wǎng)頁(yè) 邏輯與界面設(shè)計(jì)和顯示分離。最佳實(shí)踐方法已被證實(shí)是在應(yīng)用中可以開(kāi)發(fā)高質(zhì)量、可重 用與易維護(hù)的 web 應(yīng)用程序的較好的方法。與此相似的技術(shù)有很多比如,嵌入到 html 文 件中的 java 代碼(腳本),作為的文件中的部分,可能會(huì)導(dǎo)致那些復(fù)雜的應(yīng)用程序運(yùn)行 效率不高,難以重復(fù)利用,維護(hù)難等問(wèn)題。但是利用最佳實(shí)踐方法可以改變這些弊端。 在這篇文章中,將介紹 servlet 和 jsp 技術(shù)的最佳實(shí)踐的重要性,這里假設(shè)讀者已經(jīng) 有這兩種技術(shù)的基本原理知識(shí)。 這篇文章將涵蓋以下內(nèi)容: 簡(jiǎn)要介紹 java servlets 和 jsp(javaserver pages)基本知識(shí)。 為開(kāi)發(fā) ser
29、vlet 和 jsp 的開(kāi)發(fā)人員提出一些建議,技術(shù)和規(guī)則。 提供關(guān)于 servlet 和 jsp 開(kāi)發(fā)的最佳實(shí)踐。 概述概述 servletsservlets 和和 jspjsp 技術(shù)技術(shù) 類(lèi)似公共網(wǎng)關(guān)接口(cgi)腳本,servlet 的支持請(qǐng)求和響應(yīng)的編程模型。 當(dāng)客戶(hù)端 向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器將請(qǐng)求發(fā)送到 servlet。 然后 servlet 構(gòu)建一個(gè)響應(yīng),服務(wù) 器將該響應(yīng)發(fā)送回客戶(hù)端。 但是不像 cgi 腳本那樣,servlet 與 http 服務(wù)器是運(yùn)行在相 同的進(jìn)程內(nèi)。 當(dāng)客戶(hù)端發(fā)出請(qǐng)求的情況下, service 方法被調(diào)用,并且通過(guò)一個(gè)請(qǐng)求和創(chuàng)建響應(yīng) 對(duì)象。 servlet
30、首先確定該請(qǐng)求是一個(gè) get 操作還是 post 操作。 然后它調(diào)用下列方法 之一: doget 或者 dopost。如果請(qǐng)求是 get 操作就會(huì)調(diào)用 doget 方法,如果請(qǐng)求是 post 操作則會(huì)調(diào)用 dopost 方法。doget 和 dopost 兩種方法都會(huì)接受請(qǐng)求( httpservletrequest )和響應(yīng)( httpservletresponse )。 簡(jiǎn)而言之,servlet 是 java 的一個(gè)特殊的類(lèi)。servlet 可以使用 print 語(yǔ)句生成動(dòng) 態(tài)的 html 網(wǎng)頁(yè)內(nèi)容。但是需要注意的重要問(wèn)題是,servlet 是在容器中運(yùn)行的,并且對(duì) 會(huì)話(huà)和對(duì)象生命周期的管理
31、是由那些 api 提供的。 因此,當(dāng)你使 servlets 的時(shí)候,你 將會(huì)繼承到 java 平臺(tái)的所有優(yōu)勢(shì),其中包括安全性,跨平臺(tái)性等。servlet 的數(shù)據(jù)庫(kù)是 通過(guò) jdbc 來(lái)訪(fǎng)問(wèn) api 和具有跨平臺(tái)的可移植性的 servlet。 java server page(jsp) jsp 技術(shù)是 servlet 技術(shù)的一個(gè)更高水平層次的抽象。它是由 sun 公司研究和開(kāi)發(fā)的 一個(gè)開(kāi)放的,免費(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 頁(yè)面是如何工作的?頁(yè)面是如何工作的? jsp 頁(yè)面實(shí)際上是由傳統(tǒng)的 html 頁(yè)面嵌入 java 代碼形成的 web 頁(yè)面。 jsp 頁(yè)面文件 擴(kuò)展名是.jsp,而不是.html 或者是.htm,該擴(kuò)展名將告訴服務(wù)器,此網(wǎng)頁(yè)需要特殊處理, 這個(gè)特殊處理是由服務(wù)器擴(kuò)展功能實(shí)現(xiàn)或者插件來(lái)完成。 當(dāng)一個(gè) jsp 頁(yè)面被調(diào)用時(shí),它首先會(huì)被編譯(由 jsp 引擎編譯)成一個(gè) java servlet。與此同時(shí),這個(gè) servlet 就像其他的 servle
33、t 一樣被 servlet 引擎處理。然后 該 servlet 引擎會(huì)加載這個(gè) servlet 類(lèi)(使用類(lèi)加載器)并執(zhí)行它,用來(lái)創(chuàng)建動(dòng)態(tài) html 頁(yè)面,之后發(fā)送到瀏覽器,為用戶(hù)顯示結(jié)果,處理過(guò)程如圖 1 所示。該 servlet 創(chuàng)建一 些必要的對(duì)象,而這些對(duì)象會(huì)作為一個(gè)特殊的字符串寫(xiě)入輸出流,并且會(huì)在瀏覽器中顯 示這些字符串對(duì)象。 圖 1:調(diào)用 jsp 頁(yè)面 請(qǐng)求/響應(yīng)流程 下一次請(qǐng)求該頁(yè)面時(shí),jsp 引擎將會(huì)執(zhí)行已經(jīng)加載的 servlet 的 jsp 頁(yè)面,除非該 jsp 頁(yè)面發(fā)生了變化。如果發(fā)生這種情況,jsp 引擎會(huì)自動(dòng)重新編譯已經(jīng)修改過(guò)的 jsp 頁(yè) 面并執(zhí)行。 最佳實(shí)踐最佳實(shí)踐
34、在本節(jié)中,闡述在 servlet,特別是在 jsp 頁(yè)面中的最佳實(shí)踐的做法。重點(diǎn)強(qiáng)調(diào) jsp 最佳實(shí)踐,主要是因?yàn)?jsp 技術(shù)比 servlet 技術(shù)似乎更廣泛的應(yīng)用(可能是因?yàn)?jsp 技 術(shù)推動(dòng)了頁(yè)面表示與邏輯的分離)。最好的實(shí)踐結(jié)合是集成了 servlet 技術(shù)和 jsp 頁(yè)面 技術(shù),是模型、視圖、控制器(mvc)設(shè)計(jì)模式,將在本文的后面部分進(jìn)行討論分析。 在在 htmlhtml 頁(yè)面中不要過(guò)度使用嵌入的頁(yè)面中不要過(guò)度使用嵌入的 javajava 代碼代碼:在很小的項(xiàng)目應(yīng)用中將所有 java 代 碼直接嵌入到 jsp 頁(yè)面中是沒(méi)有什么問(wèn)題的。但是過(guò)度使用此功能導(dǎo)致頁(yè)面程序代碼 像意大利
35、面一樣雜亂無(wú)章,使人不容易閱讀和理解。 因此應(yīng)該盡量減少 html 頁(yè)面中 的 java 代碼,編寫(xiě)單獨(dú)的 java 類(lèi),用它來(lái)執(zhí)行計(jì)算等其他邏輯,簡(jiǎn)化 jsp 頁(yè)面代碼。 一旦這些類(lèi)被測(cè)試,實(shí)例就已經(jīng)被創(chuàng)建了。 選擇合適的選擇合適的 includeinclude 機(jī)制:機(jī)制:那些靜態(tài)數(shù)據(jù),如頁(yè)眉,頁(yè)腳和導(dǎo)航欄的內(nèi)容是最好保 存在單獨(dú)的文件中,并且不要重復(fù)的編譯動(dòng)態(tài)生成它們。 一旦這些內(nèi)容存儲(chǔ)在各個(gè) 不同的文件中,就可以使用下面 include 機(jī)制中的任何一種就可以在所有的頁(yè)面中引 入它們: 1. include 指令: 2. include 行動(dòng): 在 jsp 頁(yè)面轉(zhuǎn)換為 servlet
36、時(shí)(轉(zhuǎn)換階段) ,第一種 include 機(jī)制是包含指定的文件 內(nèi)容,第二個(gè) include 行為,指定頁(yè)面已經(jīng)執(zhí)行后,頁(yè)面包含 response 動(dòng)作產(chǎn)生的內(nèi)容。 如果頁(yè)面包含的內(nèi)容不會(huì)經(jīng)常改變的時(shí)候,我推薦使用第一種 include 指令方式,因?yàn)?它執(zhí)行的速度快,性能較好。當(dāng)頁(yè)面包含的文件經(jīng)常改變,并且在執(zhí)行頁(yè)面時(shí)還沒(méi)有辦 法確定所要引入的頁(yè)面的時(shí)候,我推薦使用第二種 include 行為的方式。 另一種 include 機(jī)制是使用由 javaserver pages 標(biāo)準(zhǔn)標(biāo)記庫(kù)(jstl)提供的 行為標(biāo)記。 用戶(hù)可以使用此標(biāo)記來(lái)引用本地或者遠(yuǎn)程的文件內(nèi)容。 下面是 一些例子: 不要將業(yè)
37、務(wù)邏輯和表示混為一體不要將業(yè)務(wù)邏輯和表示混為一體 :對(duì)于更高級(jí)更為復(fù)雜的應(yīng)用中,并且當(dāng)涉及更多 的代碼時(shí),不要將業(yè)務(wù)邏輯和表示混在同一個(gè)文件時(shí)十分重要的。因?yàn)楫?dāng)把業(yè)務(wù)邏輯 和表示分開(kāi)后,任何一方的改動(dòng),不至于會(huì)影響到另一方。但是編寫(xiě)的 jsp 代碼應(yīng)僅 限于前端顯示,不能處理后臺(tái)邏輯。那么,應(yīng)該怎樣實(shí)現(xiàn)業(yè)務(wù)邏輯這一部分呢?這就 是 javabeans 技術(shù)發(fā)揮作用的地方。javabeans 技術(shù)是一種便攜的,平臺(tái)無(wú)關(guān)的組件 模型,它可以是開(kāi)發(fā)人員編寫(xiě)的組件和并且可以在任何地方重用組件。在 jsp 頁(yè)面中, javabeans 組件將會(huì)處理業(yè)務(wù)邏輯并將數(shù)據(jù)返回到 jsp 頁(yè)面,同時(shí)格式化由 ja
38、vabeans 中返回的數(shù)據(jù),以便在瀏覽器中顯示。 一個(gè) jsp 頁(yè)面通過(guò)調(diào)用 javabeans 組件使用 set 方法和 get 方法來(lái)操作它的屬性。利用 javabeans 組件處理 jsp 頁(yè)面中 的業(yè)務(wù)邏輯的好處是: 1. 可重用的組件:不同的應(yīng)用程序?qū)⒛軌蛑貜?fù)使用相同的組件。 2. 業(yè)務(wù)邏輯和表示邏輯分離:可以在 jsp 頁(yè)面上更改數(shù)據(jù)的表現(xiàn)方式而不影 響業(yè)務(wù)邏輯。 換句話(huà)說(shuō),網(wǎng)頁(yè)設(shè)計(jì)師可以只專(zhuān)注于頁(yè)面的設(shè)計(jì),而 java 開(kāi)發(fā)人員可以只專(zhuān)注于業(yè)務(wù)邏輯設(shè)計(jì),兩者互不影響。 3. 保護(hù)源代碼的安全,維護(hù)自己的知識(shí)產(chǎn)權(quán)。 如果在你的應(yīng)用程序中使用了 enterprise javabea
39、ns(ejbs),就必須將業(yè)務(wù)邏 輯保留在 ejb 組件中,并且提供生命周期管理,事務(wù)支持,多客戶(hù)端訪(fǎng)問(wèn)域?qū)ο螅▽?shí) 體 beans)。 可以在 enterprise blueprints 獲得更為詳細(xì)的資料。 使用自定義標(biāo)記使用自定義標(biāo)記 :并不是所有開(kāi)發(fā)者都喜歡將 java 代碼(或 scriptlets)嵌入在 html 文檔中的,可能是因?yàn)樗麄儾涣私?java 語(yǔ)言并且也不樂(lè)意學(xué)習(xí)它的語(yǔ)法。雖然 javabeans 組件可以用來(lái)封裝了大部分的 java 代碼,但是在 jsp 頁(yè)面中使用那些代 碼仍然需要有一些與內(nèi)容開(kāi)發(fā)有關(guān)的 java 語(yǔ)法知識(shí)。 jsp 技術(shù)可以允許開(kāi)發(fā)者通過(guò)標(biāo)記庫(kù)引入
40、自定義標(biāo)記。 作為一個(gè) java 開(kāi)發(fā)人員, 您可以通過(guò)引入可擴(kuò)展部署并且可以在 html 這類(lèi)語(yǔ)法使用的自定義標(biāo)記來(lái)擴(kuò)展 jsp 頁(yè)面。 自定義標(biāo)記還允許你自己提供更好的封裝,來(lái)更好的使業(yè)務(wù)邏輯和表示邏輯 分隔。此外,它們提供了自定義表示的方法,而使用 jstl 卻很難做到這一點(diǎn)。 自定義標(biāo)記的好處:自定義標(biāo)記的好處: 1. 他們可以消除你的 jsp 應(yīng)用程序中的 scriptlets。標(biāo)記必要的參數(shù),參數(shù) 可以傳遞屬性或者內(nèi)容主體。因此,不需要 java 代碼來(lái)初始化或設(shè)置組件 屬性。 2. 自定義標(biāo)記語(yǔ)法更加的簡(jiǎn)單。 腳本程序是用 java 編寫(xiě)代碼,但自定義標(biāo) 記可以在類(lèi)似于 html
41、 的語(yǔ)法中使用。 3. 自定義標(biāo)記可以提高非程序員內(nèi)容開(kāi)發(fā)的效率,可以讓他們執(zhí)行由 html 文 件不能完成的任務(wù)。 4. 自定義標(biāo)記是可重用的。 節(jié)省了開(kāi)發(fā)和測(cè)試時(shí)間。 scriptlets 是不可以 重復(fù)使用,除非你通過(guò)剪切和粘貼來(lái)重用,不能直接調(diào)用。 總之,你可以使用自定義標(biāo)記來(lái)完成復(fù)雜的任務(wù)像使用 html 文件中創(chuàng)建表達(dá)式一樣。 當(dāng)編寫(xiě)自定義標(biāo)記庫(kù)的時(shí)應(yīng)遵守一下編程指南: 1. 簡(jiǎn)單便捷簡(jiǎn)單便捷:如果需要一個(gè)標(biāo)記中包含多個(gè)屬性,那么最好將它分為多個(gè)標(biāo) 記。 2. 可利用性:可利用性:標(biāo)記的使用者(html 開(kāi)發(fā)者)更易使用,并且利用率高。 3. 不要在不要在 jspjsp 頁(yè)面中發(fā)明
42、另外一種編程語(yǔ)言:頁(yè)面中發(fā)明另外一種編程語(yǔ)言:用戶(hù)不要使用自定義標(biāo)記編寫(xiě) 顯示的程序。 4. 盡量不要重新發(fā)明標(biāo)記盡量不要重新發(fā)明標(biāo)記:目前有幾個(gè)可用的 jsp 標(biāo)記庫(kù),如 jakarta taglibs project 等。查看這些標(biāo)記庫(kù),看是否有你想要的標(biāo)記,不要重復(fù) 開(kāi)發(fā)。 不要重新發(fā)明標(biāo)記不要重新發(fā)明標(biāo)記 :雖然自定義標(biāo)記提供了重用有效組件的方法,但是仍然需要?jiǎng)?chuàng) 建,測(cè)試和調(diào)試它們。 此外,開(kāi)發(fā)人員經(jīng)常重復(fù)的發(fā)明新的標(biāo)記,但是利用這些標(biāo) 記的解決方法不是最高效的。javaserver pages standard tag library(jstl)jsp 標(biāo)準(zhǔn)標(biāo)記庫(kù),通過(guò)提供一組可重復(fù)
43、使用的標(biāo)準(zhǔn)標(biāo)記來(lái)解決使用自定義標(biāo)記的解決方法 效率不高的問(wèn)題。jstl 定義了一個(gè)通用的標(biāo)準(zhǔn)的標(biāo)記庫(kù),可以在任何地方使用,所 以這樣你就不再需要使用 scriptlet(或各種供應(yīng)商提供的迭代標(biāo)記)在集合中進(jìn)行 迭代。jstl 中的包括各類(lèi)標(biāo)記,例如循環(huán)標(biāo)記,讀取沒(méi)有按照 java 語(yǔ)法的屬性,在 各種數(shù)據(jù)結(jié)構(gòu)的遍歷,有條件地計(jì)算表達(dá)式,通過(guò)一種精確地方式設(shè)置屬性和腳本變 量,并解析 xml 文檔等各類(lèi)標(biāo)記。 使用使用 jstljstl 表達(dá)式語(yǔ)言表達(dá)式語(yǔ)言 :通過(guò) jsp 屬性的范圍和參數(shù)請(qǐng)求將信息傳遞給 jsp 頁(yè)面。 表達(dá)式語(yǔ)言(el),是專(zhuān)門(mén)為網(wǎng)頁(yè)開(kāi)發(fā)者特別設(shè)計(jì)的語(yǔ)言,是將 jsp 屬
44、性范圍提升為 業(yè)務(wù)邏輯到 jsp 頁(yè)面通信的標(biāo)準(zhǔn)方法。 但是,請(qǐng)注意的雖然 el 是 jsp 技術(shù)的一個(gè)關(guān) 鍵方面,但是它不是一個(gè)通用的編程語(yǔ)言。 相反,它只是一個(gè)簡(jiǎn)單的數(shù)據(jù)訪(fǎng)問(wèn)語(yǔ)言, 這種特性使得它可以方便地訪(fǎng)問(wèn)(和操作)的應(yīng)用程序數(shù)據(jù),而無(wú)需使用 scriptlet 或請(qǐng)求時(shí)間表達(dá)式的值。 在 jsp 1.x 中,網(wǎng)頁(yè)作者必須使用表達(dá)式來(lái)存取系統(tǒng)的值,如下面 的例子: sometags:atag attribute=“ 或自定義的 javabeans 組件的值: 表達(dá)式語(yǔ)言允許網(wǎng)頁(yè)頁(yè)面作者使用一個(gè)簡(jiǎn)化的語(yǔ)法訪(fǎng)問(wèn)對(duì)象。 例如,要訪(fǎng)問(wèn)一個(gè)簡(jiǎn) 單的變量,你可以使用類(lèi)似以下語(yǔ)句: 而如果要訪(fǎng)問(wèn)嵌套
45、的 javabeans 屬性,您可以使用類(lèi)似以下的語(yǔ)句: 如果您使用 javascript 開(kāi)發(fā),你會(huì)感到非常熟悉,因?yàn)?el 采用 javascript 語(yǔ)法存取結(jié) 構(gòu)化數(shù)據(jù)。 必要時(shí)可以使用過(guò)濾器必要時(shí)可以使用過(guò)濾器 :過(guò)濾器是 jsp 一項(xiàng)新的技術(shù)特點(diǎn)。 如果你曾經(jīng)遇到一個(gè)這 樣的情況,你有多個(gè) servlets 或 jsp 頁(yè)面需要壓縮它們的內(nèi)容,你可以寫(xiě)一個(gè)壓縮 過(guò)濾器并將其應(yīng)用到所有的資源上。例如, 在 java blueprints 中,通過(guò)過(guò)濾器來(lái) 提供 signon。 使用可移植的安全模型使用可移植的安全模型 :大多數(shù)應(yīng)用服務(wù)器具有服務(wù)器開(kāi)發(fā)商或者供應(yīng)商特定的安 全功能,這樣
46、就將開(kāi)發(fā)者局限在某臺(tái)特定的服務(wù)器。為了最大限度地提高企業(yè)應(yīng)用程 序的可移植性,可以使用一臺(tái)可移植性的 web 應(yīng)用程安全模型 。但是最后歸根結(jié)底, 這歸結(jié)成權(quán)衡問(wèn)題 。 例如,如果你有一組很早就定義好的用戶(hù),您可以使用基于表 單的登錄或基本身份驗(yàn)證來(lái)管理他們。 但是如果你需要?jiǎng)討B(tài)地創(chuàng)建用戶(hù),你需要使 用特定容器的 api 來(lái)創(chuàng)建和管理用戶(hù)。雖然特定容器的 api 是無(wú)法移植的,但是使用 適配器設(shè)計(jì)模式就可以克服這一點(diǎn)。 使用數(shù)據(jù)庫(kù)存儲(chǔ)持久信息使用數(shù)據(jù)庫(kù)存儲(chǔ)持久信息:你可以通過(guò) httpsession 對(duì)象來(lái)實(shí)現(xiàn)會(huì)話(huà),httpsession 提供了一個(gè)簡(jiǎn)單方便的機(jī)制來(lái)存儲(chǔ)用戶(hù)信息,識(shí)別用戶(hù) co
47、okie。 使用會(huì)話(huà)存儲(chǔ)臨時(shí) 信息,即便這些信息丟失了,你也不用擔(dān)心。(當(dāng)會(huì)話(huà)過(guò)期或客戶(hù)端變更瀏覽器時(shí), 會(huì)話(huà)數(shù)據(jù)就會(huì)丟失。)如果你希望存儲(chǔ)更加持久會(huì)話(huà)信息,使用一個(gè)數(shù)據(jù)庫(kù),在瀏覽 器之間共享數(shù)據(jù)庫(kù)中的持久信息更加安全更具有可移植性。 利用緩存內(nèi)容利用緩存內(nèi)容 :你永遠(yuǎn)不應(yīng)該動(dòng)態(tài)的重新生成請(qǐng)求之間不會(huì)更改的內(nèi)容。 您可以 在客戶(hù)端,代理端或服務(wù)器端緩存內(nèi)容。 使用連接池使用連接池 :我建議使用 jstl 進(jìn)行數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)存取。 但是如果你希望編寫(xiě)自己 的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)存取行為,我建議你使用連接池,這樣可以有效地使所有請(qǐng)求共享數(shù)據(jù) 庫(kù)連接。 但是應(yīng)該注意的是,j2ee 服務(wù)器在后臺(tái)提供了這項(xiàng)功能。
48、通過(guò)緩存數(shù)據(jù)庫(kù)查詢(xún)結(jié)果通過(guò)緩存數(shù)據(jù)庫(kù)查詢(xún)結(jié)果 :如果你希望通過(guò)緩存數(shù)據(jù)庫(kù)請(qǐng)求結(jié)果,不要使用 jdbc 的 resultset 對(duì)象作為緩存的對(duì)象。 這是因?yàn)樗c一個(gè)鏈接緊密相連,而這個(gè)鏈接 和連接池沖突。 將數(shù)據(jù) resultset 復(fù)制到一個(gè)特定應(yīng)用的 bean,如 vector ,或 jdbc 的 rowsets 。 如果必要可以采用新的如果必要可以采用新的 jspjsp xmlxml 語(yǔ)法語(yǔ)法。 這確實(shí)取決于你所希望你的應(yīng)用程序如何遵 守 xml 語(yǔ)法。然而這需要權(quán)衡的分析,雖然這使得 jsp 功能更加強(qiáng)大,但是對(duì)開(kāi)發(fā)者 卻不友好,不利于開(kāi)發(fā)者開(kāi)發(fā)使用。 閱讀并應(yīng)用閱讀并應(yīng)用 enter
49、priseenterprise blueprintsblueprints:sun 公司的 enterprise blueprints 向開(kāi)發(fā)商 提供指南,模式和樣本應(yīng)用程序 ,如 adventure builder 和 pet store。 總的來(lái)說(shuō), j2ee blueprints 中提供最佳實(shí)踐的方法和一組設(shè)計(jì)模式,事實(shí)證明這些實(shí)踐和模式 具有可移植性,健壯性,可擴(kuò)展性的。這些都為企業(yè)在開(kāi)發(fā) java 應(yīng)用程序經(jīng)常出現(xiàn) 的問(wèn)題提供了解決方案。 servletsservlets 和和 jspjsp 頁(yè)面的集成頁(yè)面的集成 jsp 規(guī)范提出了使用 jsp 頁(yè)面構(gòu)建 web 應(yīng)用程序的兩種解決方案
50、:模式 1 和模式 2 兩 種體系結(jié)構(gòu)。 這兩個(gè)模型的區(qū)別是在不同的位置進(jìn)行數(shù)據(jù)處理。 在模型 1 的體系結(jié)構(gòu) 中,如圖 2 所示,jsp 頁(yè)面是負(fù)責(zé)處理請(qǐng)求并將響應(yīng)發(fā)送回給客戶(hù)端。 圖 2:jsp 模式 1 體系架構(gòu) 模型 2 體系架構(gòu),如圖 3 所示,集成使用了 servlet 和 jsp 頁(yè)面。 在這種模式下, jsp 頁(yè)面是用于表示層,servlets 負(fù)責(zé)處理各種業(yè)務(wù)。servlet 作為一個(gè)控制器,負(fù)責(zé)處 理請(qǐng)求和創(chuàng)建 jsp 頁(yè)面說(shuō)需要的任何 bean。該控制器還負(fù)責(zé)決定將請(qǐng)求發(fā)送到哪個(gè) jsp 頁(yè)面。 jsp 頁(yè)面檢索 servlet 創(chuàng)建的對(duì)象并提取動(dòng)態(tài)內(nèi)容插入到模板中。 圖
51、 3:jsp 模型 2 架構(gòu) 這種模式促進(jìn)了模型視圖控制器(mvc)設(shè)計(jì)模式的使用。 請(qǐng)注意的是,已經(jīng)存在的幾 個(gè)框架,能夠?qū)崿F(xiàn)這種有用的設(shè)計(jì)模式,并且真正的把內(nèi)容和表示獨(dú)立分開(kāi)。apache struts 是 mvc 的形式化框架。 這個(gè)框架非常適于開(kāi)發(fā)復(fù)雜的應(yīng)用程序,在這些復(fù)雜的應(yīng) 用程序中單個(gè)請(qǐng)求或提交表單會(huì)產(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐廳前臺(tái)服務(wù)總結(jié)
- 酷咖食品科技產(chǎn)業(yè)園建設(shè)項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)拿地
- 10月石家莊房地產(chǎn)市場(chǎng)調(diào)研總結(jié)報(bào)告
- 2025-2030全球環(huán)錠細(xì)紗機(jī)單錠檢測(cè)系統(tǒng)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)有機(jī)天然肥料行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)風(fēng)冷單螺桿式冷水機(jī)組行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)航空航天設(shè)備零部件用超聲波清洗機(jī)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)網(wǎng)紅孵化服務(wù)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球電池護(hù)照(DDP)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)冷加工噴丸機(jī)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 蘇教版四年級(jí)數(shù)學(xué)下冊(cè)第三單元第二課時(shí)《常見(jiàn)的數(shù)量關(guān)系》課件
- 浙江省臺(tái)州市2021-2022學(xué)年高一上學(xué)期期末質(zhì)量評(píng)估政治試題 含解析
- 寧夏“8·19”較大爆燃事故調(diào)查報(bào)告
- 中國(guó)高血壓防治指南(2024年修訂版)解讀課件
- 2024年浙江省中考科學(xué)試卷
- 初三科目綜合模擬卷
- 2024年全國(guó)高考新課標(biāo)卷物理真題(含答案)
- 勞動(dòng)合同薪酬與績(jī)效約定書(shū)
- 消除醫(yī)療歧視管理制度
- 足療店?duì)I銷(xiāo)策劃方案
- 學(xué)校安全一崗雙責(zé)
評(píng)論
0/150
提交評(píng)論