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

Servlet容器工作原理深入講解

開發 后端
本文向您介紹Servlet容器的工作原理,并對理解Servlet原理起重要做用的javx.servlet.Servlet接口做詳細講解。

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

兩個Servlet容器都處理簡單的Servlet及staticResource。您可以使用 webroot/ 目錄下的  PrimitiveServlet 來測試它。復雜一些的Servlet會超出這些容器的容量,您可以從 TOMCAT 運行內幕 一書學習創建復雜的Servlet 容器。

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

javax.servlet.Servlet 接口

Servlet編程,需要引用以下兩個類和接口:javax.servlet 和 javax.servlet.http,在這些類和接口中, javax.servlet.Servlet接口尤為重要。所有的Servlet 必須實現這個接口或繼承已實現這個接口的類。

Servlet 接口有五個方法,如下

  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 生命周期的方法。當 Servlet 類實例化后,容器加載 init,以通知  servlet 它已進入服務行列。init 方法必須被加載,Servelt 才能接收和請求。如果要載入數據庫驅動程序、初始化一些值等等,程序員可以重寫這個方法。在其他情況下,這個方法一般為空。

service 方法由 Servlet 容器調用,以允許 Servlet 響應一個請求。Servlet 容器傳遞 javax.servlet.ServletRequest 對象和  javax.servlet.ServletResponse 對象。ServletRequest 對象包含客戶端 HTTP 請求信息, ServletResponse 則封裝servlet 響應。這兩個對象,您可以寫一些需要 servlet 怎樣服務和客戶怎樣請求的代碼。

從service 中刪除Servlet實例之前,Servlet容器調用destroy方法。在servlet容器關閉或servlet容器需要更多的內存時,就調用它。這個方法只有在 servlet的 service方法內的所有線程都退出的時候,或在超時的時候才會被調用。在 servlet 容器調用 destroy方法之后,它將不再調用servlet的service方法。destroy 方法給了 servlet 機會,來清除所有候住的資源(比如:內存,文件處理和線程),以確保在內存中所有的持續狀態和 servlet的當前狀態是同步的。Listing 2.1 包含了PrimitiveServlet 的代碼,此Servlet非常簡單,您 可以用它來測試本文中的Servlet容器應用程序。

PrimitiveServlet 類實現了 javax.servlet.Servlet 并提供了五個servlet方法的接口 。它做的事情也很簡單:每次調用 init,service 或  destroy方法的時候,servlet就向控制口寫入方法名。service 方法也從ServletResponsec對象中獲得 java.io.PrintWriter 對象,并發送字符串到瀏覽器。

  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.     }  
  23. }  

現在,我們從Servlet容器的角度來看看 servlet 編程。一個功能健全的Servlet容器對于每個Servlet 的HTTP請求會完成以下事情:
當Servlet ***次被調用的時候,加載了Servlet類并調用它的init方法(僅調用一次)
響應每次請求的時候 ,構建一個javax.servlet.ServletRequest 和 javax.servlet.ServletResponse實例。
激活servlet的service方法,傳遞 ServletRequest 和 ServletResponse 對象。
當servlet類關閉的時候,調用Servlet的destroy方法,并卸載servlet類。
發生在Servlet 容器內部的事就復雜多了。只是這個簡單的servlet容器的功能不很健全,所以,這它只能運行非常簡單的servelt ,并不能調用servlet的init和destroy方法。然而,以下動作也被理解成Servlet容器的工作原理被執行:

◆等待HTTP請求。

◆構建ServletRequest和ServletResponse對象

如果請求的是一個staticResource,就會激活StaticResourceProcessor實例的 process方法,傳遞ServletRequest 和 ServletResponse 對象。

如果請求的是一個Servlet ,載入該類,并激活它的service方法,傳遞ServletRequest和ServletResponse 對象。注意:在這個servlet 容器,每當 servlet被請求的時候該類就被載入。

在***個應用程序中,Servlet容器由六個類組成 。

◆HttpServer1

◆Request

◆Response

◆StaticResourceProcessor

◆ServletProcessor1

◆Constants

證如前文中的應用程序一樣,這個程序的進入口(靜態 main 方法)是HttpServer 類。這個方法創建了HttpServer實例,并調用它的 await方法。這個方法等待 HTTP 請示,然后創建一個 request 對象和 response對象,根據請求是否是 staticResource還是 servlet 來分派它們到 StaticResourceProcessor實例或 ServletProcessor實例。

Constants 類包含 static find WEB_ROOT,它是從其他類引用的。 WEB_ROOT 指明 PrimitiveServlet 位置 和容器服務的staticResource。 HttpServer1 實例等待 HTTP 請求,直到它收到一個 shutdown 命令。發布 shutdown命令和前文是一樣的。 這就是Servlet容器工作原理,基于這個原理,眾多的Servlet應用被執行并返回我們期待的結果。

 

【編輯推薦】

  1. Servlet容器之安全多線程問題
  2. 淺談開源Servlet容器Jetty
  3. Servlet API與JSP內部對象的對應關系
  4. JSP和Servlet的區別
  5. Servlet方法中的常用五大方法淺析
責任編輯:佚名 來源: JavaEye
相關推薦

2009-06-30 10:33:00

JSP JavaBeaServlet

2018-12-25 08:00:00

2015-11-04 09:23:17

JavaServlet工作原理

2010-09-27 12:51:05

DHCP工作原理

2024-11-01 08:57:07

2009-07-03 17:41:47

JavaBean Se

2010-09-17 15:32:52

JVM工作原理

2015-09-02 08:57:56

JavaHashMap工作原理

2023-09-19 22:47:39

Java內存

2010-05-07 14:11:06

Unix--Tripw

2009-07-09 11:27:59

Servlet容器

2010-05-27 15:05:23

ServletJava

2009-12-15 16:04:13

路由器端口映射

2009-07-03 18:13:28

Servlet線程安全

2010-09-15 15:27:06

CSS hack

2023-01-06 12:50:46

ChatGPT

2009-04-28 13:48:09

2021-09-08 06:51:52

AndroidRetrofit原理

2009-11-09 09:34:07

WCF集合

2010-09-25 12:46:10

DHCP運行方式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产激情视频在线观看 | 一区二区三区中文字幕 | 日韩欧美一级片 | 精品国产一区二区三区性色av | 久久久久久高潮国产精品视 | 精品福利在线 | 夜夜精品浪潮av一区二区三区 | 国产一区 在线视频 | 狼色网 | 亚洲综合视频一区 | 亚洲国产精品日韩av不卡在线 | 香蕉二区 | 色爱区综合 | 九九在线视频 | 亚欧午夜| 精品国产精品三级精品av网址 | 国产精品成人一区 | 另类a v| 麻豆av片| 一区二区在线免费播放 | 精品熟人一区二区三区四区 | 成年人视频免费在线观看 | 99日韩 | 亚洲免费在线 | 色综合久久久久 | 在线成人 | 欧美 日韩 中文 | 日韩精品一区二区三区中文在线 | 天天摸天天干 | 日韩精品在线免费观看视频 | 一区二区视屏 | 精品国产欧美 | 成人在线视频观看 | 99爱免费| 欧美日韩一区不卡 | 欧美精品在线免费 | 伊人激情综合网 | 91精品国产乱码久久久久久 | 一区二区不卡视频 | 久久人人网 | 欧美性jizz18性欧美 |