什么是Servlet容器?
1. 什么是Web服務(wù)器?
? ? 想要知道什么是Servlet容器,我們首先要知道什么是Web服務(wù)器。
? ? Web服務(wù)器使用HTTP協(xié)議來傳輸數(shù)據(jù)。最簡單的一種情況是,用戶在瀏覽器(客戶端,client)中輸入一個(gè)URL(如,www.programcreek.com/static.html),然后就能獲取網(wǎng)頁進(jìn)行閱覽。因此,服務(wù)器完成的工作就是發(fā)送網(wǎng)頁至客戶端。傳輸過程遵循HTTP協(xié)議,它指明了請(qǐng)求(request)消息和響應(yīng)(response)消息的格式。
2. 什么是Servlet容器?
? ? 在這里,我們發(fā)現(xiàn),用戶/客戶端只能向服務(wù)器請(qǐng)求靜態(tài)網(wǎng)頁。如果用戶想要根據(jù)自己的輸入來讀取網(wǎng)頁,這種方式就不能滿足用戶的要求。Servlet容器的基本思想是在服務(wù)器端使用Java來動(dòng)態(tài)生成網(wǎng)頁。因此,Servlet容器是Web服務(wù)器和servlet進(jìn)行交互的必不可少的組件。
? ??Servlet容器就是用來裝Servlet的。
3. 什么是Servlet?
? ??Servlet是在javax.serlvet包中定義的一個(gè)接口。它聲明了servlet生命周期中必不可少的三個(gè)方法-init()、service()和destroy()。每個(gè)servlet(無論是在SDK中定義的,或是自定義的)都必須實(shí)現(xiàn)這三個(gè)方法,而且由服務(wù)器在特定的時(shí)刻調(diào)用。
? ? 1. init()方法在servlet生命周期的初始化階段被調(diào)用。它傳遞一個(gè)實(shí)現(xiàn)了javax.servlet.ServletConfig接口的對(duì)象,使得servlet能夠從web application中獲取初始化參數(shù)。
? ? 2. servlet初始化收,每接收一個(gè)請(qǐng)求,就會(huì)調(diào)用service()方法。每個(gè)請(qǐng)求的處理都在獨(dú)立的線程中進(jìn)行。Web服務(wù)器對(duì)每個(gè)請(qǐng)求都會(huì)調(diào)用一次service()方法。service()方法判斷請(qǐng)求的類型,并把它轉(zhuǎn)發(fā)給相應(yīng)的方法進(jìn)行處理。
? ? 3. 當(dāng)需要銷毀servlet對(duì)象時(shí),就要調(diào)用destroy()方法。該方法釋放被占用的資源。
? ? 和所有的Java程序一樣,servlet運(yùn)行在JVM中。引入servlet容器是為了處理復(fù)雜的HTTP請(qǐng)求。Servlet容器負(fù)責(zé)servlet的創(chuàng)建、執(zhí)行和銷毀。
4. Servlet容器和Web服務(wù)器如何處理一個(gè)請(qǐng)求?
? ? 1. Web服務(wù)器接收到HTTP請(qǐng)求
? ? 2. Web服務(wù)器將請(qǐng)求轉(zhuǎn)發(fā)給servlet容器
? ? 3. 如果容器中不存在所需的servlet,容器就會(huì)檢索servlet,并將其加載到容器的地址空間中
? ? 4. 容器調(diào)用servlet的init()方法對(duì)servlet進(jìn)行初始化(該方法只會(huì)在servlet第一次被載入時(shí)調(diào)用)
? ? 5. 容器調(diào)用servlet的service()方法來處理HTTP請(qǐng)求,即,讀取請(qǐng)求中的數(shù)據(jù),創(chuàng)建一個(gè)響應(yīng)。servlet會(huì)被保留在容器的地址空間中,繼續(xù)處理其他的HTTP請(qǐng)求
? ? 6. Web服務(wù)器將動(dòng)態(tài)生成的結(jié)果返回到正確的地址。
? ? 下圖標(biāo)出了上述的六個(gè)步驟:
5. JVM扮演的角色
? ? 使用servlet,就要允許JVM為處理每個(gè)請(qǐng)求分配獨(dú)立的Java線程,這也是Servlet容器主要的優(yōu)勢(shì)之一。每一個(gè)servlet都是一個(gè)擁有能響應(yīng)HTTP請(qǐng)求的特定元素的Java類。Servlet容器的主要作用是將請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的servlet進(jìn)行處理,并在JVM處理完請(qǐng)求后,將動(dòng)態(tài)生成的結(jié)果返回至正確的地址。在大多數(shù)情況下,servlet容器運(yùn)行在獨(dú)立的JVM中,但如果容器需要多個(gè)JVM,也有相應(yīng)的解決方案。
相關(guān)文章:
1.?Servlet重定向至重命名后的文件下載
2.?在Java Servlet中使用Aapache commons FileUpload組件實(shí)現(xiàn)文件上傳(包含源碼)
3.?為什么我們需要諸如Struts 2一類的Java Web框架?
4.?從JAX-WS Web Service中獲取ServletContext
總結(jié)
以上是生活随笔為你收集整理的什么是Servlet容器?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 讲二次搜索树转化为排序的双向链表
- 下一篇: ug建模文本怎么竖着_入门到成为UG编程