欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java的Tomcat和Servlet的運(yùn)行原理詳解

 更新時(shí)間:2022年03月21日 15:13:18   作者:富春山居_ZYY  
這篇文章主要為大家詳細(xì)介紹了Java的Tomcat和Servlet,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

在從前的時(shí)候,想要運(yùn)行一個(gè)Java代碼,就必須要實(shí)現(xiàn)main方法,這是程序的入口,通過(guò)初識(shí) Servlet 就會(huì)發(fā)現(xiàn)沒(méi)有實(shí)現(xiàn) main 方法,程序就被成功調(diào)用,并且還能夠在瀏覽器除看見(jiàn)想要看見(jiàn)的結(jié)果,這是為什么呢?

事實(shí)就是,main 方法在Tomcat 中,Servlet 程序是配合Tomcat上運(yùn)行的,Tomcat 就有了main 方法,就會(huì)拖著 Servlet 運(yùn)行起來(lái)。

在這里插入圖片描述

Servlet 是上是Tomcat 提供的一組API,因此其代碼的實(shí)現(xiàn)是基于 Tomcat 的。Tomcat 通過(guò) HTTP協(xié)議來(lái)和瀏覽器進(jìn)行交互,交互主要分成三個(gè)步驟:請(qǐng)求接收、處理請(qǐng)求、返回響應(yīng)

一、客戶端(瀏覽器)與服務(wù)器之間的交互

請(qǐng)求接收:

1.當(dāng)用戶在瀏覽器端輸入一個(gè)網(wǎng)址后,瀏覽器就會(huì)構(gòu)造一個(gè)HTTP請(qǐng)求

2.該HTTP請(qǐng)求就會(huì)通過(guò)種種手段轉(zhuǎn)換成光電信號(hào)被傳輸?shù)椒?wù)器端(具體的轉(zhuǎn)換涉及通信知識(shí))

3.服務(wù)器主機(jī)接收到這些光電信號(hào)后對(duì)其進(jìn)行解析,還原成原本的HTTP請(qǐng)求,并交給Tomcat 進(jìn)行處理

4.Tomcat 對(duì)HTTP請(qǐng)求進(jìn)行解析,把請(qǐng)求交給 Servlet的代碼進(jìn)行處理

處理請(qǐng)求:

1.Tomcat 會(huì)通過(guò) Content Path和Servlet Path來(lái)確定到某webapp的某類,在根據(jù)請(qǐng)求的方法(doXXX方法)來(lái)確定調(diào)用該類的具體方法,代碼中的HttpServletRequest對(duì)象就包含著HTTP請(qǐng)求的詳細(xì)內(nèi)容,根據(jù)代碼進(jìn)行結(jié)果的計(jì)算

返回響應(yīng):

1.Servlet 根據(jù)代碼計(jì)算生成響應(yīng)對(duì)象(HttpServletResponse)

2.Tomcat 在把該響應(yīng)對(duì)象構(gòu)造成HTTP響應(yīng),通過(guò)光電信號(hào)的方式傳輸?shù)綖g覽器主機(jī)

3.瀏覽器主機(jī)在對(duì)光電信號(hào)進(jìn)行解析還原成原本的HTTP響應(yīng),交給瀏覽器進(jìn)行處理

4.瀏覽器解析該HTTP響應(yīng),將數(shù)據(jù)顯示在界面上

二、Tomcat啟動(dòng)過(guò)程

1.首先,我們實(shí)現(xiàn)的 Servlet 代碼,只是單純的創(chuàng)建了Servlet類而已,想要讓這些類真正的被使用,需要Tomcat進(jìn)行實(shí)例化,Tomcat就會(huì)根據(jù)@WebServlet注解來(lái)獲取到需要被實(shí)例化的類,通過(guò)反射的方式創(chuàng)建實(shí)例,并集中放在一數(shù)組中。

2.Tomcat持有了Servlet實(shí)例后,需要調(diào)用 Servlet 中的init()方法進(jìn)行初始化操作(只會(huì)進(jìn)行一次初始化操作)

3.然后進(jìn)行綁定端口號(hào),創(chuàng)建線程池,來(lái)并發(fā)的處理請(qǐng)求

4.在服務(wù)器運(yùn)行結(jié)束前,就會(huì)調(diào)用 Servlet對(duì)象中的destroy()方法,進(jìn)行資源回收操作

三、Tomcat處理請(qǐng)求過(guò)程

1.Tomcat 接收到請(qǐng)求之后,就會(huì)按照 HTTP協(xié)議的格式將其構(gòu)造成 HttpServletRequest對(duì)象

2.Tomcat 根據(jù) URL 來(lái)判斷該請(qǐng)求書(shū)否為一靜態(tài)資源(比如圖片、HTML文件之類的),如果是,就直接返回該靜態(tài)資源,如果是動(dòng)態(tài)資源就執(zhí)行接下來(lái)的Servlet 部分

3.根據(jù) Content Path 和 Servlet Path來(lái)找到請(qǐng)求的Servlet對(duì)象,并調(diào)用Servlet中的service方法判斷請(qǐng)求類型,調(diào)用到程序員自己寫(xiě)的doXXX方法

四、Servlet的service方法

偽代碼:

