日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Servlet容器工作原理深入講解

Servlet容器工作原理中,有兩個(gè)Servlet容器,***個(gè)很簡(jiǎn)單,第二個(gè)則是根據(jù)***個(gè)寫(xiě)出。為了使***個(gè)容器盡量簡(jiǎn)單,所以沒(méi)有做得很完整。復(fù)雜一些的Servlet容器(包括TOMCAT4和5)在TOMCAT運(yùn)行內(nèi)幕的其他章節(jié)有介紹。

成都創(chuàng)新互聯(lián)公司長(zhǎng)期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為宜州企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站建設(shè),宜州網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

兩個(gè)Servlet容器都處理簡(jiǎn)單的Servlet及staticResource。您可以使用 webroot/ 目錄下的  PrimitiveServlet 來(lái)測(cè)試它。復(fù)雜一些的Servlet會(huì)超出這些容器的容量,您可以從 TOMCAT 運(yùn)行內(nèi)幕 一書(shū)學(xué)習(xí)創(chuàng)建復(fù)雜的Servlet 容器。

兩個(gè)應(yīng)用程序的類(lèi)都封裝在ex02.pyrmont 包下。在理解應(yīng)用程序如何運(yùn)作之前,您必須熟悉 javax.servlet.Servlet 接口。首先就來(lái)介紹這個(gè)接口。隨后,就介紹servlet容器服務(wù)servlet的具體內(nèi)容。

javax.servlet.Servlet 接口

Servlet編程,需要引用以下兩個(gè)類(lèi)和接口:javax.servlet 和 javax.servlet.http,在這些類(lèi)和接口中, javax.servlet.Servlet接口尤為重要。所有的Servlet 必須實(shí)現(xiàn)這個(gè)接口或繼承已實(shí)現(xiàn)這個(gè)接口的類(lèi)。

Servlet 接口有五個(gè)方法,如下

 
 
 
  1. public void init(ServletConfig config) throws ServletException
  2. public void service(ServletRequest request, ServletResponse response)
    throws ServletException, java.io.IOException  
  3. public void destroy()  
  4. public ServletConfig getServletConfig()  
  5. public java.lang.String getServletInfo() 

init、  service和 destroy 方法是 Servlet 生命周期的方法。當(dāng) Servlet 類(lèi)實(shí)例化后,容器加載 init,以通知  servlet 它已進(jìn)入服務(wù)行列。init 方法必須被加載,Servelt 才能接收和請(qǐng)求。如果要載入數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序、初始化一些值等等,程序員可以重寫(xiě)這個(gè)方法。在其他情況下,這個(gè)方法一般為空。

service 方法由 Servlet 容器調(diào)用,以允許 Servlet 響應(yīng)一個(gè)請(qǐng)求。Servlet 容器傳遞 javax.servlet.ServletRequest 對(duì)象和  javax.servlet.ServletResponse 對(duì)象。ServletRequest 對(duì)象包含客戶端 HTTP 請(qǐng)求信息, ServletResponse 則封裝servlet 響應(yīng)。這兩個(gè)對(duì)象,您可以寫(xiě)一些需要 servlet 怎樣服務(wù)和客戶怎樣請(qǐng)求的代碼。

從service 中刪除Servlet實(shí)例之前,Servlet容器調(diào)用destroy方法。在servlet容器關(guān)閉或servlet容器需要更多的內(nèi)存時(shí),就調(diào)用它。這個(gè)方法只有在 servlet的 service方法內(nèi)的所有線程都退出的時(shí)候,或在超時(shí)的時(shí)候才會(huì)被調(diào)用。在 servlet 容器調(diào)用 destroy方法之后,它將不再調(diào)用servlet的service方法。destroy 方法給了 servlet 機(jī)會(huì),來(lái)清除所有候住的資源(比如:內(nèi)存,文件處理和線程),以確保在內(nèi)存中所有的持續(xù)狀態(tài)和 servlet的當(dāng)前狀態(tài)是同步的。Listing 2.1 包含了PrimitiveServlet 的代碼,此Servlet非常簡(jiǎn)單,您 可以用它來(lái)測(cè)試本文中的Servlet容器應(yīng)用程序。

