【正文】
rmation pages at online stores are specific to particular user requests. You don39。s Job Servlets are Java programs that run on Web or application servers, acting as a middle layer between requests ing from Web browsers or other HTTP clients and databases or applications on the HTTP server. Their job is to perform the following tasks, as illustrated in Figure 11. Figure 11 1. Read the explicit data sent by the client. The end user normally enters this data in an HTML form on a Web page. However, the data could also e from an applet or a custom HTTP client program. 2. Read the implicit HTTP request data sent by the browser. Figure 11 shows a single arrow going from the client to the Web server (the layer where servlets and JSP execute), but there are really two varieties of data: the explicit data that the end user enters in a form and the 7 behindthescenes HTTP information. Both varieties are critical. The HTTP information includes cookies, information about media types and pression schemes the browser understands, and so on. 3. Generate the results. This process may require talking to a database, executing an RMI or EJB call, invoking a Web service, or puting the response directly. Your real data may be in a relational database. Fine. But your database probably doesn39。但我們的立場是:服務(wù)器端 Java 本非一項(xiàng)新的、為經(jīng)證實(shí)的技術(shù) 。 當(dāng)然,僅僅是流行并不能證明技術(shù)的優(yōu)越性。存在幾種低廉的插件,通過應(yīng)用這些插件, Microsoft IIS 和 Zeus 6 也同樣支持 servlet 和 jsp 技術(shù),它們運(yùn)行在 Windows, Unix/Linus,MacOS,VMS,和 IBM大型機(jī) 操作系統(tǒng)之上。當(dāng)然,數(shù)組邊界的檢查以及其他內(nèi)存包含特性是java 編程語言的核心部分。 Servelt 不存在這些問題。例如,在 C和 C++中,可以分配一 個(gè) 100 個(gè)元素的數(shù)組,然后向第 999 個(gè) “ 元素“ 寫入數(shù)據(jù) —— 實(shí)際上是程序內(nèi)存的隨機(jī)部分,這完全合法。實(shí)現(xiàn)這項(xiàng)預(yù)防措施的難度可能超出我們的想象,在廣泛應(yīng)用的 CGI 庫中,不斷發(fā)現(xiàn)由這類問題引發(fā)的弱點(diǎn)。 安全 傳統(tǒng) CGI 程序中主要的漏洞來源之一就是, CGI 程序常常由通過的操作系統(tǒng)外殼來執(zhí)行。最后, 如果他們的項(xiàng)目變得更龐大,他們或許將他從 Linux 轉(zhuǎn)移到運(yùn)行 IBM WebSphere 的 IBM大型機(jī)上。因此,他們可以切換到 BEA WebLogic 或 Oracle9i AS。同樣,他們的 servelt 和 jsp 沒有任何部分需要重寫。如果他們的項(xiàng)目變得更龐大,他們或許希望轉(zhuǎn)移到分布式環(huán)境。項(xiàng)目取得成功之后,他們可以轉(zhuǎn)移到性能更高、管理更容易,但需 要付費(fèi)的服務(wù)器。因此,從美國公司那里購買專用 Web 服務(wù)器會消耗掉項(xiàng)目的大部分前期資金。首先,這兩個(gè)國家都擁有大量訓(xùn)練有素的軟件開發(fā)人員。 Marty 曾在馬尼拉講授過 jsp 和 servlet 培訓(xùn)課程,那兒對 servelt 和 jsp 技術(shù)抱很大的興趣。例如, Marty 記錄了所有通過電子郵件向他發(fā)送問題的讀者的所在國。這與其他 CGI方案形成鮮明的對比,這些 CGI 方案在初期都需要為購買專利軟件包投入大量的資金。 廉價(jià) 對于開發(fā)用的網(wǎng)站、低容量或中等容量網(wǎng)站的部署,有大量免費(fèi)或極為廉價(jià)的 Web服務(wù)器可供選擇。 Oracle9i AS 或者 StrNine WebStar 上運(yùn)行。為 Macromedia JRun 編寫的 servlet,可以不經(jīng)過任何修改地在 Apache Tomcat, Microsoft Inter Information Server, IBM WebSphere 。實(shí)際上都直接或通過插件支持 servlet。 可移植性 Servelt 使用 Java 編程語言,并且遵循標(biāo)準(zhǔn)的 API。多個(gè) servelt 還可以共享數(shù)據(jù),從而易于實(shí)現(xiàn)數(shù)據(jù)庫連接共享和類似的資源共享優(yōu)化。 Servlet 能夠直接于Web 服務(wù)器對話,而常規(guī)的 CGI 程序做不到這一點(diǎn),至少在不使用服務(wù)器專有 API 的情況下是這樣。而在 CGI 中,大部分工作都需要我們資金完成。然而, servelt會一直停留在內(nèi)存中(即使請求處理完畢),因而可以直接存儲客戶請求之間的任意復(fù)雜數(shù)據(jù)。最后,當(dāng) CGI 程序結(jié)束對請求的處理之后,程序結(jié)束。同樣的情況,如果使用 servlet 則啟動(dòng) N 個(gè)線程,單僅僅載入servlet 類的單一副本。而使用 servelt, Java 虛擬機(jī)會一直運(yùn)行,并用輕量級的 Java 線程處理每個(gè)請求,而非重量級的操作系統(tǒng)進(jìn)程。 效率 應(yīng)用傳統(tǒng)的 CGI,針對每個(gè) HTTP 請求都用啟動(dòng)一個(gè)新的進(jìn)程。而且,用于會話啟動(dòng)協(xié)議服務(wù)器的 servlet API 最近已經(jīng)被標(biāo)準(zhǔn)化(參見 servelt 的這種用法尚不流行,在此,我們只論述 HTTP Servlet。 理論上講, servelt 并非只用于處理 HTTP 請求的 Web 服務(wù)器或應(yīng)用服務(wù)器,它同樣可以用于其他類型的服務(wù)器。從客戶端到 Web 層再到數(shù)據(jù)庫(三層結(jié)構(gòu)),要比從 applet 直接到數(shù)據(jù)庫(二層結(jié)構(gòu))更靈活,也更安全,而性能上的損失很少甚至沒有。想象以下,如果一個(gè)搜索引擎網(wǎng)站 完全使用 applet,那么用戶將會看到: “ 正在下載 50TB 的 applet,請等待! ” 。 3 頁面中使用了來自公司數(shù)據(jù)庫或其他數(shù)據(jù)庫斷數(shù)據(jù)源的信息。具體應(yīng)該采用哪種方式要根據(jù)具體情況而定,但后一種方式常常更為方便,因?yàn)樗恍韬唵蔚氐却脩舻恼埱蟆? 如果頁面需要根據(jù)每個(gè)具體的請求做出相應(yīng)的改變,當(dāng)然需要在請求發(fā)生時(shí)構(gòu)建響應(yīng)?;?cookie 值針對具體用戶構(gòu)建頁面的情況尤其普遍。要記住,用戶提交兩種類型的數(shù)據(jù):顯示(即 HTML 表單的數(shù)據(jù))和隱式(即 HTTP 請求的報(bào)頭)。 例如,搜索引擎生成的頁面,以及在線商店的訂單確認(rèn)頁面,都要針對特定的用戶請求而產(chǎn)生。然而,許多情況下靜態(tài)的結(jié)果不能滿足要求,我們需要針對每個(gè)請求生成一個(gè)頁面 。HTTP響應(yīng)數(shù)據(jù)的發(fā)送過程涉及告知瀏覽器或其他客戶程序所返回文檔的類型(如 HTML),設(shè)置 cookie 和緩存參數(shù),以及其他類似的任務(wù)。但是,實(shí)際發(fā)送的數(shù)據(jù)有兩種:文檔本身,以及后臺的 HTTP 信息。 ( 5) 發(fā)送隱式的 HTTP 響應(yīng)數(shù)據(jù)。 這個(gè)文檔可以用各種格式發(fā)送,包括文本( HTML 或 XML),二進(jìn)制( GIF圖),甚至可以式建立在其他底層格式之上的壓縮格式,如 gzip。因此,我們需要 Web 中間層從 HTTP 流中提取輸入數(shù)據(jù),與應(yīng)用程序會話,并將結(jié)果嵌入到文檔中。即使它能夠做到這一點(diǎn),為了安全上的考慮,我們也不希望讓它這么做。實(shí)際的數(shù)據(jù)可能存儲在關(guān)系型數(shù)據(jù)庫中。 ( 3) 生成結(jié)果。兩種數(shù)據(jù)都很重要。 ( 2) 讀取由瀏覽器發(fā)送的隱式請求數(shù)據(jù)。 最終用戶一般在頁面的 HTML 表單中輸入這些數(shù)據(jù)。Servlet 的工作是執(zhí)行西門的任務(wù),如圖 所示 。 畢業(yè)設(shè)計(jì)(論文)