最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java的Tomcat和Servlet的運行原理詳解

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

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

事實就是,main 方法在Tomcat 中,Servlet 程序是配合Tomcat上運行的,Tomcat 就有了main 方法,就會拖著 Servlet 運行起來。

在這里插入圖片描述

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

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

請求接收:

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

2.該HTTP請求就會通過種種手段轉(zhuǎn)換成光電信號被傳輸?shù)椒?wù)器端(具體的轉(zhuǎn)換涉及通信知識)

3.服務(wù)器主機接收到這些光電信號后對其進行解析,還原成原本的HTTP請求,并交給Tomcat 進行處理

4.Tomcat 對HTTP請求進行解析,把請求交給 Servlet的代碼進行處理

處理請求:

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

返回響應(yīng):

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

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

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

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

二、Tomcat啟動過程

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

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

3.然后進行綁定端口號,創(chuàng)建線程池,來并發(fā)的處理請求

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

三、Tomcat處理請求過程

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

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

3.根據(jù) Content Path 和 Servlet Path來找到請求的Servlet對象,并調(diào)用Servlet中的service方法判斷請求類型,調(diào)用到程序員自己寫的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 會根據(jù)請求的方法,調(diào)用對應(yīng)的方法,當(dāng)調(diào)用doXXX方法時,觸發(fā)多態(tài)機制,執(zhí)行到程序員自己寫的代碼。

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

類似于

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

總結(jié)

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

相關(guān)文章

  • xml 的特殊字符的處理方法

    xml 的特殊字符的處理方法

    在xml中,有一些符號作為XML 的標(biāo)記符號,一些特定情況下,屬性值必須帶有這些特殊符號?!∠旅嬷饕侵v解一些常用的特殊符號的處理
    2016-07-07
  • Java ApiPost請求返回406狀態(tài)碼問題的解決方案

    Java ApiPost請求返回406狀態(tài)碼問題的解決方案

    APIPost是一款專為開發(fā)者和測試人員設(shè)計的API測試工具,類似于Postman,但提供了更多的團隊協(xié)作和文檔管理功能,它可以幫助你更好地進行接口調(diào)試和集成測試,但遇到了請求后返回的是406狀態(tài),所以本文給大家介紹了Java ApiPost請求返回406狀態(tài)碼問題的解決方案
    2025-04-04
  • SpringData關(guān)鍵字查詢實現(xiàn)方法詳解

    SpringData關(guān)鍵字查詢實現(xiàn)方法詳解

    這篇文章主要介紹了SpringData關(guān)鍵字查詢實現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Maven發(fā)布項目 (jar包) 到Nexus私服中的操作

    Maven發(fā)布項目 (jar包) 到Nexus私服中的操作

    這篇文章主要介紹了Maven發(fā)布項目 (jar包) 到Nexus私服中的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 基于Java?Agent的premain方式實現(xiàn)方法耗時監(jiān)控問題

    基于Java?Agent的premain方式實現(xiàn)方法耗時監(jiān)控問題

    javaagent是在JDK5之后提供的新特性,也可以叫java代理,這篇文章主要介紹了基于Java?Agent的premain方式實現(xiàn)方法耗時監(jiān)控問題,需要的朋友可以參考下
    2022-10-10
  • Spring中@Import的各種用法以及ImportAware接口詳解

    Spring中@Import的各種用法以及ImportAware接口詳解

    這篇文章主要介紹了Spring中@Import的各種用法以及ImportAware接口詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • spring配置文件解析失敗報”cvc-elt.1: 找不到元素 ''''beans'''' 的聲明”異常解決

    spring配置文件解析失敗報”cvc-elt.1: 找不到元素 ''''beans'''' 的聲明”異常解決

    這篇文章主要給大家介紹了關(guān)于spring配置文件解析失敗報”cvc-elt.1: 找不到元素 'beans' 的聲明”異常的解決方法,需要的朋友可以參考下
    2020-08-08
  • 在SpringBoot項目中使用Java8函數(shù)式接口的方法示例

    在SpringBoot項目中使用Java8函數(shù)式接口的方法示例

    在Spring Boot項目中,Java 8 的函數(shù)式接口廣泛用于實現(xiàn)各種功能,如自定義配置、數(shù)據(jù)處理等,函數(shù)式接口在Spring Boot中非常有用,本文展示了在SpringBoot項目中使用Java8的函數(shù)式接口的方法示例,需要的朋友可以參考下
    2024-03-03
  • selenium4.0版本在springboot中的使用問題的坑

    selenium4.0版本在springboot中的使用問題的坑

    本文主要介紹了selenium4.0版本在springboot中的使用問題的坑,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • java中斷線程的正確姿勢完整示例

    java中斷線程的正確姿勢完整示例

    這篇文章主要為大家介紹了java中斷線程的正確姿勢完整示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05

最新評論

保亭| 闸北区| 兴城市| 含山县| 舞钢市| 三原县| 东山县| 苏尼特左旗| 庆云县| 淳化县| 新津县| 莫力| 隆子县| 金山区| 岳阳县| 毕节市| 丹棱县| 丁青县| 南乐县| 金坛市| 天门市| 淮滨县| 弥勒县| 高安市| 剑河县| 古丈县| 澄迈县| 镇安县| 始兴县| 深圳市| 乌鲁木齐市| 积石山| 阜康市| 新沂市| 南岸区| 象山县| 苏尼特左旗| 龙里县| 云安县| 东乌珠穆沁旗| 尉氏县|