PrimitiveServlet 類(lèi)實(shí)現(xiàn)了 javax.servlet.Servlet 并提供了五個(gè)servlet方法的接口 。它做的事情也很簡(jiǎn)單:每次調(diào)用 init,service 或  destroy方法的時(shí)候,servlet就向控制口寫(xiě)入方法名。service 方法也從ServletResponsec對(duì)象中獲得 java.io.PrintWriter 對(duì)象,并發(fā)送字符串到瀏覽器。

 
 
 
  1. import javax.servlet.*;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. public class PrimitiveServlet implements Servlet { 
  5. public void init(ServletConfig config) throws ServletException {
  6.    System.out.println("init");
  7.     } 
  8. public void service(ServletRequest request, ServletResponse  response) throws ServletException, IOException {
  9.       System.out.println("from service");
  10.       PrintWriter out = response.getWriter();
  11.       out.println("Hello.Roses are red.");
  12.       out.print("Violets are blue.");
  13.     } 
  14. public void destroy() {
  15.     System.out.println("destroy");
  16.     }
  17. public String getServletInfo() {
  18.    return null;    
  19.     } 
  20. public ServletConfig getServletConfig() {
  21.     return null;
  22.     }

現(xiàn)在,我們從Servlet容器的角度來(lái)看看 servlet 編程。一個(gè)功能健全的Servlet容器對(duì)于每個(gè)Servlet 的HTTP請(qǐng)求會(huì)完成以下事情:
當(dāng)Servlet ***次被調(diào)用的時(shí)候,加載了Servlet類(lèi)并調(diào)用它的init方法(僅調(diào)用一次)
響應(yīng)每次請(qǐng)求的時(shí)候 ,構(gòu)建一個(gè)javax.servlet.ServletRequest 和 javax.servlet.ServletResponse實(shí)例。
激活servlet的service方法,傳遞 ServletRequest 和 ServletResponse 對(duì)象。
當(dāng)servlet類(lèi)關(guān)閉的時(shí)候,調(diào)用Servlet的destroy方法,并卸載servlet類(lèi)。
發(fā)生在Servlet 容器內(nèi)部的事就復(fù)雜多了。只是這個(gè)簡(jiǎn)單的servlet容器的功能不很健全,所以,這它只能運(yùn)行非常簡(jiǎn)單的servelt ,并不能調(diào)用servlet的init和destroy方法。然而,以下動(dòng)作也被理解成Servlet容器的工作原理被執(zhí)行:

◆等待HTTP請(qǐng)求。

◆構(gòu)建ServletRequest和ServletResponse對(duì)象

如果請(qǐng)求的是一個(gè)staticResource,就會(huì)激活StaticResourceProcessor實(shí)例的 process方法,傳遞ServletRequest 和 ServletResponse 對(duì)象。

如果請(qǐng)求的是一個(gè)Servlet ,載入該類(lèi),并激活它的service方法,傳遞ServletRequest和ServletResponse 對(duì)象。注意:在這個(gè)servlet 容器,每當(dāng) servlet被請(qǐng)求的時(shí)候該類(lèi)就被載入。

在***個(gè)應(yīng)用程序中,Servlet容器由六個(gè)類(lèi)組成 。

◆HttpServer1

◆Request

◆Response

◆StaticResourceProcessor

◆ServletProcessor1

◆Constants

證如前文中的應(yīng)用程序一樣,這個(gè)程序的進(jìn)入口(靜態(tài) main 方法)是HttpServer 類(lèi)。這個(gè)方法創(chuàng)建了HttpServer實(shí)例,并調(diào)用它的 await方法。這個(gè)方法等待 HTTP 請(qǐng)示,然后創(chuàng)建一個(gè) request 對(duì)象和 response對(duì)象,根據(jù)請(qǐng)求是否是 staticResource還是 servlet 來(lái)分派它們到 StaticResourceProcessor實(shí)例或 ServletProcessor實(shí)例。

Constants 類(lèi)包含 static find WEB_ROOT,它是從其他類(lèi)引用的。 WEB_ROOT 指明 PrimitiveServlet 位置 和容器服務(wù)的staticResource。 HttpServer1 實(shí)例等待 HTTP 請(qǐng)求,直到它收到一個(gè) shutdown 命令。發(fā)布 shutdown命令和前文是一樣的。 這就是Servlet容器工作原理,基于這個(gè)原理,眾多的Servlet應(yīng)用被執(zhí)行并返回我們期待的結(jié)果。


網(wǎng)頁(yè)標(biāo)題:Servlet容器工作原理深入講解
文章出自:http://www.dlmjj.cn/article/djjihcd.html