成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Servlet定義的概述

開發(fā) 后端
Servlet的定義是什么呢?本文將向你介紹Servlet定義的功能、Servlet生命周期等等基本的概念,希望通過了解Servlet的定義使你能夠掌握這一技術(shù)。

Servlet是使用Java Servlet應(yīng)用程序設(shè)計(jì)接口及相關(guān)類和方法的Java程序。它在Web服務(wù)器上或應(yīng)用服務(wù)器上運(yùn)行并擴(kuò)展了該服務(wù)器的能力。Java Servlet對于Web服務(wù)器就好像Java Applet對于Web瀏覽器。Applet裝入Web瀏覽器并在Web瀏覽器內(nèi)執(zhí)行,而Servlet則是裝入Web服務(wù)器并在Web服務(wù)器內(nèi)執(zhí)行。 Java Servlet API 定義了Servlet和服務(wù)器之間的一個(gè)標(biāo)準(zhǔn)接口,這使得Servlet具有跨服務(wù)器平臺的特性。

Servlet通過創(chuàng)建一個(gè)框架擴(kuò)展服務(wù)器的能力,采用請求-響應(yīng)模式提供Web服務(wù)。當(dāng)客戶機(jī)發(fā)送請求至服務(wù)器時(shí),服務(wù)器將請求信息發(fā)送給Servlet,Servlet生成響應(yīng)內(nèi)容并將其傳給Server,然后再由Server將響應(yīng)返回給客戶端。

Servlet的功能

Servlet的功能涉及范圍很廣。例如,Servlet可完成如下功能:

創(chuàng)建并返回一個(gè)包含基于客戶請求性質(zhì)的動態(tài)內(nèi)容的完整的 HTML頁面。

創(chuàng)建可嵌入到現(xiàn)有 HTML 頁面中的一部分 HTML 頁面(HTML 片段)。與其他服務(wù)器資源(文件、數(shù)據(jù)庫、Applet、Java應(yīng)用程序等)進(jìn)行通信。

用多個(gè)客戶機(jī)處理連接,接受多個(gè)客戶機(jī)的輸入,并將結(jié)果廣播到多個(gè)客戶機(jī)上。例如,Servlet 可以是多參與者的游戲服務(wù)器。

允許在單連接方式下傳送數(shù)據(jù)的情況下,在瀏覽器上打開服務(wù)器至Applet的新連接,并將該連接保持在打開狀態(tài)。允許客戶機(jī)和服務(wù)器簡單、高效地執(zhí)行會話的情況下,Applet也可以啟動客戶瀏覽器和服務(wù)器之間的連接。可以通過定制協(xié)議或標(biāo)準(zhǔn)(如 IIOP)進(jìn)行通信。

對特殊的處理采用 MIME 類型過濾數(shù)據(jù),例如圖像轉(zhuǎn)換和服務(wù)器端(包括SSI)。

將定制的處理提供給所有服務(wù)器的標(biāo)準(zhǔn)例行程序。例如,Servlet 可以修改如何認(rèn)證用戶。

Java Servlet與現(xiàn)有網(wǎng)絡(luò)技術(shù)的差別

那么Java Servlet與一些現(xiàn)有的網(wǎng)絡(luò)技術(shù)有什么具體的差別呢?

Java Servlet與Applet之間的差別 從基本上來說,Servlet與 Applet 是截然相反的。Servlet可以被視為服務(wù)器方面的 Applet。Servlet在網(wǎng)絡(luò)服務(wù)器內(nèi)運(yùn)行而Applet在網(wǎng)絡(luò)瀏覽器內(nèi)運(yùn)行。瀏覽器提交一個(gè)請求執(zhí)行Servlet的命令;而由于瀏覽器可直接命令A(yù)pplet,所以它可以在運(yùn)行時(shí)單機(jī)運(yùn)行。

