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

深入理解Java Servlet與Web容器之間的關(guān)系

原創(chuàng)
開發(fā) 后端
理解Java Servlet與Web容器之間的關(guān)系,有利于理解Java Web應(yīng)用的運(yùn)行方式。進(jìn)而讓Java開發(fā)者能夠設(shè)計(jì)和開發(fā)出更合理的Java Web應(yīng)用程序。

【51CTO特稿】自從計(jì)算機(jī)軟件開發(fā)進(jìn)入網(wǎng)絡(luò)時(shí)代,就開始涉及到通訊問(wèn)題。在客戶/服務(wù)器(也叫C/S應(yīng)用)時(shí)期,每個(gè)軟件都有自己的客戶端和服務(wù)器端軟件。并且客戶端和服務(wù)器端之間的通訊協(xié)議差別也很大。后來(lái)隨著互聯(lián)網(wǎng)的發(fā)展,基于瀏覽器/服務(wù)器的應(yīng)用逐漸成為主流,通訊協(xié)議也統(tǒng)一到HTTP協(xié)議。但是,在HTTP協(xié)議之上,如何處理來(lái)自客戶端的請(qǐng)求信息,以及如何對(duì)請(qǐng)求進(jìn)行回應(yīng),則經(jīng)歷了很長(zhǎng)時(shí)間也沒有統(tǒng)一下來(lái)。目前,對(duì)于這個(gè)問(wèn)題的解決方案主要有兩種,一個(gè)是CGI,另一個(gè)是Servlet。

CGI(Common Gateway Interface),通用網(wǎng)關(guān)接口

通用網(wǎng)關(guān)接口,簡(jiǎn)稱CGI,是一種根據(jù)請(qǐng)求信息動(dòng)態(tài)產(chǎn)生回應(yīng)內(nèi)容的技術(shù)。通過(guò)CGI,Web 服務(wù)器可以將根據(jù)請(qǐng)求不同啟動(dòng)不同的外部程序,并將請(qǐng)求內(nèi)容轉(zhuǎn)發(fā)給該程序,在程序執(zhí)行結(jié)束后,將執(zhí)行結(jié)果作為回應(yīng)返回給客戶端。也就是說(shuō),對(duì)于每個(gè)請(qǐng)求,都要產(chǎn)生一個(gè)新的進(jìn)程進(jìn)行處理。因?yàn)槊總€(gè)進(jìn)程都會(huì)占有很多服務(wù)器的資源和時(shí)間,這就導(dǎo)致服務(wù)器無(wú)法同時(shí)處理很多的并發(fā)請(qǐng)求。另外CGI程序都是與操作系統(tǒng)平臺(tái)相關(guān)的,雖然在互聯(lián)網(wǎng)爆發(fā)的初期,CGI為開發(fā)互聯(lián)網(wǎng)應(yīng)用做出了很大的貢獻(xiàn),但是隨著技術(shù)的發(fā)展,開始逐漸衰落。

Servlet

Servlet最初是在1995年由James Gosling 提出的,因?yàn)槭褂迷摷夹g(shù)需要復(fù)雜的Web服務(wù)器支持,所以當(dāng)時(shí)并沒有得到重視,也就放棄了。后來(lái)隨著Web應(yīng)用復(fù)雜度的提升,并要求提供更高的并發(fā)處理能力,Servlet被重新?lián)炱穑⒃贘ava平臺(tái)上得到實(shí)現(xiàn),現(xiàn)在提起Servlet,指的都是Java Servlet。Java Servlet要求必須運(yùn)行在Web服務(wù)器當(dāng)中,與Web服務(wù)器之間屬于分工和互補(bǔ)關(guān)系。確切的說(shuō),在實(shí)際運(yùn)行的時(shí)候Java Servlet與Web服務(wù)器會(huì)融為一體,如同一個(gè)程序一樣運(yùn)行在同一個(gè)Java虛擬機(jī)(JVM)當(dāng)中。與CGI不同的是,Servlet對(duì)每個(gè)請(qǐng)求都是單獨(dú)啟動(dòng)一個(gè)線程,而不是進(jìn)程。這種處理方式大幅度地降低了系統(tǒng)里的進(jìn)程數(shù)量,提高了系統(tǒng)的并發(fā)處理能力。另外因?yàn)镴ava Servlet是運(yùn)行在虛擬機(jī)之上的,也就解決了跨平臺(tái)問(wèn)題。如果沒有Servlet的出現(xiàn),也就沒有互聯(lián)網(wǎng)的今天。
在Servlet出現(xiàn)之后,隨著使用范圍的擴(kuò)大,人們發(fā)現(xiàn)了它的一個(gè)很大的一個(gè)弊端。那就是為了能夠輸出HTML格式內(nèi)容,需要編寫大量重復(fù)代碼,造成不必要的重復(fù)勞動(dòng)。為了解決這個(gè)問(wèn)題,基于Servlet技術(shù)產(chǎn)生了JavaServet Pages技術(shù),也就是JSP。Servlet和JSP兩者分工協(xié)作,Servlet側(cè)重于解決運(yùn)算和業(yè)務(wù)邏輯問(wèn)題,JSP則側(cè)重于解決展示問(wèn)題。Servlet與JSP一起為Web應(yīng)用開發(fā)帶來(lái)了巨大的貢獻(xiàn),后來(lái)出現(xiàn)的眾多Java Web應(yīng)用開發(fā)框架都是基于這兩種技術(shù)的,更確切的說(shuō),都是基于Servlet技術(shù)的。

