• <blockquote id="opgzb"><th id="opgzb"></th></blockquote>
  • <track id="opgzb"></track>
      <table id="opgzb"></table>
    1. <optgroup id="opgzb"><menu id="opgzb"><pre id="opgzb"></pre></menu></optgroup>

              Servlet 教程


              閱讀(1090.1k) 收藏 (178)

              手冊簡(jiǎn)介

              運行在 Web 服務(wù)器或應用服務(wù)器上的程序。

              手冊說(shuō)明

              201610261617519395


              Servlet是什么?

              Servlet(Server Applet),全稱(chēng)Java Servlet,未有中文譯文。是用Java編寫(xiě)的服務(wù)器端程序。其主要功能在于交互式地瀏覽和修改數據,生成動(dòng)態(tài)Web內容。狹義的Servlet是指Java語(yǔ)言實(shí)現的一個(gè)接口,廣義的Servlet是指任何實(shí)現了這個(gè)Servlet接口的類(lèi),一般情況下,人們將Servlet理解為后者。

              Servlet運行于支持Java的應用服務(wù)器中。從原理上講,Servlet可以響應任何類(lèi)型的請求,但絕大多數情況下Servlet只用來(lái)擴展基于HTTP協(xié)議的Web服務(wù)器。
              最早支持Servlet標準的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服務(wù)器開(kāi)始支持標準的Servlet。


              Servlet由來(lái)

              Servlet 是在服務(wù)器上運行的小程序。這個(gè)詞是在 Java applet的環(huán)境中創(chuàng )造的,Java applet 是一種當作單獨文件跟網(wǎng)頁(yè)一起發(fā)送的小程序,它通常用于在客戶(hù)端運行,結果得到為用戶(hù)進(jìn)行運算或者根據用戶(hù)互作用定位圖形等服務(wù)。
              服務(wù)器上需要一些程序,常常是根據用戶(hù)輸入訪(fǎng)問(wèn)數據庫的程序。這些通常是使用公共網(wǎng)關(guān)接口(Common Gateway Interface,CGI)應用程序完成的。然而,在服務(wù)器上運行 Java,這種程序可使用 Java 編程語(yǔ)言實(shí)現。在通信量大的服務(wù)器上,JavaServlet 的優(yōu)點(diǎn)在于它們的執行速度更快于 CGI 程序。各個(gè)用戶(hù)請求被激活成單個(gè)程序中的一個(gè)線(xiàn)程,而無(wú)需創(chuàng )建單獨的進(jìn)程,這意味著(zhù)服務(wù)器端處理請求的系統開(kāi)銷(xiāo)將明顯降低。
              實(shí)現過(guò)程
              最早支持 Servlet 技術(shù)的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Java 的 Web Server 開(kāi)始支持標準的 Servlet API。Servlet 的主要功能在于交互式地瀏覽和修改數據,生成動(dòng)態(tài) Web 內容。這個(gè)過(guò)程為:
              1) 客戶(hù)端發(fā)送請求至服務(wù)器端;
              2) 服務(wù)器將請求信息發(fā)送至 Servlet;
              3) Servlet 生成響應內容并將其傳給服務(wù)器。響應內容動(dòng)態(tài)生成,通常取決于客戶(hù)端的請求;
              4) 服務(wù)器將響應返回給客戶(hù)端。
              Servlet 看起來(lái)像是通常的 Java 程序。Servlet 導入特定的屬于 Java Servlet API 的包。因為是對象字節碼,可動(dòng)態(tài)地從網(wǎng)絡(luò )加載,可以說(shuō) Servlet 對 Server 就如同 Applet對 Client 一樣,但是,由于 Servlet 運行于 Server 中,它們并不需要一個(gè)圖形用戶(hù)界面。從這個(gè)角度講,Servlet 也被稱(chēng)為 FacelessObject。
              一個(gè) Servlet 就是 Java 編程語(yǔ)言中的一個(gè)類(lèi),它被用來(lái)擴展服務(wù)器的性能,服務(wù)器上駐留著(zhù)可以通過(guò)“請求-響應”編程模型來(lái)訪(fǎng)問(wèn)的應用程序。雖然 Servlet 可以對任何類(lèi)型的請求產(chǎn)生響應,但通常只用來(lái)擴展 Web 服務(wù)器的應用程序。
              目前最新版本為 4.0。


              Servlet命名

              Servlet 的命名可以看出 sun 命名的特點(diǎn),如 Applet 表示小應用程序;Scriptlet = Script + Applet,表示小腳本程序;同樣 Servlet = Service + Applet,表示小服務(wù)程序。
              生命周期編輯
              客戶(hù)端請求該 Servlet;
              加載 Servlet 類(lèi)到內存;
              實(shí)例化并調用init()方法初始化該 Servlet;
              service()(根據請求方法不同調用doGet() 或者 doPost(),此外還有doHead()、doPut()、doTrace()、doDelete()、doOptions());
              destroy()。
              加載和實(shí)例化 Servlet。這項操作一般是動(dòng)態(tài)執行的。然而,Server 通常會(huì )提供一個(gè)管理的選項,用于在 Server 啟動(dòng)時(shí)強制裝載和初始化特定的 Servlet。
              Server 創(chuàng )建一個(gè) Servlet的實(shí)例
              第一個(gè)客戶(hù)端的請求到達 Server
              Server 調用 Servlet 的 init() 方法(可配置為 Server 創(chuàng )建 Servlet 實(shí)例時(shí)調用,在 web.xml 中 <servlet> 標簽下配置 <load-on-startup> 標簽,配置的值為整型,值越小 Servlet 的啟動(dòng)優(yōu)先級越高)
              一個(gè)客戶(hù)端的請求到達 Server
              Server 創(chuàng )建一個(gè)請求對象,處理客戶(hù)端請求
              Server 創(chuàng )建一個(gè)響應對象,響應客戶(hù)端請求
              Server 激活 Servlet 的 service() 方法,傳遞請求和響應對象作為參數
              service() 方法獲得關(guān)于請求對象的信息,處理請求,訪(fǎng)問(wèn)其他資源,獲得需要的信息
              service() 方法使用響應對象的方法,將響應傳回Server,最終到達客戶(hù)端。service()方法可能激活其它方法以處理請求,如 doGet() 或 doPost() 或程序員自己開(kāi)發(fā)的新的方法。
              對于更多的客戶(hù)端請求,Server 創(chuàng )建新的請求和響應對象,仍然激活此 Servlet 的 service() 方法,將這兩個(gè)對象作為參數傳遞給它。如此重復以上的循環(huán),但無(wú)需再次調用 init() 方法。一般 Servlet 只初始化一次(只有一個(gè)對象),當 Server 不再需要 Servlet 時(shí)(一般當 Server 關(guān)閉時(shí)),Server 調用 Servlet 的 destroy() 方法。


              Servlet工作模式

              客戶(hù)端發(fā)送請求至服務(wù)器
              服務(wù)器啟動(dòng)并調用 Servlet,Servlet 根據客戶(hù)端請求生成響應內容并將其傳給服務(wù)器
              服務(wù)器將響應返回客戶(hù)端


              Servlet比較

              與 Applet 的比較
              相似之處:
              * 它們不是獨立的應用程序,沒(méi)有 main() 方法。
              * 它們不是由用戶(hù)或程序員調用,而是由另外一個(gè)應用程序(容器)調用。
              * 它們都有一個(gè)生存周期,包含 init() 和 destroy() 方法。
              不同之處:
              * Applet具有很好的圖形界面(AWT),與瀏覽器一起,在客戶(hù)端運行。
              * Servlet 則沒(méi)有圖形界面,運行在服務(wù)器端。
              與 CGI 比較
              與傳統的 CGI 和許多其他類(lèi)似 CGI 的技術(shù)相比,Java Servlet 具有更高的效率,更容易使用,功能更強大,具有更好的可移植性,更節省投資。在未來(lái)的技術(shù)發(fā)展過(guò)程中,Servlet 有可能徹底取代 CGI。
              在傳統的 CGI中,每個(gè)請求都要啟動(dòng)一個(gè)新的進(jìn)程,如果 CGI 程序本身的執行時(shí)間較短,啟動(dòng)進(jìn)程所需要的開(kāi)銷(xiāo)很可能反而超過(guò)實(shí)際執行時(shí)間。而在 Servlet 中,每個(gè)請求由一個(gè)輕量級的 Java 線(xiàn)程處理(而不是重量級的操作系統進(jìn)程)。
              在傳統 CGI 中,如果有 N 個(gè)并發(fā)的對同一 CGI程序的請求,則該CGI程序的代碼在內存中重復裝載了 N 次;而對于 Servlet,處理請求的是 N 個(gè)線(xiàn)程,只需要一份 Servlet 類(lèi)代碼。在性能優(yōu)化方面,Servlet 也比 CGI 有著(zhù)更多的選擇。
              * 方便
              Servlet 提供了大量的實(shí)用工具例程,例如自動(dòng)地解析和解碼 HTML 表單數據、讀取和設置 HTTP頭、處理Cookie、跟蹤會(huì )話(huà)狀態(tài)等。
              * 功能強大
              在Servlet中,許多使用傳統 CGI 程序很難完成的任務(wù)都可以輕松地完成。例如,Servlet 能夠直接和 Web服務(wù)器交互,而普通的 CGI 程序不能。Servlet 還能夠在各個(gè)程序之間共享數據,使得數據庫連接池之類(lèi)的功能很容易實(shí)現。
              * 可移植性好
              Servlet 用 Java 編寫(xiě),Servlet API具有完善的標準。因此,為 IPlanet Enterprise Server 寫(xiě)的 Servlet 無(wú)需任何實(shí)質(zhì)上的改動(dòng)即可移植到 Apache、MicrosoftIIS 或者 WebStar。幾乎所有的主流服務(wù)器都直接或通過(guò)插件支持 Servlet。
              * 節省投資
              不僅有許多廉價(jià)甚至免費的 Web 服務(wù)器可供個(gè)人或小規模網(wǎng)站使用,而且對于現有的服務(wù)器,如果它不支持 Servlet 的話(huà),要加上這部分功能也往往是免費的(或只需要極少的投資)。


              Servlet與 JSP 比較

              JSP 和 Servlet 的區別到底在應用上有哪些體現,很多人搞不清楚。簡(jiǎn)單的說(shuō),SUN 首先發(fā)展出 Servlet,其功能比較強勁,體系設計也很先進(jìn),只是,它輸出 HTML 語(yǔ)句還是采用了老的 CGI 方式,是一句一句輸出,所以,編寫(xiě)和修改 HTML 非常不方便。
              Java Server Pages(JSP)是一種實(shí)現普通靜態(tài)HTML 和動(dòng)態(tài) HTML 混合編碼的技術(shù),JSP 并沒(méi)有增加任何本質(zhì)上不能用 Servlet 實(shí)現的功能。但是,在 JSP 中編寫(xiě)靜態(tài)HTML 更加方便,不必再用 println語(yǔ) 句來(lái)輸出每一行 HTML 代碼。更重要的是,借助內容和外觀(guān)的分離,頁(yè)面制作中不同性質(zhì)的任務(wù)可以方便地分開(kāi):比如,由頁(yè)面設計者進(jìn)行 HTML設計,同時(shí)留出供 Servlet 程序員插入動(dòng)態(tài)內容的空間。
              后來(lái) SUN 推出了類(lèi)似于 ASP 的鑲嵌型的 JSP,把 JSP TAG 鑲嵌到 HTML 語(yǔ)句中,這樣,就大大簡(jiǎn)化和方便了網(wǎng)頁(yè)的設計和修改。新型的網(wǎng)絡(luò )語(yǔ)言如 ASP,PHP,JSP 都是鑲嵌型的語(yǔ)言。 這是 JSP 和 Servlet 區別的運作原理層面。
              從網(wǎng)絡(luò )三層結構的角度看 JSP 和 Servlet 的區別,一個(gè)網(wǎng)絡(luò )項目最少分三層:data layer(數據層),business layer(業(yè)務(wù)層),presentation layer(表現層)。當然也可以更復雜。Servlet 用來(lái)寫(xiě) business layer 是很強大的,但是對于寫(xiě) presentation layer 就很不方便。JSP 則主要是為了方便寫(xiě) presentation layer 而設計的。當然也可以寫(xiě) business layer。寫(xiě)慣了 ASP,PHP,CGI的朋友,經(jīng)常會(huì )不自覺(jué)的把 presentation layer 和 business layer 混在一起。
              根據 SUN 自己的推薦,JSP中應該僅僅存放與 presentation layer 有關(guān)的東西,也就是說(shuō),只放輸出 HTML 網(wǎng)頁(yè)的部分。而所有的數據計算,數據分析,數據庫聯(lián)結處理,統統是屬于 business layer,應該放在 Java BEANS 中。通過(guò) JSP 調用 Java BEANS,實(shí)現兩層的整合。
              實(shí)際上,微軟前不久推出的 DNA 技術(shù),簡(jiǎn)單說(shuō),就是 ASP+COM/DCOM 技術(shù)。與J SP+BEANS 完全類(lèi)似,所有的 presentation layer 由 ASP 完成,所有的 business layer 由 COM/DCOM 完成。通過(guò)調用,實(shí)現整合。
              為什么要采用這些組件技術(shù)呢?因為單純的 ASP/JSP 語(yǔ)言是非常低效率執行的,如果出現大量用戶(hù)點(diǎn)擊,純 SCRIPT 語(yǔ)言很快就到達了他的功能上限,而組件技術(shù)就能大幅度提高功能上限,加快執行速度。
              另外一方面,純 SCRIPT 語(yǔ)言將 presentation layer 和 business layer 混在一起,造成修改不方便,并且代碼不能重復利用。如果想修改一個(gè)地方,經(jīng)常會(huì )牽涉到十幾頁(yè) code,采用組件技術(shù)就只改組件就可以了。
              綜上所述,Servlet 是一個(gè)早期的不完善的產(chǎn)品,寫(xiě) business layer 很好,寫(xiě) presentation layer 就很臭,并且兩層混雜。
              所以,推出JSP+BEAN,用 JSP 寫(xiě) presentation layer,用 BEAN 寫(xiě) business layer。SUN 自己的意思也是將來(lái)用 JSP 替代 Servlet。這是技術(shù)更新方面 JSP 和 Servlet 的區別。
              可是,這不是說(shuō),學(xué)了 Servlet 沒(méi)用,實(shí)際上,你還是應該從 Servlet 入門(mén),再上 JSP,再上 JSP+BEAN。
              強調的是:學(xué)了JSP,不會(huì )用 Java BEAN 并進(jìn)行整合,等于沒(méi)學(xué)。大家多花點(diǎn)力氣在 JSP+BEAN 上。
              我們可以看到,當 ASP+COM 和 JSP+BEAN 都采用組件技術(shù)后,所有的組件都是先進(jìn)行編譯,并駐留內存,然后快速執行。所以,大家經(jīng)常吹的 Servlet/JSP 先編譯駐內存后執行的速度優(yōu)勢就沒(méi)有了。
              反之,ASP+COM+IIS+NT 緊密整合,應該會(huì )有較大的速度優(yōu)勢呈現。而且,ASP+COM+IIS+NT 開(kāi)發(fā)效率非常高,雖然bug 很多。
              那么,為什么還用 JSP+BEAN?因為 Java 實(shí)在前途遠大。微軟分拆后,操作系統將群雄并起,應用軟件的開(kāi)發(fā)商必定要找一個(gè)通用開(kāi)發(fā)語(yǔ)言進(jìn)行開(kāi)發(fā),Java 一統天下的時(shí)機就到了。如果微軟分拆順利,從中分出的應用軟件公司將成為 Java 的新領(lǐng)導者。目前的 Java 大頭 SUN 和 IBM 都死氣沉沉,令人失望。希望新公司能注入新活力。不過(guò),新公司很有可能和舊 SUN 展開(kāi) Java 標準大戰,雙方各自制定標準,影響 Java 跨平臺。
              簡(jiǎn)單分析了一下 JSP 和 Servlet 的區別和 Java Web 開(kāi)發(fā)方面的發(fā)展。隨著(zhù)機器速度越來(lái)越快,Java 的速度劣勢很快就可以被克服。


              Servlet規范

              1.簡(jiǎn)化開(kāi)發(fā)
              2.便于部署
              3.支持 Web2.0 原則
              為了簡(jiǎn)化開(kāi)發(fā)流程,Servlet 3.0 引入了注解(annotation),這使得 web 部署描述符 web.xml 不再是必須的選擇。
              Pluggability可插入性
              當使用任何第三方的框架,如 Struts,JSF 或 Spring,我們都需要在 web.xml 中添加對應的 Servlet 的入口。這使得 web 描述符笨重而難以維護。Servlet3.0 的新的可插入特性使得 web 應用程序模塊化而易于維護。通過(guò) web fragment 實(shí)現的可插入性減輕了開(kāi)發(fā)人員的負擔,不需要再在 web.xml 中配置很多的 Servlet 入口。
              Asynchronous Processing 異步處理
              另外一個(gè)顯著(zhù)的改變就是 Servlet 3.0 支持異步處理,這對 AJAX 應用程序非常有用。當一個(gè) Servlet 創(chuàng )建一個(gè)線(xiàn)程來(lái)處理某些請求的時(shí)候,如查詢(xún)數據庫或消息連接,這個(gè)線(xiàn)程要等待直到獲得所需要的資源才能夠執行其他的操作。異步處理通過(guò)運行線(xiàn)程執行其他的操作來(lái)避免了這種阻塞。
              Apart from the features mentioned here, several other enhancements have been made to the existing API. The sections towards the end of the article will explore these features one by one in detail.
              除了這些新特性之外, Servlet 3.0對已有的 API 也做了一些改進(jìn),在本文的最后我們會(huì )做介紹。
              Annotations in Servlet Servlet中使用注解
              Servlet 3.0 的一個(gè)主要的改變就是支持注解。使用注解來(lái)定義 Servlet 和 filter 使得我們不用在 web.xml 中定義相應的入口。
              @WebServlet
              @WebServlet 用來(lái)定義 web 應用程序中的一個(gè) Servlet。這個(gè)注解可以應用于繼承了 HttpServlet。這個(gè)注解有多個(gè)屬性,例如 name,urlPattern, initParams,我們可以使用這些屬性來(lái)定義 Servlet 的行為。urlPattern 屬性是必須指定的。


              Servlet常見(jiàn)容器

              Tomcat, Jetty, resin, Oracle Application server, WebLogic Server, Glassfish, Websphere, JBoss 等等。(提供了 Servlet 功能的服務(wù)器,叫做 Servlet 容器。對 web 程序來(lái)說(shuō),Servlet 容器的作用就相當于桌面程序里操作系統的作用,都是提供一些編程基礎設施)


              Servlet附加資料

              Servlet 官網(wǎng):http://www.oracle.com/technetwork/java/index-jsp-135475.html

              Servlet API文檔:http://docs.oracle.com/javaee/6/tutorial/doc/bnafd.html

              Servlet教程:http://www.realmoneymillionaire.com/servlet/




              在線(xiàn)筆記
              App下載
              App下載

              掃描二維碼

              下載編程獅App

              公眾號
              微信公眾號

              編程獅公眾號

              99在线精品国自产拍不卡_国产 日产 欧美最新_久久综合网丁香五月_嘟嘟韩剧网_卫生间开车视频疼痛有声音