Java Servlet與CGI之間的差別 與傳統(tǒng)的CGI和許多其他類似CGI的技術(shù)相比,Java Servlet具有更高的效率,更容易使用,功能更強(qiáng)大,具有更好的可移植性,更節(jié)省投資。其中最大的區(qū)別是在性能方面。

在傳統(tǒng)的CGI中,每個(gè)請求都要啟動一個(gè)新的進(jìn)程,如果CGI程序本身的執(zhí)行時(shí)間較短,啟動進(jìn)程所需要的開銷很可能反而超過實(shí)際執(zhí)行時(shí)間。而使用 Servlet時(shí),服務(wù)器上僅有一個(gè)Java虛擬機(jī)在運(yùn)行,只有當(dāng)Servlet被調(diào)用時(shí),它才被加載,且直到Servlet更改時(shí),它才會被再次加載。在傳統(tǒng)CGI中,如果有N個(gè)并發(fā)的對同一CGI程序的請求,則該CGI程序的代碼在內(nèi)存中重復(fù)裝載了N次;而對于Servlet,處理請求的是N個(gè)線程,只需要一份Servlet類代碼。在性能優(yōu)化方面,Servlet也比CGI有著更多的選擇,比如緩沖以前的計(jì)算結(jié)果,保持?jǐn)?shù)據(jù)庫連接的活動,等等。

通過使用Servlet API,開發(fā)人員不必?fù)?dān)心服務(wù)器的內(nèi)部運(yùn)作方式。表格資料、服務(wù)器頭、cookies等皆可通過Servlet處理。另外,因?yàn)镾ervlet是用 Java寫的,能將其從一個(gè)服務(wù)器移到另一個(gè)服務(wù)器以供發(fā)布,同時(shí)不必?fù)?dān)心操作系統(tǒng)或服務(wù)器的類型。這一優(yōu)點(diǎn)充分體現(xiàn)了Java"一次編寫,隨處運(yùn)行"的優(yōu)越特性。

Servlet定義的生命周期

Servlet定義的生命周期講述了一個(gè)Servlet如何被加載、初始化,以及它怎樣接收請求、響應(yīng)請求、提供服務(wù)。

在代碼中,Servlet生命周期由接口javax.servlet.Servlet定義。所有的Java Servlet 必須直接或間接地實(shí)現(xiàn)javax.servlet.Servlet接口,這樣才能在Servlet Engine上運(yùn)行。

Servlet Engine提供network Service,響應(yīng)MIME request,運(yùn)行Servlet Container。 javax.servlet.Servlet接口定義了一些方法,在Servlet 的生命周期中,這些方法會在特定時(shí)間按照一定的順序被調(diào)用。

Servlet定義之如何被加載(Load)、被實(shí)例化(Instantiated)

Servlet Engine 負(fù)責(zé)實(shí)例化和加載Servlet,這個(gè)過程可以在Servlet Engine 加載時(shí)執(zhí)行,可以在Servlet 響應(yīng)請求時(shí)執(zhí)行,也可以在兩者之間的任何時(shí)候執(zhí)行。

Servlet如何被初始化(Initialized)

Servlet Engine 加載好Servlet 后,必須要初始化它。初始化時(shí)Servlet 可以從數(shù)據(jù)庫里讀取初始數(shù)據(jù),建立JDBC Connection,或者建立對其他有價(jià)值的資源的引用。

在初始化階段,Init( )方法被調(diào)用。這個(gè)方法在javax.servlet.Serlet接口中定義。Init( )方法以一個(gè)Servlet 配置文件(ServletConfig 型)為參數(shù)。Servlet configuration 對象由Servlet Engine 實(shí)現(xiàn),可以讓Servlet 從中讀取一些name-value對的參數(shù)值。ServletConfig對象還可以讓Servlet接受一個(gè)Servlet Context對象。

Servlet 如何處理請求

