servlet 作用


什么是Servlet

Servlet是一個Java編寫的程序,此程序是基於Http協議的,在服務器端運行的(如tomcat),是按照Servlet規范編寫的一個Java類。

在BS架構中,早期的Web服務器只能處理靜態資源的請求,也就是無法根據請求進行計算后再生成相應的HTML內容。為了補充Web服務器的這個缺陷,於是增強服務器功能的CGI技術最早產生了。CGI(Common Gateway Interface通用網關接口)也是一種規范,可以使用不同的語言來開發,如Perl,C,Java等都可以。當客戶端請求靜態資源時,Web服務器會自己處理並返回,當客戶端請求動態資源時,Web服務器會把請求轉交給擴展程序來處理,並將擴展程序的處理結果返回給客戶端。但是CGI技術開發復雜,性能較差,只要有一個請求到達,Web服務器就會單獨分配一個進程來進行處理,可移植性不好,所以慢慢就由后來的Servlet技術所取代。

Servlet技術是使用Java語言開發的一套組件規范,不再像CGI技術那樣需要分配單獨的進程來處理請求,而是單獨分配一個線程來處理,於是大大提升了處理效率。並且Java語言是跨平台的語言,也提升了Web服務器擴展程序的可移植性,已經取代了CGI技術,成為BS架構中的主流技術。所有后續的BS架構中的主流框架本質上都是基於Servlet來實現的。

Servlet組件運行原理

Servlet作為補充Web服務器功能的組件,需要依賴於Servlet容器才能運行,它的運行原理如下圖所示。

在瀏覽器中輸入請求地址后,瀏覽器會依據IP地址及端口號找到對應的Web服務器,如果請求的是靜態資源,Web服務器直接提供響應;如果請求的是動態資源,Web服務器的通信模塊會將該請求傳遞給Servlet容器的通信模塊,Servlet容器負責創建Servlet實例,並將請求中的數據解析出來傳遞給Servlet。在Servlet處理完數據之后,響應結果也是由容器的通信模塊負責返回給Web服務器。后續的Servlet的銷毀及管理都由容器來負責。

能夠充當Servlet容器這個角色的有很多軟件,如Tomcat、Weblogic、JBoss等。而這些Servlet容器不僅僅具備了管理Servlet組件的功能,也具備了Web服務器的一些功能,所以很多時候只要安裝一個Tomcat軟件就同時具備了Web服務器及Servlet容器的雙重功能。

 

Servlet如何運行

Servlet作為Web服務器的補充功能在運行時需要受到Servlet容器的管理,其運行的流程如下:

  1. 瀏覽器依據IP建立與容器的連接
  2. 瀏覽器將請求數據打包
  3. 容器解析請求數據包,封裝request和response對象
  4. 容器依據請求資源路徑找到Servlet創建對象
  5. 容器將request和response對象作為參數傳入service方法,並調用
  6. 容器將響應數據打包發給瀏覽器
  7. 瀏覽器取出結果,生成頁面

Servlet的生命周期

Servlet的生命周期是由Servlet的容器來控制的,它可以分為3個階段;初始化,運行,銷毀。

初始化階段:

1,Servlet容器加載servlet類,把servlet類的.class文件中的數據讀到內存中。

2,然后Servlet容器創建一個ServletConfig對象。ServletConfig對象包含了Servlet的初始化配置信息。

3,Servlet容器創建一個servlet對象。

4,Servlet容器調用servlet對象的init方法進行初始化。



運行階段:

當servlet容器接收到一個請求時,servlet容器會針對這個請求創建servletRequest和servletResponse對象。

然后調用service方法。並把這兩個參數傳遞給service方法。Service方法通過servletRequest對象獲得請求的

信息。並處理該請求。再通過servletResponse對象生成這個請求的響應結果。然后銷毀servletRequest和

servletResponse對象。我們不管這個請求是post提交的還是get提交的,最終這個請求都會由service方法來處理。

 

銷毀階段:

當Web應用被終止時,servlet容器會先調用servlet對象的destrory方法,然后再銷毀servlet對象,

同時也會銷毀與servlet對象相關聯的servletConfig對象。我們可以在destroy方法的實現中,釋放

servlet所占用的資源,如關閉數據庫連接,關閉文件輸入輸出流等。

 

在這里該注意的地方:

在servlet生命周期中,servlet的初始化和和銷毀階段只會發生一次,而service方法執行的次數則取決於servlet被客戶

端訪問的次數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM