400-650-7353
您所在的位置:首頁 > IT干貨資料 > java > 【Java基礎知識】Servlet學習之Servlet運行機制(五)

【Java基礎知識】Servlet學習之Servlet運行機制(五)

  • 發布: java培訓
  • 來源:Java培訓干貨資料
  • 2021-11-29 19:49:12
  • 閱讀()
  • 分享
  • 手機端入口

一、Servlet運行機制

Servlet是運行在Servlet容器中的服務器端的用來響應用戶請求的服務器小程序,它的生命周期由Servlet容器負責管理。

Servlet在Servlet容器中,以單例模式存在,即:在Servlet生命周期中,Servlet容器只創建一個Servlet對象,所有的客戶請求都使用這一個Servlet對象來響應。

當用戶請求到達時,Servlet容器解析請求,檢查內存中是否已存在用戶要訪問的Servlet對象;若存在,則直接使用該Servlet對象處理用戶請求;若不存在,則加載Servlet,創建Servlet對象,并實例化、初始化,然后使用這個Servlet對象處理用戶請求。

在Servlet整個生命周期中,只實例化和初始化一次,即:只有一個Servlet實例對象為客戶請求提供服務。

Servlet以單例模式運行,即使有多個用戶同時訪問Servlet時,Servlet容器中也只有一個Servlet實例對象存在。Servlet容器通過Servlet對象調用service()服務方法時,采用多線程的方式使用Servlet對象。即:Servlet容器會為每一個用戶請求創建一個線程,由線程調用Servlet的service()方法為用戶請求提供服務。

在Servlet容器中,用一個線程池來管理使用Servlet對象的多個線程,線程池在初始化時,會創建一定數量的線程對象放在池子中,當需要時,直接獲取線程對象并使用;使用后,線程對象歸還線程池;以避免頻繁創建線程、銷毀線程對象,從而提高Servlet容器的性能。

下圖描述了Servlet的請求與響應過程:客戶機向WEB服務器發送請求,WEB服務器收到請求之后,轉發給Servlet容器,Servlet容器創建HttpServletRequest和HttpServletResponse兩個對象,分別封裝請求數據和響應數據,并將它們傳給線程池中分配的線程,該線程訪問Servlet處理用戶請求,處理完畢,將結果返回Servlet容器,線程歸還線程池;最后,WEB服務器負責將響應結果發送回客戶機。

二、Servlet生命周期

在Java中,任何對象都有生命周期。

Servlet生命周期是指Servlet實例創建到Servlet實例銷毀的過程。按照功能的不同,大致可以將Servlet的生命周期分為三個階段:Servlet實例創建與初始化階段、運行階段、銷毀階段。

在Servlet生命周期中,每個階段用不同的方法,完成各自的任務。

初始化階段:調用Servlet的構造器和init()方法進行實例化和初始化。

運行階段:調用Servlet的service()方法處理客戶請求。

銷毀階段:調用Servlet的destroy()方法結束Servlet的運行。

最后,Servlet對象由Java虛擬機JVM的垃圾回收器進行垃圾回收。

1、初始化階段

Servlet實例是Servlet容器創建的,并且在整個Servlet生命周期中,只創建一個。

Servlet容器會根據Servlet在web.xml配置文件中的參數值,或者@WebServlet注解中的loadOnStartup屬性值,決定在哪個時候創建Servlet實例。

如果參數值或loadOnStartup屬性值大于等于0,則Servlet容器在應用程序啟動時,加載Servlet字節碼文件,并調用Servlet的構造器和init()方法創建Servlet實例;否則,在客戶第一次訪問Servlet時,Servlet容器調用Servlet的構造器和init()方法創建Servlet實例。

在整個Servlet生命周期中,Servlet對象只實例化和初始化一次,init()方法只被調用一次。

init()代碼示例如下:

public void init(ServletConfig arg0) throws ServletException {

// TODO Auto-generated method stub

}

2、運行階段

運行階段是Servlet生命周期中最重要的一個階段,在這個階段,Servlet容器會反復調用Servlet的service()方法處理客戶請求。

當Servlet容器接收到用戶請求后,會為每一個用戶請求創建代表請求的ServletRequest對象和代表響應的ServletResponse對象,在調用service()方法處理用戶請求時,將它們作為參數傳遞給Servlet的service()方法。service()方法通過ServletRequest對象,獲取客戶請求信息;通過ServletResponse對象,生成響應結果。

在整個Servlet生命周期中,對于Servlet的每一次用戶訪問請求,Servlet容器都會調用一次Servlet的service()方法,并且創建新的ServletRequest對象和ServletResponse對象,即:service()方法在 Servlet的整個生命周期中,會被多次調用。

service()代碼示例如下:

public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {

// TODO Auto-generated method stub

arg1.setContentType("text/html; charset=utf-8");

arg1.getWriter().println("這是通過實現Servlet接口創建的Servlet程序");

}

3、銷毀階段

當WEB服務器關閉(Servlet容器也就終止了)或WEB應用程序被移出Servlet容器時,Servlet會隨著WEB應用程序的關閉而銷毀。

Servlet容器調用Servlet的destroy()方法,銷毀Servlet對象,釋放Servlet對象占用的資源。

在整個Servlet生命周期中,Servlet對象只銷毀一次,于是,destroy()方法只被Servlet容器調用一次。

特別地:Servlet對象一旦創建,就一直駐留在內存中等待客戶的訪問,直到WEB服務器關閉或WEB應用程序被移出Servlet容器時,Servlet對象才會被銷毀。

destroy()代碼示例如下:

public void destroy() {

// TODO Auto-generated method stub

}

文章“【Java基礎知識】Servlet學習之Servlet運行機制(五)”已幫助

>>本文地址:http://www.028benet.com/zhuanye/2021/71019.html

THE END  

聲明:本站稿件版權均屬中公教育優就業所有,未經許可不得擅自轉載。

1 您的年齡

2 您的學歷

3 您更想做哪個方向的工作?

獲取測試結果
  • 大前端大前端
  • 大數據大數據
  • 互聯網營銷互聯網營銷
  • JavaJava
  • Linux云計算Linux
  • Python+人工智能Python
  • 嵌入式物聯網嵌入式
  • 全域電商運營全域電商運營
  • 軟件測試軟件測試
  • 室內設計室內設計
  • 平面設計平面設計
  • 電商設計電商設計
  • 網頁設計網頁設計
  • 全鏈路UI/UE設計UI設計
  • VR/AR游戲開發VR/AR
  • 網絡安全網絡安全
  • 新媒體與短視頻運營新媒體
  • 直播帶貨直播帶貨
  • 智能機器人軟件開發智能機器人
 

快速通道fast track

近期開班時間TIME

主站蜘蛛池模板: 波多野结衣一区二区免费视频| 老师吸大胸校花的奶水漫画| 亚洲欧美中文字幕5发布| 天天澡天天碰天天狠伊人五月| 羞羞网站在线观看| 中文字幕在线亚洲精品| 四虎永久免费影院在线| 國产一二三内射在线看片| 欧美特黄一免在线观看| 蜜中蜜3在线观看视频| 《调教办公室》在线观看| 可以看污的网站| 学渣坐在学长的棒棒上写作业作文 | 色婷婷精品视频| 久久精品视频大全| 国产成人精品无码一区二区老年人| 欧美三级在线观看播放| 69式互添免费视频| 九九视频在线观看视频23| 国产精品水嫩水嫩| 欧美夫妇交换俱乐部在线观看 | 国产成人va亚洲电影| 日本大片免费一级| 精品一区二区久久久久久久网站| 99视频精品全部在线播放| 亚洲国产欧洲综合997久久| 国产啪亚洲国产精品无码| 性按摩xxxx| 果冻传媒91制片厂| 狠狠色狠狠色综合日日不卡| 麻豆成人久久精品二区三区免费| 曰皮全部过程视频免费国产30分钟| 四虎影院在线免费播放| 91福利视频免费观看| 狠狠色丁香婷婷| 国产成人无码精品久久二区三区| 九九久久精品国产免费看小说| 精品国产欧美精品v| 国产精品久久久久国产精品| 丰满少妇高潮惨叫久久久| 欧美激欧美啪啪片sm|