【正文】
現(xiàn)在你已經(jīng)有關(guān)于 Strtus Web應(yīng)用程序模樣的初步印象,以后我們將更深入的討論 Strtuts 框架的理論和具體實踐沈陽航空航天大學(xué)畢業(yè)設(shè)計(論文)外文翻譯 — — 譯文 8 。并介紹了一些基本知識,關(guān)于 HTTP, CGI, Java servlet, JSP,以及 JavaBean。隨框架也提供一個豐富的標(biāo)簽庫,以使 Struts 易于和 JSP一起使用。 Struts 框架是基于 Model 2的架xxx大學(xué)畢業(yè)設(shè)計(論文)外文翻譯 —— 譯文 7 構(gòu)。 Model 2應(yīng)用的一部分發(fā)生改變并不強(qiáng)求其他部分也跟著發(fā)生改變。根據(jù) Model 2, servlet處理數(shù)據(jù)存取和導(dǎo)航流, JSP處理表現(xiàn)。 Model 2: Servlet/JSP 規(guī)范的 版描述了在一個應(yīng)用中使用 servlet 和 JSP 的架構(gòu)。 Sun 的工程師在開發(fā) JSP標(biāo)簽的擴(kuò)展類時,也被設(shè)計來可以和 JavaBean一起工作。如果一個組件在一個 JavaBean 中發(fā)現(xiàn)一個這樣的方法,它就知道這個方法可以用來訪問或者改變 JavaBean 的屬性。 On屬性的邏輯訪問器的方法體可能是: public boolean isOn() 在使用 JavaBean 時,規(guī)范的方法體簽名扮演了極為重要的角色。返回值肯定是邏輯值,不管是 boolean 還是 Boolean。不使用小寫的 get,邏輯屬性的訪問器可以使用小寫的 is 前綴,后跟屬性名。同樣,訪問器 accessor 也經(jīng)常稱為獲取器 getter。返回值必須匹配相應(yīng)的修改器方法的參數(shù)。 Accessor 通常以小寫的 get 為前綴,后跟屬性名。 Mutator也可根據(jù)其前綴稱為設(shè)置器 setters 。返回值通常是 void,因為 mutator 僅僅改變屬性的值,而不返回它們。 xxx大學(xué)畢業(yè)設(shè)計(論文)外文翻譯 —— 譯文 6 Mutator 通常以小寫的 set 前綴開始,后跟屬性名。關(guān)于更多細(xì)節(jié),請參考 JSP標(biāo)簽庫技術(shù)頁面。通過在 JSP 頁面的頂部放置下面的語句: %tagliburi=/tags/ prefix=app %來告訴 JSP 頁面你將使用你自己的標(biāo)簽庫。 2.創(chuàng)建一個標(biāo)簽庫描述文件 (TLD)來將你的新建的類,映射到一個標(biāo)簽名稱。 我們必須做的如下: 1 . 編 寫 一 個 類, 通 過 實 現(xiàn) doStart() 或者 doEnd() 方法來實現(xiàn) 或者 。JavaBean通過提供符合一致性設(shè)計模式的公共訪問方法將內(nèi)部字段暴露稱為屬性。 定義 JavaBean 是一種 JAVA 語言寫成的可重用組件。你可以在 servlet做的,也可以在 JSP中做。項目經(jīng)理現(xiàn)在可以將表現(xiàn)層分派給 HTML 開發(fā)人員,將業(yè)務(wù)邏輯工作分派給 JAVA開發(fā)人員。在運(yùn)行時,容器也能檢測 JSP文件和相應(yīng)的類的最后更新時間。 為了識別 JSP頁面,文件需要保存為擴(kuò)展名 .jsp。腳本元素是一些標(biāo)記,封裝了可以被 JSP識別的邏輯。為創(chuàng)建 JSP頁面 , 開發(fā)者按創(chuàng)建 HTML頁面類似的方式創(chuàng)建頁面,使用相同的 HTML 語法。單獨(dú)使用 servlet 的做法鼓勵混合標(biāo)記和業(yè)務(wù)邏輯,很難區(qū)分團(tuán)隊人員的專業(yè)工作。同時,大多數(shù)項目經(jīng)理更喜歡將團(tuán)隊分 成不同的小組。也有一些庫有助于你產(chǎn)生 HTML。 (PAnother line of HTML./P)。為了產(chǎn)生響應(yīng),開發(fā)人員不得不使用大量的 println語句來生成 HTML。學(xué)習(xí) servlet 編程,我們推薦 Java Servlets by Example, 作者 Alan R. Williamson[Williamson]。獲得這些資源要耗費(fèi)數(shù)秒時間,這比大多數(shù)沖浪者愿意等的時間要長些。 一旦 servlet 被創(chuàng)建,使用它處理額外的請求僅帶來很小的額外開銷。一旦容器實例化了一個 servlet,它就僅為每個新的請求創(chuàng)建一個新的線程。當(dāng)符合所注冊樣式的請求到達(dá), web server 將請求傳遞給容器,容器則調(diào)用響應(yīng)的 servlet。 Servlet容器連接到 Web 服務(wù)器。 Servlet訪問 HTTP 特定服務(wù)的 API,但它仍然是一個運(yùn)行于程序之中的 Java 對象,并可以利用所有的 Java 資產(chǎn)。但,和常規(guī)web server 不同, servlet API 是專門設(shè)計來幫助 Java 開發(fā)人員創(chuàng)建動態(tài)應(yīng)用的。Servlet看起來好像是一個微小的 web server。 Java servlet: Sun公司的 Java Servlet平臺直接解決了 CGI程序的兩個主要缺點: 首先, servlet 比常規(guī) CGI 程序提供更好的性能和資源利用。這是一個相對昂貴的處理方法,對大容量站點來說,每分鐘有數(shù)千個請求,有可能使站點癱瘓。與 HTTP一樣, CGI是靈活 和易于實現(xiàn)的,并且已經(jīng)有大量現(xiàn)成的 CGI程序。 CGI程序運(yùn)行,并將輸出返回給 Web server, web server 則將輸出響應(yīng)給瀏覽器。其他程序可以看到 web server傳遞過來的請求,并創(chuàng)建一個定制的響應(yīng)。 公共網(wǎng)關(guān)接口 (CGI): 第一個普遍用來產(chǎn)生動態(tài)內(nèi)容的標(biāo)準(zhǔn)是通用網(wǎng)關(guān)接口( Common Gateway Interface (CGI))。這些文件可以隨時改變,但通過瀏覽器請求時,卻不能自動改變。標(biāo)準(zhǔn) web服務(wù)器處理靜態(tài)內(nèi)容處理得很好,但處理動態(tài)內(nèi)容時則需要額外的幫助手段了。 HTML頁面通常包含一些到其 他頁面的超文本連接,也可以顯示其他一些內(nèi)容比如圖像和視頻等等。它主要是使用請求來定位文件資源,并在響應(yīng)中返回此資源。這兩種方法都不是無縫的,是用哪一個都意味著在開發(fā)時都要進(jìn)行額外的工作。 cookie是一種特殊的信息包,xxx大學(xué)畢業(yè)設(shè)計(論文)外文翻譯 —— 譯文 3 存儲于用戶的計算機(jī)中。 因為簡單和效率,無狀態(tài)協(xié)議不適合于需要跟蹤用戶狀態(tài)的動態(tài)應(yīng)用。如上所述, HTTP 并不在請求間保持狀態(tài)信息。響應(yīng)的第一行稱為狀態(tài)行,包含了 HTTP協(xié)議的版本,數(shù)字型狀態(tài),以及狀態(tài)的簡短描述。 7 種請求方法中, GET和 POST是用得最多的。 HTTP 頭向服務(wù)器提供額外的信息。 HTTP 請求的第一行包含方法,其后是請求的來源地址和 HTTP 版本。你甚至可以通過標(biāo)準(zhǔn)的程序如 Tel來手動傳遞一個 HTTP請求。 HTTP 請求看起來就像一個平常的文本文檔。這也是 Inter 可以擴(kuò)展到很多計算機(jī)的原因。 HTTP Server 可以接受來自于各種客戶的各種請求,并提供各種響應(yīng),即使是這個響應(yīng)僅僅是說 No。這稱之為狀態(tài)協(xié)議。應(yīng)用服務(wù)器可以清楚的知道是誰連接上來,而且何時中斷連接。 很多服務(wù)器應(yīng)用程序使用 HTTP之外的其他協(xié)議。這個協(xié)議定義數(shù)據(jù)是如何傳輸,以及它們到達(dá)后如何進(jìn)行解碼。外交協(xié)議主要設(shè)計來避免誤解,以及防止談判破裂。作為一個 Struts開發(fā)者,你并不需要知曉所有的相關(guān)知識,但是這些基本技術(shù)的工作原理可能有助于你針對棘手問題設(shè)計出創(chuàng)造性的方案。這些技術(shù)并不是專門針對xxx大學(xué)畢業(yè)設(shè)計(論文)外文翻譯 —— 譯文 2 Struts,而是所有 Java web 應(yīng)用都可以使用的。對于你的工具,如果你可以用來開發(fā) Java, 你就可以用它來開發(fā) Struts。 Struts以及本文中涉及的組件卻不是這樣。與應(yīng)用框架一樣,這些工具也提供了一些半完成的版本,可以用在用戶的定制組件之中。在其它的資料里面,我們也介紹了一些可以和 Struts 一起使用的框架。如果你自己構(gòu)建它,在你完成時你就會理解它,但是在你被融入之前又將花費(fèi)多長時間呢?如果要購買,你必須得克服學(xué)習(xí)曲線,同樣,在你可以用它進(jìn)行工作之前又得花多長時間?這里沒有所謂正確答案,但許多觀察者都會同意,象 Struts 這樣的框架能提供比從頭開始開發(fā)更顯著的投資回報,特別是對于大型項目來說。構(gòu)架在這些公共基礎(chǔ)上的應(yīng)用框架可以為開發(fā)人員提供可以為他們的產(chǎn)品提供可重用服務(wù)的基礎(chǔ)架構(gòu)。它們運(yùn)行在相似的機(jī)器上,期望從相同的設(shè)備輸入信息,輸出到相同的顯示設(shè)備,并且將數(shù)據(jù)存儲到相同的硬盤設(shè)備。 they do not retrieve them. The mutator for a simple property takes only one parameter in its signature, which can be of any type. Mutators are often nicknamed setters after their prefix. The mutator method signature for a weight property of the type Double would be: public void setWeight(Double weight) A similar design pattern is used to create the accessor method signature. Accessor methods are always prefixed with the lowercase token get, followed by the property name. The first character in the property name must be uppercase. The return value will match the method parameter in the corresponding mutator. Accessors for simple properties cannot accept parameters in their method signature. Not surprisingly, accessors are often called getters. The accessor method signature for our weight property is: public Double getWeight() If the accessor returns a logical value, there is a variant pattern. Instead of using the lowercase token get, a logical property can use the prefix is, followed by the property name. The first character in the property name must be uppercase. The return value will always 8 be a logical value— either boolean or Boolean. Logical accessors cannot accept parameters in their method signature. The boolean accessor method signature for an on property would be public boolean isOn() The canonical method signatures play an important role when working with Java Beans. Other ponents