Servlet 被初始化以后,就處于能響應(yīng)請求的就緒狀態(tài)。每個(gè)對Servlet 的請求由一個(gè)Servlet Request 對象代表。Servlet 給客戶端的響應(yīng)由一個(gè)Servlet Response對象代表。當(dāng)客戶端有一個(gè)請求時(shí),Servlet Engine 將ServletRequest 和ServletResponse對象都轉(zhuǎn)發(fā)給Servlet,這兩個(gè)對象以參數(shù)的形式傳給Service方法。這個(gè)方法由 javax.servlet.Servlet定義并由具體的Servlet 實(shí)現(xiàn)。

Servlet還可以實(shí)現(xiàn) ServletRequest 和ServletResponse接口。ServletRequest接口可以讓Servlet 獲取客戶端請求中的參數(shù),如form data、request信息、協(xié)議類型,等等。Servlet 可以從ServletInputStream流中讀取request 數(shù)據(jù)。ServletResponse接口允許Servlet設(shè)置response headers和status codes。實(shí)現(xiàn)這個(gè)接口可以使Servlet能訪問ServletOutputStream流用來向客戶端返回?cái)?shù)據(jù)。

Servlet如何被釋放

Servlet Engine 沒有必要在Servlet定義的生命周期的每一段時(shí)間內(nèi)都保持Servlet的狀態(tài)。Servlet Engine可以隨時(shí)隨意使用或釋放Servlet。因此,你不能依賴Servlet class或其成員存儲信息。當(dāng)Servlet Engine判斷一個(gè)Servlet應(yīng)當(dāng)被釋放時(shí)(比如說Engine準(zhǔn)備Shut down 或需要回收資源),Engine必須讓Servlet 能釋放其正在使用的任何資源,并保存持續(xù)性的狀態(tài)信息。這些可以通過調(diào)用Servlet的destroy方法實(shí)現(xiàn)。 在Servlet Engine 釋放一個(gè)Servlet 以前,必須讓其完成當(dāng)前實(shí)例的service方法或是等到timeout(如果Engine定義了timeout)。當(dāng)Engine釋放一個(gè) Servlet以后,Engine將不能再將請求轉(zhuǎn)發(fā)給它,Engine必須徹底釋放該Servlet并將其標(biāo)明為可回收的(給garbage collection)。

在Servlet API中最重要的是Servlet interface。所有的Servlets執(zhí)行這個(gè)interface的方式有很多種:或者是直接的,或者通過extending這個(gè)class執(zhí)行它,如 HttpServlet。這個(gè)Servlet interface 提供并安排Servlet與客戶端聯(lián)系的方法。Servlet 編寫者可以在他們開發(fā)Servlet程序時(shí)提供更多一些或所有這樣的方法。

當(dāng)一個(gè)Servlet接收來自客戶端的調(diào)用請求時(shí),它接收兩個(gè)對象:一個(gè)是ServletRequest,另外一個(gè)是ServletResponse。這個(gè)ServletRequest class 概括從客戶端到服務(wù)器之間的聯(lián)系,而 ServletResponse class 概括從Servlet返回客戶端的聯(lián)系。

ServletRequest interface 可以獲取到這樣一些信息,如由客戶端傳送的參數(shù)名稱,客戶端正在使用的協(xié)議,產(chǎn)生請求并且接收請求的服務(wù)器遠(yuǎn)端主機(jī)名。它也提供獲取數(shù)據(jù)流的 Servlet、ServletInputStream,這些數(shù)據(jù)是客戶端引用中使用HTTP POST和PUT方法遞交的。一個(gè)ServletRequest的子類可以讓Servlet獲取更多的協(xié)議特性數(shù)據(jù)。

