【正文】
are now used with every aspect of Java development, including web applications. When Sun engineers developed the JSP tag extension classes, they designed them to work with JavaBeans. The dynamic data for a page can be passed as a JavaBean, and the JSP tag can then use the bean’s properties to customize the output. For more on JavaBeans, we highly remend The Awesome Power of JavaBeans, by Lawrence H. Rodrigues [Rodrigues]. The definitive source for JavaBean information is the JavaBean Specification [Sun, JBS]. Model 2: The release of the Servlet/JSP Specification described Model 2 as an architecture that uses servlets and JSP pages together in the same application. The term Model 2 disappeared from later releases, but it remains in popular use among Java web developers. Under Model 2, servlets handle the data access and navigational flow, while JSP pages handle the presentation. Model 2 lets Java engineers and HTML developers each work on their own part of the application. A change in one part of a Model 2 application does not mandate a change to another part of the application. HTML developers can often change the look and feel of an application without changing how the backoffice servlets work. The Struts framework is based on the Model 2 architecture. It provides a controller servlet to handle the navigational flow and special classes to help with the data access. A substantial custom tag library is bundled with the framework to make Struts easy to use with JSP pages. Summary: In this article, we introduced Struts as an application framework. We examined the technology behind HTTP, the Common Gateway Interface, Java servlets, JSPs, and JavaBeans. We also looked at the Model 2 application architecture to see how it is used to bine servlets and JSPs in the same application. Now that you have had a taste of what it is like to develop a web application with Struts, in chapter 2 we dig deeper into the theory and practice behind the Struts architecture. 外文翻譯 JSP 應(yīng)用框架 brian wright、 michael freedman 什么是應(yīng)用框架: 框架( framework)是可重用的,半成品的應(yīng)用程序,可以用來產(chǎn)生專門的定制程序。構(gòu)架在這些公共基礎(chǔ)上的應(yīng)用框架可以為開發(fā)人員提供可以為他們的產(chǎn)品提供可重用服務(wù)的基礎(chǔ)架構(gòu)。在其它的資料里面, 我們也介紹了一些可以和 Struts 一起使用的框架。 Struts 以及本文中涉及的組件卻不是這樣。這些技術(shù)并不是專門針對(duì) Struts,而是所有 Java web 應(yīng)用都可以使用的。外交協(xié)議主要設(shè)計(jì)來 避免誤解,以及防止談判破裂。 很多服務(wù)器應(yīng)用程序使用 HTTP 之外的其他協(xié)議。這稱之為狀態(tài)協(xié)議。這也是 Inter 可以擴(kuò)展到很多計(jì)算機(jī)的原因。你甚至可以通過標(biāo)準(zhǔn)的程序如Tel 來手動(dòng)傳遞一個(gè) HTTP 請(qǐng)求。 HTTP 頭向服務(wù)器提供額外的信息。響應(yīng)的第一行稱為狀態(tài)行,包含了 HTTP 協(xié)議的版本,數(shù)字型狀態(tài),以及狀態(tài)的簡(jiǎn)短描述。 因?yàn)楹?jiǎn)單和效率,無狀態(tài)協(xié)議不適合 于需要跟蹤用戶狀態(tài)的動(dòng)態(tài)應(yīng)用。這兩種方法都不是無縫的,是用哪一個(gè)都意味著在開發(fā)時(shí)都要進(jìn)行額外的工作。 HTML 頁面通常包含一些到其他頁面的超文本連接,也可以顯示其他一些內(nèi)容比如圖像和視頻等等。這些文件可以隨時(shí)改變,但通過瀏覽器請(qǐng)求時(shí),卻不能自動(dòng)改變。其他程序可以看到web server 傳遞過來的請(qǐng)求,并創(chuàng)建一個(gè)定制的響應(yīng)。與 HTTP 一樣, CGI 是靈活和易于實(shí)現(xiàn)的,并且已經(jīng)有大量現(xiàn)成的 CGI 程序。 Java servlet: Sun 公司的 Java Servlet 平臺(tái)直接解決了 CGI 程序的兩個(gè)主要缺點(diǎn): 首先, servlet 比常規(guī) CGI 程序提供更好的性能和資源利用。但,和常規(guī) web server 不同, servlet API 是專門設(shè)計(jì)來幫助 Java 開發(fā)人員創(chuàng)建動(dòng)態(tài)應(yīng)用的。 Servlet容器連接到 Web服務(wù)器。一旦容器實(shí)例化了一個(gè) servlet,它就僅為每個(gè)新的請(qǐng)求創(chuàng)建一個(gè)新的線程。獲得這些資源要耗費(fèi)數(shù)秒時(shí)間,這比大多數(shù)沖浪者愿意等的時(shí)間要長(zhǎng)些。為了產(chǎn)生響應(yīng),開發(fā)人員不得不使用大量的 println 語句來生成 HTML。也有一些庫有助于你產(chǎn)生 HTML。單獨(dú)使用 servlet 的做法鼓勵(lì)混合標(biāo)記和業(yè)務(wù)邏輯,很難區(qū)分團(tuán)隊(duì)人員的專業(yè)工作。腳本元素是一些標(biāo)記,封裝了可以被 JSP識(shí)別的邏輯。在運(yùn)行時(shí),容器也能檢測(cè) JSP 文件和相應(yīng)的類的最后更新時(shí)間。你可以在 servlet 做的,也可以在 JSP 中做。JavaBean 通過提供符合一致性設(shè)計(jì)模 式的公共訪問方法將內(nèi)部字段暴露稱為屬性。 2.創(chuàng)建一個(gè)標(biāo)簽庫描述文件 (TLD)來將你的新建的類,映射到一個(gè)標(biāo)簽名稱。關(guān)于更多細(xì)節(jié),請(qǐng)參考 JSP 標(biāo)簽庫技術(shù)頁面。返回值通常是 void,因?yàn)?mutator 僅僅改變屬性的值,而不返回它們。 Accessor 通常以小寫的 get 為前綴,后跟屬性名。同樣,訪問器 accessor 也經(jīng)常稱為獲取器 getter。返回值肯定是邏輯值,不管是 boolean 還是 Boolean。如果一個(gè)組件在一個(gè) JavaBean 中發(fā)現(xiàn)一個(gè)這樣的方法,它就知道這個(gè)方法可以用來訪問或者改變 JavaBean 的屬性。 Model 2: Servlet/JSP 規(guī)范的 版描述了在一個(gè)應(yīng)用中使用 servlet 和 JSP 的架構(gòu)。Model 2 應(yīng)用的一部分發(fā)生改變并不強(qiáng)求其他部分也跟著發(fā)生改變。隨框架也提供一個(gè)豐富的標(biāo)簽庫,以使 Struts 易于和 JSP一起使用?,F(xiàn)在你已經(jīng)有關(guān)于Strtus Web 應(yīng)用程序模樣的初步印象,以后我們將更深入的討論 Strtuts 框架的理論和具體 。并 介紹了一些基本知識(shí),關(guān)于 HTTP, CGI, Java servlet, JSP,以及 JavaBean。 Struts框架是基于 Model 2 的架構(gòu)。根據(jù) Model 2, servlet 處理數(shù)據(jù)存取和導(dǎo)航流, JSP 處理表現(xiàn)。 Sun的工程師在開發(fā) JSP 標(biāo)簽的擴(kuò)展類時(shí),也被設(shè)計(jì)來可以和 JavaBean 一起工作。 On 屬性的邏輯訪問器的方法體可能是: public boolean isOn() 在使用 JavaBean 時(shí),規(guī)范的方法體簽名扮演了極為重要的角色。不使用小寫的 get,邏輯屬性的訪問器可以使用小寫的 is 前綴,后跟屬性名。返回值必須匹配相應(yīng)的修改器方法的參數(shù)。 Mutator 也可根據(jù)其前綴稱為設(shè)置器 setters 。 Mutator 通常以小寫的 set 前綴開始,后跟屬性名。通過在 JSP 頁面的頂部放置下面的語句: %tagliburi=/tags/ prefix=app %來告訴 JSP 頁面你將使用你自己的標(biāo)簽庫。 我們必須做的如下: 1.編寫一個(gè)類,通過實(shí)現(xiàn) doStart() 或者 doEnd() 方法來實(shí)現(xiàn) 或者 接 口 。 定義 JavaBean 是一種 JAVA 語言寫成的可重用組件。項(xiàng)目經(jīng)理現(xiàn)在可以 將表現(xiàn)層分派給 HTML 開發(fā)人員,將業(yè)務(wù)邏輯工作分派給 JAVA 開發(fā)人員。 為了識(shí)別 JSP 頁面,文件需要保存為擴(kuò)展名 .jsp。為創(chuàng)建 JSP 頁面 , 開發(fā)者按創(chuàng)建 HTML 頁面類似的方式創(chuàng)建頁面,使用相同的 HTML 語法。同時(shí),大多數(shù)項(xiàng)目經(jīng)理更喜歡將團(tuán)隊(duì)分成不同的小組。 (PAnother line of HTML./P)。學(xué)習(xí) servlet 編程,我們推薦 Java Servlets by Example, 作者 Alan R. Williamson[Williamson]。 一旦 servlet 被創(chuàng)建,使用它處理額外的請(qǐng)求僅帶來很小的額外開銷。當(dāng)符合所注冊(cè)樣式的請(qǐng)求到達(dá), web server將請(qǐng)求傳遞給容器,容器則調(diào)用響應(yīng)的 servlet。Servlet 訪問 HTTP 特定服務(wù)的 API,但它仍然是一個(gè)運(yùn)行于程序之中的 Java 對(duì)象,并可以利用所有的 Java 資產(chǎn)。 Servlet 看起來好像是一個(gè)微小的 web server。這是一個(gè)相對(duì)昂貴的處理方法,對(duì)大容量站點(diǎn)來說,每分鐘有數(shù)千個(gè)請(qǐng)求,有可能使站點(diǎn)癱瘓。 CGI 程序運(yùn)行,并將輸出返回給 Web server, web server 則將輸出響應(yīng)給瀏覽器。 公共網(wǎng)關(guān)接口 (CGI): 第一個(gè)普遍用來產(chǎn)生動(dòng)態(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)容處理得很好,但處理動(dòng)態(tài)內(nèi)容時(shí)則需要額外的幫助手段了。它主要是使用請(qǐng)求來定位文件資源,并在響應(yīng)中返回此資源。 cookie 是一種特殊的信息包,存儲(chǔ)于用戶的計(jì)算機(jī)中。如上所述, HTTP 并不在請(qǐng)求間保持狀態(tài)信息。 7 種請(qǐng)求方法中, GET 和 POST 是用得最多的。 HTTP 請(qǐng)求的第一行包含方法,其后是請(qǐng)求的來源地址和 HTTP 版本。 HTTP 請(qǐng)求看