class Servlet {
    public void service(HttpServletRequest req, HttpServletResponse resp) {
    	String method = req.getMethod();
        if (method.equals("GET")) {
          	doGet(req, resp);
        } else if (method.equals("POST")) {
          	doPost(req, resp);
        } else if (method.equals("PUT")) {
         	 doPut(req, resp);
        } else if (method.equals("DELETE")) {
          	doDelete(req, resp);
        }
       ......
     }
}

service 會(huì)根據(jù)請(qǐng)求的方法,調(diào)用對(duì)應(yīng)的方法,當(dāng)調(diào)用doXXX方法時(shí),觸發(fā)多態(tài)機(jī)制,執(zhí)行到程序員自己寫(xiě)的代碼。

程序員自己寫(xiě)的 Servlet 類繼承自 HttpServlet 類,HttpServlet 類繼承自 Servlet 類,因此程序員寫(xiě)的類是 Servlet 的子類。在前面有介紹到 Tomcat 在啟動(dòng)時(shí)會(huì)將需要被實(shí)例化的類都放在了Servlet數(shù)組中,因此實(shí)際上我們是通過(guò)父類的引用來(lái)獲取到被實(shí)例化的類的,從而觸發(fā)多態(tài)。

類似于

Servlet ins = new HelloServlet();//HelloServlet 類是程序員自己實(shí)現(xiàn)的類的類名
ins.doGet(req,resp);

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!  

相關(guān)文章

  • Java實(shí)現(xiàn)的AES256加密解密功能示例

    Java實(shí)現(xiàn)的AES256加密解密功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的AES256加密解密功能,結(jié)合完整實(shí)例形式分析了Java實(shí)現(xiàn)AES256加密解密功能的步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-02-02
  • Java IO流 文件的編碼實(shí)例代碼

    Java IO流 文件的編碼實(shí)例代碼

    本文通過(guò)實(shí)例代碼給大家介紹了java io流文件編碼的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-05-05
  • 詳解Spring如何解決循環(huán)引用的問(wèn)題

    詳解Spring如何解決循環(huán)引用的問(wèn)題

    在Spring框架中,當(dāng)兩個(gè)或多個(gè)Bean之間存在相互依賴關(guān)系時(shí),可能會(huì)導(dǎo)致循環(huán)引用的問(wèn)題,循環(huán)引用指的是兩個(gè)或多個(gè)Bean之間互相依賴,形成一個(gè)循環(huán)鏈,本文將和大家一起探討Spring如何解決循環(huán)引用的問(wèn)題,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2023-08-08
  • Java編程時(shí)間日期API實(shí)例解析

    Java編程時(shí)間日期API實(shí)例解析

    本文主要介紹了Java編程時(shí)間日期API實(shí)例解析的相關(guān)內(nèi)容,分享了一則實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2018-01-01
  • Java實(shí)現(xiàn)優(yōu)雅的參數(shù)校驗(yàn)方法詳解

    Java實(shí)現(xiàn)優(yōu)雅的參數(shù)校驗(yàn)方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言如何實(shí)現(xiàn)優(yōu)雅的參數(shù)校驗(yàn),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定是幫助,需要的可以參考一下
    2022-06-06
  • Java中的StringJoiner類使用示例深入詳解

    Java中的StringJoiner類使用示例深入詳解

    這篇文章主要為大家介紹了Java中的StringJoiner類使用示例深入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 你知道在Java中Integer和int的這些區(qū)別嗎?

    你知道在Java中Integer和int的這些區(qū)別嗎?

    最近面試,突然被問(wèn)道,說(shuō)一下Integer和int的區(qū)別.額…可能平時(shí)就知道寫(xiě)一些業(yè)務(wù)代碼,包括面試的一些Spring源碼等,對(duì)于這種特別基礎(chǔ)的反而忽略了,導(dǎo)致面試的時(shí)候突然被問(wèn)到反而不知道怎么回答了.哎,還是乖乖再看看底層基礎(chǔ),順帶記錄一下把 ,需要的朋友可以參考下
    2021-06-06
  • mybatis-plus 如何判斷參數(shù)是否為空并作為查詢條件

    mybatis-plus 如何判斷參數(shù)是否為空并作為查詢條件

    這篇文章主要介紹了mybatis-plus 如何判斷參數(shù)是否為空并作為查詢條件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java后端實(shí)現(xiàn)信息分頁(yè)查詢的示例代碼

    java后端實(shí)現(xiàn)信息分頁(yè)查詢的示例代碼

    在一個(gè)頁(yè)面展示大量的用戶信息不便于觀看,因此就需要采用分頁(yè)展示的方法,本文就來(lái)為大家介紹一下java后端如何實(shí)現(xiàn)信息分頁(yè)查詢,需要的小伙伴可以參考下
    2023-11-11
  • Java創(chuàng)建二叉搜索樹(shù),實(shí)現(xiàn)搜索,插入,刪除的操作實(shí)例

    Java創(chuàng)建二叉搜索樹(shù),實(shí)現(xiàn)搜索,插入,刪除的操作實(shí)例

    下面小編就為大家分享一篇Java創(chuàng)建二叉搜索樹(shù),實(shí)現(xiàn)搜索,插入,刪除的操作實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2017-12-12

最新評(píng)論