資源描述:
《servlet最佳實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、44第三章Servlet最佳實(shí)踐JasonHunter自1996年引入以來(lái),Servlet已經(jīng)占據(jù)了服務(wù)器端Java領(lǐng)地,并且成為Java介入Web的一種標(biāo)準(zhǔn)方法。作為一種基本技術(shù),Java開發(fā)人員以此為基礎(chǔ)來(lái)構(gòu)建Web應(yīng)用以及(更進(jìn)一步的)Web服務(wù)。這一章將討論基于Servlet的開發(fā)和部署的最佳實(shí)踐。有效使用Servlet首先來(lái)介紹Servlet框架??蚣埽ㄈ?,ApacheStrut)越來(lái)越普及,這是因?yàn)橥ㄟ^(guò)提供一種“骨架”(skeleton,應(yīng)用可在此基礎(chǔ)上構(gòu)建),框架能夠提高程序員的效率。在第一節(jié)中,我們將分析Servlet框架提供了什么并對(duì)最流行的框架作一個(gè)簡(jiǎn)要概述;然后,將
2、討論使用預(yù)編碼字符可以如何優(yōu)化Servlet的性能。接下來(lái),我們將處理加載配置文件這一棘手的問(wèn)題,并提供一些代碼從而使這個(gè)任務(wù)更容易完成;其后,我將提供一些有關(guān)何時(shí)應(yīng)當(dāng)使用(以及何時(shí)不應(yīng)當(dāng)使用)HttpSession和SingleThreadModel特性的技巧。本章結(jié)尾部分,我將解釋如何可靠地控制緩存,以提高用戶的體驗(yàn)。然后將解決一個(gè)常見問(wèn)題:“如何將文件下載到客戶,從而讓客戶看到一個(gè)‘保存為’(SaveAs)彈出對(duì)話框?”,你將看到,答案就在于設(shè)置合適的HTTP首部。Servlet最佳實(shí)踐45選擇合適的Servlet框架編寫Web應(yīng)用時(shí),應(yīng)當(dāng)記住Servlet是一種功能強(qiáng)大的技術(shù)。這
3、一點(diǎn)很容易被遺忘,因?yàn)樽畛鮏ervletAPI即為服務(wù)器端JavaWeb編程的全部。至于ServletAPI不包括的某些內(nèi)容,就必須由我們自行構(gòu)建。這有點(diǎn)類似于西部片中的情景,當(dāng)時(shí)情況相當(dāng)惡劣,真正的程序員需要自己動(dòng)手來(lái)編寫Servlet,而且有關(guān)規(guī)范尚未編寫。僅僅有out.println()就令我們頗感欣慰了。時(shí)光荏苒,斗轉(zhuǎn)星移。正如西部原野上出現(xiàn)了大批牛羊,在這一領(lǐng)域中也涌現(xiàn)了許多新的內(nèi)容,我們看到,大量基于Servlet的技術(shù)被設(shè)計(jì)出來(lái),從而使Web應(yīng)用開發(fā)更加容易而且更為有效。發(fā)生變革的第一個(gè)領(lǐng)域?yàn)楸硎緦?。較之于以前應(yīng)用很廣的out.println(),諸如JavaServerP
4、ages(JSP)、WebMacro和Velocity等技術(shù)則提供了輸出更為豐富的方法。與以往相比,利用這些技術(shù)使得快速地開發(fā)、部署和維護(hù)動(dòng)態(tài)Web內(nèi)容更加容易。有關(guān)這些技術(shù)以及其他模板技術(shù)的全面討論,請(qǐng)參見我所著的《JavaServletProgramming》第二版(O'Reilly出版)。今天,我們發(fā)現(xiàn)在表示層之下出現(xiàn)了一個(gè)產(chǎn)生變革的新領(lǐng)域,即框架層(如圖3-1所示)。這些新的框架提供了一個(gè)可靠的支架,基于這個(gè)支架可以構(gòu)建新的Web應(yīng)用,從而由快速構(gòu)建頁(yè)面轉(zhuǎn)移到快速構(gòu)建完整的應(yīng)用。框架采納了專家們最優(yōu)秀的設(shè)計(jì),使你能夠重用這些設(shè)計(jì)。好的框架有助于改善應(yīng)用的模塊性和可維護(hù)性??蚣苓€將
5、多種單獨(dú)的技術(shù)集合在一個(gè)捆綁的包中,并提供了基于這些技術(shù)構(gòu)建的組件以解決常見的任務(wù)。如果你選擇了合適的Servlet框架,不但可以大大地提高你的工作量,并且可以利用他人的工作。因此,我建議你考慮使用一個(gè)框架,而且我在這一節(jié)中還將提供一些關(guān)于選擇合適的框架的有用技巧。選擇框架的技巧選擇一個(gè)Servlet框架時(shí),考慮其特性表相當(dāng)重要。下面列出了框架提供的一些特性。并非所有框架都支持以下特性,另外這一簡(jiǎn)短的列表也并非詳盡的(注1)。注1:這實(shí)際上是一個(gè)正在進(jìn)行的研究項(xiàng)目,其目標(biāo)是跟蹤Servlet框架特性,并且在各個(gè)框架上實(shí)現(xiàn)同樣的演示W(wǎng)eb應(yīng)用。更多的信息請(qǐng)參見http;//www.wafe
6、rproject.org。46第三章Servlet框架JSPWebMacroVelocityMVC類Servlets等等安全性表單驗(yàn)證數(shù)據(jù)庫(kù)錯(cuò)誤處理集成圖3-1:Servlet、模板技術(shù)和框架與模板語(yǔ)言的集成有些框架集成了一個(gè)特定模板語(yǔ)言,另外一些框架則有一個(gè)“可插拔”的模型以支持多個(gè)模板,不過(guò)它們通常都針對(duì)一種模板語(yǔ)言加以優(yōu)化。如果你偏好某種特定的模板語(yǔ)言,請(qǐng)確保所選框架能夠很好地提供相應(yīng)的支持。支持(理想情況下則可增強(qiáng))設(shè)計(jì)人員/開發(fā)人員的分離Web應(yīng)用開發(fā)的一個(gè)通常目標(biāo)是將開發(fā)人員的責(zé)任從設(shè)計(jì)人員的責(zé)任中有效地分離出來(lái)。對(duì)于這一目標(biāo),選擇適當(dāng)?shù)哪0逭Z(yǔ)言可以提供幫助,但是選擇合適的框
7、架則會(huì)有更大的影響。有一些框架可以支持這種分離,還有一些甚至可能增強(qiáng)。安全集成默認(rèn)的Servlet訪問(wèn)控制和安全模型可以用于簡(jiǎn)單任務(wù),但未能針對(duì)更為高級(jí)的需求做相應(yīng)擴(kuò)展。有些框架提供了另外的安全模型,而且許多框架還支持“可插拔”的安全模型。如果你希望獲得更為高級(jí)的安全控制,那么選擇合適的框架將有所幫助。表單驗(yàn)證框架通常提供了驗(yàn)證表單數(shù)據(jù)的工具,例如,在Servlet看到數(shù)據(jù)之前允許框架對(duì)參數(shù)進(jìn)行全面檢查。有些框架使得我們可以很容易地