例如,HttpServletRequest 包含獲取HTTP-specific頭部信息的方法。ServletResponse interface 給出相應(yīng)客戶端的Servlet方法。它允許Servlet設(shè)置內(nèi)容長度和回應(yīng)的MIME類型,并且提供輸出流ServletOutputStream,通過編寫者可以發(fā)回相應(yīng)數(shù)據(jù)。ServletResponse子類可以給出更多protocol-specific容量的信息。例如,HttpServletResponse 包含允許Servlet操作HTTP-specific頭部信息的方法。

上面有關(guān)classes 和 interfaces的描述構(gòu)成了一個(gè)基本的Servlet框架。HTTP Servlets有一些附加的可以提供session-tracking capabilities的方法。Servlet編寫者可以用這些API在有他人操作時(shí)維護(hù)Servlet與客戶端之間的狀態(tài)。

以上就是Servlet定義相關(guān)的一些簡介,希望對你有所幫助。

【編輯推薦】

  1. 什么是Servlet以及常用Servlet API有哪些
  2. JSP Servlet實(shí)例之自動跳轉(zhuǎn)到出錯頁
  3. 優(yōu)化JSP Servlet應(yīng)用程序八點(diǎn)雜談
  4. JSP開發(fā)中Servlet之導(dǎo)入事件驅(qū)動技術(shù)
  5. 什么是JSP以及和Servlet的比較
    責(zé)任編輯:仲衡 來源: JSP中文網(wǎng)
    相關(guān)推薦

    2009-07-06 09:23:51

    Servlet定義

    2009-07-06 13:48:53

    Servlet監(jiān)聽器

    2009-06-12 18:39:37

    Django簡介Django模型定義

    2009-08-03 18:26:18

    C#定義接口成員

    2010-01-07 17:41:19

    JSON定義法

    2010-07-26 17:20:53

    SQL Server

    2009-07-08 09:35:53

    Java ServleServlet 3.0

    2009-07-08 10:12:04

    Servlet Con

    2009-07-07 10:16:42

    Servlet引擎

    2009-07-09 11:21:40

    Servlet注冊

    2009-07-20 14:14:03

    PowerDesign

    2009-07-07 15:01:58

    Apache Serv

    2009-07-08 11:37:32

    Servlet API

    2009-07-07 09:51:49

    Servlet實(shí)例

    2009-07-06 15:34:56

    JSP和Servlet

    2009-07-09 15:30:53

    Servlet容器會話跟蹤

    2009-07-08 16:19:41

    Servlet ConServlet Con

    2009-07-08 15:01:00

    Servlet的作用

    2009-07-07 16:23:05

    Servlet容器

    2009-07-08 14:01:47

    Servlet容器
    點(diǎn)贊
    收藏

    51CTO技術(shù)棧公眾號

    主站蜘蛛池模板: 久久蜜桃av | 国产一级特黄视频 | 二区久久| 欧美日韩一二三区 | 亚洲一区二区三区四区五区午夜 | 日韩成人在线观看 | 黑人粗黑大躁护士 | 成人三级av | 中文欧美日韩 | 一区二区视频 | 亚洲电影一区二区三区 | 国产一区二区三区亚洲 | 亚洲乱码国产乱码精品精98午夜 | 超碰在线97国产 | 另类视频在线 | 色综合欧美 | 精品国产欧美一区二区三区不卡 | 国产成人精品一区 | 午夜精品一区二区三区在线 | 在线中文字幕国产 | 亚洲成人一区二区三区 | 日本三级做a全过程在线观看 | 一区二区三区四区av | 亚洲一av | 一区二区三区视频在线免费观看 | 国产精品视频综合 | 亚洲国产精品99久久久久久久久 | 曰批视频在线观看 | 黄视频欧美 | 成人一区在线观看 | 午夜视频在线免费观看 | 日韩精品一区在线观看 | 久久久久国产一级毛片 | 国产精品久久久久久久久久久久 | 成人免费视频网站在线看 | 亚洲综合在线视频 | 亚洲伊人久久综合 | 特级特黄特色的免费大片 | 99精品网 | 日本视频免费观看 | 91p在线观看 |