【正文】
er separation between the static HTML and the dynamic content. Now, this discussion is not to say that you should stop using servlets and use only JSP instead. By no means. Almost all projects will use both. For some requests in your project, you will use servlets. For others, you will use JSP. For still others, you will bine them with the MVC architecture . You want the appropriate tool for the job, and servlets, by themselves, do not plete your toolkit. of JSP Over Competing Technologies A number of years ago, Marty was invited to attend a small 20person industry roundtable discussion on software technology. Sitting in the seat next to Marty was James Gosling, inventor of the Java programming language. Sitting several seats away was a highlevel manager from a very large software pany in Redmond, Washington. During the discussion, the moderator brought up the subject of Jini, which at that time was a new Java technology. The moderator asked the manager what he thought of it, and the manager responded that it was too early to tell, but that it seemed to be an excellent idea. He went on to say that they would keep an eye on it, and if it seemed to be catching on, they would follow his pany39。 小結(jié): 在本文中,我們介紹了 Struts 應(yīng)用框架。 HTML 開發(fā)人員可以改變程序的外觀和感覺,并不需要改變后端 servlet 的工作方式。在其后的規(guī)范中, Model 2 這個(gè)叫法消失了,但它已經(jīng)在 Java web 開發(fā)人員中非常通用了。 Sun引入 JavaBean是為了用于 GUI 組件,但它們已經(jīng)用在Java 開發(fā)的各個(gè)方面,包括 Web 應(yīng)用。邏輯訪問器在其方法體中不能接受參數(shù)。 屬性 weight 的訪問器方法體可能是: public Double getWeight() 如果訪問器返回一個(gè)邏輯值,這種情況下有個(gè)變體模式。屬性名的第一個(gè)字母必須大寫。簡單屬性的 mutator在其方法體中可能只有一個(gè)參數(shù), 該參數(shù)可以是各種類型。 JavaBean 設(shè)計(jì)模式提供兩種類型的方式來訪問 bean 的內(nèi)部狀態(tài):訪問器( accessor) 用來讀 JavaBean的狀態(tài),修改器( mutator )用來改變 JavaBean 的狀態(tài)。 3.在你的 Web 應(yīng)用描述符 ()中定義你的 taglib 元素。眾所周知,屬性名稱也符合這種模式,其他 JAVA 類可以通過自省機(jī)制發(fā)現(xiàn)和操作這些 JavaBean 屬性。 JavaBean: JavaBean 是一種 Java 類,它遵從一定的設(shè)計(jì)模式,使它們易于和其他開發(fā)工具和組件一起使用 。如果,JSP 文件自上次編譯以來被修改了,容器將重新翻譯和編譯 JSP 文件。你可以在 JSP 頁畢業(yè)設(shè)計(jì)外文翻譯 8 面中很容易的識(shí)別出腳本元素,他們被封裝在一對 % 和 %標(biāo)記中。 為解決這個(gè)問 題, Sun提出了一個(gè)將腳本和模板技術(shù)結(jié)合到一個(gè)組件中的服務(wù)器頁面技術(shù)( JavaServer Pages)。隨著應(yīng)用越來越復(fù)雜, Java 開發(fā)人員將不再扮演 HTML 頁面設(shè)計(jì)的角色。比如這樣的代碼: (POne line of HTML./P)。 Servlet 的另一個(gè)好處是,它是多線程的, servlet 開發(fā)人員必須特別注意確保它們的servlet 是線程安全的。 Java 線程可比使用 CGI 程序的服務(wù)器處理開銷小多了。每 servlet 都可以聲明它可以處理何種樣式的 URL。 Servlet 本身是要編譯成字節(jié)碼的 Java 類,就像其他 Java 對象一樣。其次,一次編寫,隨處運(yùn)行的 JAVA 特性意味著 servlet 在有 JVM 的操作系統(tǒng)間是輕便的可移動(dòng)的。 CGI 的主要缺點(diǎn)是它必須為每個(gè)請求運(yùn)行一個(gè)程序。當(dāng) web 服務(wù)器接收到一個(gè)對 CGI 程序的請求時(shí),它便運(yùn)行這個(gè)程序并向其提供它請求里面所包含的信息。相反,動(dòng)態(tài)內(nèi)容是臨時(shí)產(chǎn)生的,典型地,它是針對瀏覽器的個(gè)別請求的響應(yīng)。用戶點(diǎn)擊連接將產(chǎn)生另一個(gè)請求,就開始一個(gè)新的處理過程。對其本身來說,標(biāo)準(zhǔn)的 HTTP web 服務(wù)器并不傳輸動(dòng)態(tài)內(nèi)容。 Cookies 和 URL 重寫是兩個(gè)在請求間跟蹤用戶狀態(tài)的方式。狀態(tài)行后,服務(wù)器將返回一個(gè) HTTP 響應(yīng)頭,類似于 HTTP 請求頭。可以包括瀏覽器的種類和版本,可接受的文檔類型,瀏覽器的 cookies 等等。當(dāng) HTTP 響應(yīng)返回時(shí),它也是一個(gè)開發(fā)者可以直接閱讀的平面文本。 HTTP 成為通用標(biāo)準(zhǔn)的原因是其簡單性。 相反, HTTP 是一個(gè)無狀態(tài)協(xié)議。他們在計(jì)算機(jī)之間維護(hù)一個(gè)持久性的連接。同樣,當(dāng)計(jì)算機(jī)間需要對話,它們也遵循一個(gè)正式的協(xié)議。開發(fā)者使用 Struts 之類的框架是為了隱藏在諸如 HTTP, CGI,以及 JSP 之類技術(shù)后面的繁瑣的細(xì)節(jié)。你可以在很多環(huán)境中來開發(fā) Struts: Visual Age for Java, JBuilder, Eclipse, Emacs, 甚至使用 Textpad。這些包括 Lucene 搜索引擎, Scaffold 工具包, Struts驗(yàn)證器,以及 Tiles 標(biāo)簽庫。 框架向開發(fā)人員提供一系列具有以下特征的骨架組件: 畢業(yè)設(shè)計(jì)外文翻譯 5 1.已經(jīng)知道它們在其它程序上工作得很好; 2.它們隨時(shí)可以在下一個(gè)項(xiàng)目中使用; 3.它們可以被組織的其它團(tuán)隊(duì)使用; 對于框架是典型的構(gòu)建還是購買命題。象人一樣,軟件應(yīng)用的相似性比不同點(diǎn)要多。在參考該表時(shí),要注意,由 JSP 頁面生成的servlet 使 用 _jspService 方法( GET 和 POST 請求都調(diào)用該函數(shù)),不是 doGet 或 doPost方法。 Servlet 在編譯后,載入到服務(wù)器的內(nèi)容中,初始化并執(zhí)行。 您應(yīng)該用 SCRIPT 標(biāo)簽,使用客戶端 JavaScript 創(chuàng)建在鼠標(biāo)下會(huì)更改的圖像,這不會(huì)由于服務(wù)器使用 JSP 而改變。如果瀏覽器支持 Java 2 平臺(tái),您可以使用正常的 APPLET(或 Java插件)標(biāo)簽,即使在服務(wù)器上使用了非 Java 技術(shù)也須如此。 當(dāng)我們的客戶在瀏覽器中使用 “ View 所有這些問題都基于瀏覽器對服務(wù)器端的過程在有所了解的假定之上。 Web 應(yīng)用安全設(shè)置也同樣如此。對于 JSP 替代技術(shù)的爭論幾乎只是集中在技術(shù)特性上,而可移植性、標(biāo)準(zhǔn)化和集成性也十分重要。據(jù)我們的判斷,這樣做是錯(cuò)誤的。許多人都曾指出過 JSP 中能夠改進(jìn)的功能。因此, JavaScript 不是一項(xiàng)競爭技術(shù),它是一項(xiàng)補(bǔ)充技術(shù)。 與 JavaScript 相比 JavaScript 和 Java 編程語言完全是兩碼事,前者一般用于在客戶端動(dòng)態(tài)生成 HTML,在瀏覽器 載入文檔時(shí)構(gòu)建網(wǎng)頁的部分內(nèi)容。 ( 3)一些任務(wù)用 Servlet 完成比用 JSP 來完成要好。這是否表示您只可以學(xué)習(xí) JSP,將 Servlet 丟到一邊呢?當(dāng)然不是!由于以下 4 種原因, JSP 開發(fā)人員需要了解 Servlet: ( 1) JSP 頁面會(huì)轉(zhuǎn)換成 Servlet。 與純 Servlet 相比 原則上, JSP 并沒有提供 Servlet 不能完成的功能。然而,當(dāng)前版本的ColdFusion 滿足 J2EE 服務(wù)器的環(huán)境,允許開發(fā)者容易的混合使用 ColdFusion 和Servlet/JSP 代碼。相對于這個(gè)版本 ,JSP 在動(dòng)態(tài)代碼方面擁有明顯的優(yōu)勢。但有些應(yīng)用,這種差異卻非常重要。 JSP 的優(yōu)勢體現(xiàn)在兩個(gè)方面。其他這些技術(shù)中 ,有一些也很不錯(cuò) ,在某些情況下也的確是合情合理的選擇 .然而 ,在其他情形中 ,JSP 明顯要更好一些。 ColdFusion畢業(yè)設(shè)計(jì)外文翻譯 2 多年前就已經(jīng)這樣做了。隔幾個(gè)位置 ,是來自華盛頓一家大型軟件公司的高級(jí)經(jīng)理。幾乎所有的項(xiàng)目都會(huì)同時(shí)用到這兩種技術(shù)。 Web 開發(fā)人員可以將經(jīng)理集中在表示層( presentation layer)上 。即使對那些對 JSP 一無所知的 HTML 工具,我們也可以使用,因?yàn)樗鼈儠?huì)忽略 JSP 標(biāo)簽( JSP tags)。 JSP 中 HTML的編寫與維護(hù)更為簡單。然而,這種底層的等同性并不意味著 servler 和 JSP 頁面對于所有的情況都等同適用。因而,從根本上, JSP 頁面能夠執(zhí)行的任何任務(wù)都可以用 servler 來完成。 和單獨(dú)使用 servler 相比, JSP 提供下述好處: 能夠使用標(biāo)準(zhǔn)的網(wǎng)站開發(fā)工具。 Java 程序員可以致力于動(dòng)態(tài)代碼。 在此,這個(gè)討論并不是讓您停止使用 servlets,只使用 JSP。 二、 JSP 相對于競爭技術(shù)的優(yōu)勢 許多年前, Marty 受到邀請 ,參加一個(gè)有關(guān)軟件技術(shù)的小型 (20 個(gè)人 )研討會(huì) .做在Marty旁邊的人是 James Gosling Java 編程語言的發(fā)明者。 Java 社團(tuán)沒有發(fā)明這一思想 將頁面設(shè)計(jì)成由靜態(tài) HTML 和用特殊標(biāo)簽標(biāo)記的動(dòng)態(tài)代碼混合組成 .。 因此 ,問題變成 :為什么使用 JSP,而不使 用其他技術(shù)呢 ?我們的第一反應(yīng)是我們不是在爭論所有的人應(yīng)該做什么。 是與 servlets 和 JSP 直接競爭的技術(shù)。對于某些應(yīng)用,這種差異沒有什么影響。此外 ,許多開發(fā)者依舊使用最初版本的 ASP。應(yīng)用 JSP,您可以使用 Java 編寫 “ 真正的代碼 ” ,不必依賴于特定的服務(wù)器產(chǎn)品。 JSP 的第二項(xiàng)優(yōu)勢是,和 PHP相比, JSP 擁有極為廣泛的工具和服務(wù)器提供商的支持。另外,通過 將表示與內(nèi)容分離,可以為不同的人分配不同的任務(wù):網(wǎng)頁設(shè)計(jì)人員使用熟悉的工具構(gòu)建 HTML,要么為 Servlet 程序員留出空間插入動(dòng)態(tài)內(nèi)容,要么通過 XML標(biāo)簽間接調(diào)用動(dòng)態(tài)內(nèi)容。哪種類型的 Java 代碼呢?當(dāng)然是 Servlet 代碼!如果不了解 Servlet 編程,那么就無法編寫這種代碼。 ( 4)有些任務(wù)更適合于組合使用 Servlet 和 JSP 來完成,而非單獨(dú)使用 Servlet 或 JSP。實(shí)際上, JSP 甚至能夠用來動(dòng)態(tài)生成發(fā)送到客戶端的JavaScript。 與 WebMacro 和 Velocity 相比 JSP 決非完美。 但是,一些組織已經(jīng)開發(fā)出了基于 Java 的替代技術(shù),試圖彌補(bǔ)這些不足。在選擇 一項(xiàng)技術(shù)時(shí),需要權(quán)衡許多方面的因素:標(biāo)準(zhǔn)化、可移植性、集成性、行業(yè)支持和技術(shù)特性。我們可以建立過濾器作用到任意樹木的 Servlet 和 JSP 頁面上,但不能用于非標(biāo)準(zhǔn)資源。 三、 對 JSP 的誤解 忘記 JSP 技術(shù)是服務(wù)器端技術(shù) 下面是 Marty收到的一些典型問題(大部分問題不止一次的出現(xiàn))。 我如何將圖像放到 JSP 頁面中?我不知道讀取圖像文件應(yīng)該使用哪些 JavaI/O 命令。我應(yīng)該怎么做? Source” (查看源代碼)時(shí),如何阻止他們看到 JSP 標(biāo)簽? ? 如果要將使用 Swing組件的 applet 放到網(wǎng)頁中,重要的是瀏覽器的 Java 版本,和服務(wù)器的 Java 版本無關(guān)。 因此,如同對待靜態(tài)HTML頁面一樣,只需確保 JSP 輸出的 HTML與瀏覽器兼容。 JSP 頁面需要轉(zhuǎn)換成 servlet。 最常被誤解的項(xiàng)已經(jīng)突出標(biāo)示出來。 4. 什么是應(yīng)用框架 : 框架( framework)是可重用的,半成品的應(yīng)用程序,可以用來產(chǎn)生專門的定制程序。構(gòu)架在這些公共基礎(chǔ)上的應(yīng)用框架可以為開發(fā)人員提供可以為他們的產(chǎn)品提供可重用服務(wù)的基礎(chǔ)架構(gòu)。在其它的資料里面,我們也介紹了一些可以和 Struts 一起使用的框架。 Struts 以及本文中涉及的組件卻不是這樣。這些技術(shù)并不是專門針對Struts,而是所有 Java web 應(yīng)用都可以使用的。外交協(xié)議主要設(shè)計(jì)來避免誤解,以及防止談判破裂。 很多服務(wù)器應(yīng)用程序使用 HTTP 之外的其他協(xié)議。這稱之為狀態(tài)協(xié)議。這也是 Inter 可以擴(kuò)