Java Servlet與Web容器之間的關(guān)系

Java是一種動(dòng)態(tài)加載和運(yùn)行的語(yǔ)言。也就是說(shuō)當(dāng)應(yīng)用程序持有一個(gè)類的地址(CLASSPATH)和名稱(包名和類名)的情況下,可以在程序運(yùn)行期間任何時(shí)候加載這個(gè)類,并創(chuàng)建和使用該類的對(duì)象。Servlet就是基于這個(gè)機(jī)制與Web容器融合在一起的。目前已知的所有支持Java Servlet的Web容器都是采用Java開發(fā)的。當(dāng)Web容器接收到來(lái)自客戶端的請(qǐng)求信息之后,會(huì)根據(jù)URL中的Web元件地址信息到Servlet隊(duì)列中查找對(duì)應(yīng)的Servlet對(duì)象,如果找到則直接使用,如果沒有找到則加載對(duì)應(yīng)的類,并創(chuàng)建對(duì)象。也就是說(shuō),Servlet對(duì)象是在第一次被使用的時(shí)候才創(chuàng)建的,并且一旦創(chuàng)建就會(huì)被反復(fù)使用,不再創(chuàng)建新的對(duì)象。所有創(chuàng)建出的Servlet對(duì)象會(huì)在Web服務(wù)器停止運(yùn)行的時(shí)候統(tǒng)一進(jìn)行垃圾回收。

為了解決客戶端請(qǐng)求地址與Java Servlet之間對(duì)應(yīng)關(guān)系問(wèn)題,Web容器需要一個(gè)用來(lái)描述這種對(duì)應(yīng)關(guān)系的文件,一般是web.xml文件。如果一個(gè)Web應(yīng)用程序中存在很多個(gè)Servlet,那么web.xml會(huì)變得非常龐大。在Servlet 3.0規(guī)范推出之后,允許在Servlet代碼中使用聲明式語(yǔ)法來(lái)代替web.xml中的描述信息,這才讓web.xml瘦身下來(lái)。下圖是這個(gè)過(guò)程的一個(gè)示意圖。

 

在這個(gè)圖中,我們僅僅是概要的,采用以比較容易理解的方式描述了Web容器與Servlet之間的關(guān)系,以及當(dāng)接受到請(qǐng)求之后的處理流程。在實(shí)際的Web容器中,會(huì)比這要復(fù)雜很多。

【編輯推薦】

  1. Java Web應(yīng)用開發(fā)中的一些概念
  2. Tomcat 7 應(yīng)用實(shí)測(cè):聲明式Servlet 3.0
  3. 探秘Servlet 3.0中的Web安全改進(jìn)
  4. 簡(jiǎn)化Web應(yīng)用開發(fā) Servlet 3.0特性詳解
  5. Servlet 3.0的異步處理
責(zé)任編輯:佚名 來(lái)源: 51CTO
相關(guān)推薦

2022-04-24 10:42:59

Kubernete容器網(wǎng)絡(luò)Linux

2010-03-12 08:55:06

Java內(nèi)省反射

2023-11-29 09:57:23

微服務(wù)容器

2024-06-28 10:25:18

2010-06-01 15:25:27

JavaCLASSPATH

2016-12-08 15:36:59

HashMap數(shù)據(jù)結(jié)構(gòu)hash函數(shù)

2020-07-21 08:26:08

SpringSecurity過(guò)濾器

2024-03-15 15:03:23

2020-11-02 13:06:42

Java裝箱拆箱

2024-03-28 18:12:28

指針函數(shù)指針C++

2024-09-02 14:12:56

2012-11-22 10:11:16

LispLisp教程

2018-07-09 15:11:14

Java逃逸JVM

2022-07-06 08:05:52

Java對(duì)象JVM

2024-01-09 08:28:44

應(yīng)用多線程技術(shù)

2024-12-02 11:39:30

2017-05-04 16:35:45

2024-06-26 12:56:06

2023-10-19 11:12:15

Netty代碼

2021-02-17 11:25:33

前端JavaScriptthis
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久久久久久电影 | 欧美精品免费观看二区 | 在线午夜| 国产精品毛片 | 成人精品一区二区三区中文字幕 | 日韩免费在线视频 | 久久久国产精品 | 久久精品成人 | 亚洲欧美日韩国产 | 国产成人综合久久 | 亚欧洲精品在线视频免费观看 | 精品一区二区三区中文字幕 | 日美女逼逼 | 欧美日韩精品综合 | 综合久久久 | 草草网| 日韩在线观看中文字幕 | 天天射天天操天天干 | 91免费看片神器 | 亚洲一区视频 | 中文字幕国产一区 | 成人免费看片网 | 国产成人免费视频网站高清观看视频 | 欧美在线观看免费观看视频 | 91亚洲国产成人精品一区二三 | 国产精品久久久久久久午夜片 | 国产高清视频一区二区 | 色婷婷一区二区三区四区 | 国产一区免费 | 亚洲成人精品视频 | 一区二区福利视频 | 成人一区二区视频 | 密色视频 | 国产激情在线 | 国产乱码精品一品二品 | 国产一区二区在线播放视频 | 欧洲亚洲精品久久久久 | 日韩在线不卡 | 亚洲狠狠 | 黄色免费网站在线看 | 夜久久|