色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

簡述后端應用程序的工作原理

jf_78858299 ? 來源:IT大咖說 ? 作者:IT大咖說 ? 2023-05-05 16:45 ? 次閱讀

后端應用程序的工作原理

成功運行一個簡單的后端應用程序后,接下來介紹后端應用程序的工作原理。

一個Java后端應用程序要想運行起來需要兩步,第一步是搭建Web應用服務器,為后端應用程序提供運行環境,第二步是把后端應用程序放到Web應用服務器上。

相應地,后端應用軟件的工作原理我們也分為兩部分來介紹。一部分是Web應用服務器運行后端應用程序,介紹Web應用服務器與后端應用程序的關系;另一部分是后端應用程序處理接口請求,介紹后端應用程序與接口請求端(如網頁、App等)的關系。在介紹這兩部分內容之前,我們先介紹一下Java程序的運行原理。

注意:本小節默認以Tomcat作為Web應用服務器軟件,以Java作為編程語言,以Spring Boot作為基礎框架。在介紹原理時會省略很多內部細節,我們只需要大體了解即可。

◆1.Java程序運行原理

編譯型語言通過專門的編譯器,一次性地將源代碼編譯成可執行文件(機器碼),可執行文件可直接運行在特定的平臺上。由于可執行文件(機器碼)是根據特定平臺編譯而成的,所以運行效率較高,但是不能跨平臺使用。比較流行的編譯型語言有C和C++等。

解析型語言不需要編譯,但是在每次運行的時候都需要解析器把源碼翻譯成機器碼,即每個運行程序的機器都需要安裝一個解析器,解析器會根據自身平臺把源碼翻譯成對應的機器碼。解析型語言具有跨平臺性,但是運行效率不高(每次運行都需要翻譯成機器碼)。比較流行的解析型語言有Python、Ruby和JavaScript等。

編譯型語言和解析型語言的對比如圖4.29所示。

圖4.29 編譯型語言與解析型語言

而Java比較特別一些,Java既是編譯型語言,又是解析型語言,因為Java既需要編譯器又需要解析器。Java具備跨平臺特性的同時,也比傳統的解析型語言運行效率要高。Java編寫的源碼經過編譯器編譯之后,轉換成.class文件(字節碼,一種Java獨有的源碼與機器碼之間的格式)。這些.class文件中的字節碼在運行時需要解析器把字節碼翻譯成機器碼才能運行。Java的編譯運行過程如圖4.30所示。

注意:一般情況下,Java源碼編譯輸出的是.jar文件,而.class文件是.jar文件的主要部分。這里為了講解方便,省去了對.jar文件的描述。

圖4.30 Java編譯運行過程

Java的編譯器和解析器就是在4.1.2小節搭建Web應用服務器中提到的JDK,想要編譯或者運行Java程序都需要安裝JDK。JDK的內部結構如圖4.31所示,它包含一些開發工具和JRE(Java Runtime Environment,運行環境),其中開發工具里有編譯器,而JRE是運行Java程序的環境。JRE包含JVM(JavaVirtual Machine,Java虛擬機)和一些基礎類庫,其中JVM包含解析器,負責翻譯字節碼等工作,而基礎庫類是Java調用操作系統功能的橋梁。

注意:如果只需要運行Java程序,那么可以單獨安裝JRE。JDK 9版本發布以后,不再提供單獨的JRE安裝包。由于引入了新技術,JDK 9及后續版本的內部也沒有了JRE(可以手動生成),而JVM是仍然存在的。這是因為JRE在運行Java程序時會加載所有的基礎類庫,這樣比較損耗資源,而JDK 9及后續版本在運行程序時是按需要加載基礎類庫的。

圖4.31 JDK內部結構

2.Web應用服務器運行后端應用程序

本小節以Tomcat作為Web應用服務器軟件進行說明。Tomcat本身是一個Java程序,啟動Tomcat服務相當于啟動一個Java程序。那么,Tomcat是怎么運行后端應用程序的?一個Java程序怎么運行另外一個Java程序呢?

首先,在Tomcat中運行的后端應用程序是.war文件而不是.jar文件。.war文件與.jar文件不同,.war文件是Web模塊,其內部除了編譯好的.class文件、依賴包和配置文件以外,還可以包含網頁資源(HTML、CSS文件等)和JSP動態網頁等。.war文件一般需要依賴Tomcat等Web應用服務器軟件才能運行。

以4.1.3小節構造一個簡單的后端應用程序中的demo.war為例,Tomcat運行demo.war其實不是一個Java程序運行另外一個Java程序的關系,而是一個Java程序使用編譯好的.class文件的關系。更具體地說,當demo.war放到Tomcat的webapps文件夾中后,Tomcat會自動把demo.war解壓成demo目錄。解壓完成后,Tomcat會對demo進行解析并加載相關的.class文件。當接收到請求時,Tomcat會調用對應的接口函數(TestController.java文件中的方法,見代碼4.11),經由這些代碼處理后再將結果返回。Tomcat運行后端應用程序的工作原理如圖4.32所示。

說明:Tomcat加載并引用.class文件利用了Java的反射機制。一般情況下,Java程序引用類文件只能在編寫代碼時通過import引用其他類文件,而Java反射機制是允許在運行狀態中通過給定類的名字加載指定類文件的。

Tomcat是通過圖4.21中ServletInitializer這個固定類名加載相關文件的。

圖4.32 Tomcat運行后端應用程序的工作原理

最后值得一提的是,Tomcat運行后端應用程序的工作原理其實是非常復雜的,特別是對相關文件加載的機制,本小節只對其做了最簡單的陳述,有興趣的讀者可以通過官方文檔和開源代碼進行更深入的研究。

◆3.后端應用程序處理接口請求

發送一個請求至少需要明確4個部分:請求的URL、請求方式、請求數據的格式和請求數據。以4.1.3小節構造一個簡單的后端應用程序中的接口一為例,以Postman為測試工具,發送請求的設置如圖4.33所示。

圖4.33 接口一請求的設置

注意:當請求方式為GET時,則請求數據一般只能寫在URL里,如4.1.3小節構造一個簡單的后端應用程序中的接口二。

由圖4.33中請求的URL可知,請求是基于HTTP發送的。HTTP的通信過程如圖4.34所示,其中,不是每次請求都會做一次連接的建立與斷開,存在多次請求會共用一個連接通道的情況,這與HTTP版本和相關設置有關。

注意:接口請求一般是使用HTTP或HTTPS。HTTP是TCP/IP的應用層協議,也就是說,HTTP其實只是在TCP/IP之上做了規則限定和封裝,其底層技術還是TCP/IP的相關技術。而HTTPS只是在HTTP的基礎上做了通信加密,暫且不對其進行介紹。

圖4.34 HTTP通信過程

在圖4.33所示的請求例子中,客戶端會以URL的IP地址和端口(127.0.0.1:8080)與Web應用服務器建立連接。建立連接之后,客戶端會把剩下的信息(URL剩下的部分、請求方式、請求數據的格式、請求數據)按照規則放到報文里,再把報文發送到Web應用服務器上。發送的報文如代碼4.14所示。其中,報文由三部分組成,分別是請求行、報文頭信息和報文體。

·請求行:是報文的第一行,其由三部分組成,分別是請求方法、請求URL剩余的部分(除協議、IP地址、端口外)和HTTP版本。

·報文頭信息:其范圍是報文的第二行到空行。報文頭可以設置多個屬性,其作用是記錄相關的請求信息。其中,Conten-Type屬性對應的是請求數據的格式。

·報文體:其范圍是空行到最后,對應的是請求數據。需要注意的是,當請求方式為GET時,一般不使用報文體。因此4.1.3小節中的接口二的請求參數只能寫在URL中。

代碼4.14接口一的請求報文

POST /demo/test/test HTTP/1.1

Host: 127.0.0.1:8080

Content-Type: text/plain

{

"language":"chinese",

"text":"你好,世界"

}

當Web應用服務器接收到請求的報文后,會對報文進行解析并轉換成對應的Java對象。Web應用服務器會根據報文的請求行(POST/demo/test/test)找到對應的后端應用程序并調用相應的處理函數。

其中,請求行(POST/demo/test/test)會被分成兩段(/demo和POST/test/test)處理,Web應用服務器會根據第一段(/demo)內容找到對應的后端應用程序,demo對應的是demo.war文件名。Web應用服務器會根據第二段(POST/test/test)內容調用后端應用程序對應的處理函數,后端應用程序對應的標記如代碼4.15所示,其中,@RequestMapping("/test")標記了Controller的路徑,@RequestMapping(value="/test",method=RequestMethod.POST)標記了對應方法的路徑和請求方式,函數create()的參數String requestParam會被自動注入請求的數據(報文體)中。

說明:Java中以@開頭的是Java注解,也稱為Java標注,其相當于一個標簽。@Request-Mapping、@Controller是Java Servlet標準中定義的注解。

代碼4.15接口一的代碼

@Controller

@RequestMapping("/test")

@RequestMapping(value="/test",method = RequestMethod.POST)

public JSONObject create(@RequestBody String requestParam) {

}

當代碼4.15的處理函數被執行完畢之后,會把結果返回給Web應用服務器,Web應用服務器會把返回的Java對象轉換成HTTP報文,再把報文發送給客戶端。返回的報文如代碼4.16所示。其中,報文由三部分組成,分別是狀態行、報文頭信息和報文體。

圖4.35 接口一返回的結果

·狀態行:是報文的第一行,其由三部分組成,分別是HTTP版本、狀態碼和狀態碼描述。狀態碼及其信息一般是由Web應用服務器自動填充的,如狀態碼為200,即為成功,狀態碼為404,即為無法尋找對應資源等。當然,后端應用程序也可以對其進行修改。

·報文頭信息:其范圍是報文的第二行到空行。報文頭可以設置多個屬性,作用是記錄相關的請求信息。其中,Conten-Type屬性對應的是請求數據的格式。后端應用程序也可以添加一些自定義的屬性。

·報文體:其范圍是空行到最后,對應的是后端應用程序的處理函數返回的結果。

代碼4.16接口一返回的報文

HTTP/1.1 200 OK

Date: Tue, 31 Mar 2020 10:59:51 GMT

Content-Type: application/json

{"message":"你好,世界"}

以上介紹了后端應用程序的工作原理,當然這只是一些表面的認識,還有很多內容沒有鋪開陳述。這是因為在實際項目開發過程中,無論是HTTP請求還是Web應用服務器軟件,都是現成的工具,我們多是去使用它們而不是去改造它們,因此對原理的了解不需要完全透徹,具體的細節可以等問題出現時再去了解。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Web
    Web
    +關注

    關注

    2

    文章

    1269

    瀏覽量

    69635
  • 服務器
    +關注

    關注

    12

    文章

    9295

    瀏覽量

    85882
  • JAVA
    +關注

    關注

    19

    文章

    2974

    瀏覽量

    104981
  • 后端
    +關注

    關注

    0

    文章

    31

    瀏覽量

    2288
收藏 人收藏

    評論

    相關推薦

    BootLoader程序工作原理是什么?怎么使用這個程序

    BootLoader程序工作原理是什么?怎么使用這個程序
    發表于 11-09 06:16

    什么是晶閘管?簡述晶閘管的工作原理

    保持導通,即晶閘管導通后,門極失去作用。門極只起觸發作用。  4. 晶閘管在導通情況下,當主回路電壓(或電流)減小到接近于零時,晶閘管關斷。晶閘管的工作原理:  晶閘管在工作過程中,它的陽極(A)和陰極
    發表于 02-22 15:40

    磁盤碎片整理的工作原理是什么?

    磁盤碎片整理的工作原理是什么? “磁盤碎片整理”這個術語通常用于指代Microsoft Windows中稱為磁盤碎片整理程序應用程序。它的設計目的是解決一個由于硬盤存儲
    發表于 07-30 08:17 ?4208次閱讀

    蓄電池工作原理簡述

    蓄電池工作原理簡述   鉛酸蓄電池充、放電化學反應的原理方程式如下: 1.放電:蓄電池對
    發表于 11-16 14:17 ?1.8w次閱讀

    Windows XP SP2防火墻的工作原理

    Windows XP SP2防火墻的工作原理 ★Windows XP SP2防火墻的工作原理  對于只使用瀏覽、電子郵件等系統自帶的網絡應用程序,Windows防火墻根本
    發表于 01-11 11:41 ?1604次閱讀

    電腦芯片的工作原理簡述

    本文為您講述電腦芯片的工作原理,包括電腦芯片的基本構成與工作邏輯,基礎參數。希望能提供大家參考:
    發表于 08-09 16:39 ?2.7w次閱讀

    基于區塊鏈的應用程序“DApp”介紹

    DApps是分散式應用程序的縮寫。這些應用程序實際上不應該對最終用戶進行區分。關于DApps的重要之處在于后端是如何處理數據的。
    發表于 09-05 14:37 ?3527次閱讀

    USB接口工作原理_USB接口優點

    簡述USB接口工作原理”由電蜂優選為您整理,采購連接器,上電蜂優選。
    發表于 06-10 10:52 ?8847次閱讀

    存儲程序工作原理是什么

    要想搞清楚存儲程序工作原理,最好先知道它是存儲在了什么地方,或者說,應當先搞清楚存儲工作的物質基礎是什么。
    發表于 06-13 15:23 ?7372次閱讀

    應用程序屏蔽和應用程序內保護哪個更安全?

    眾所周知,攻擊者往往會使用用戶移動設備上運行的應用程序來攻擊后端的系統,比如攻擊者利用移動操作系統和你的應用程序中的漏洞來監視你,獲取私人數據甚至竊取資金。為了應對這種情況,許多移動應用程序
    的頭像 發表于 08-26 16:02 ?4406次閱讀

    不同應用程序的存儲IO類型解析

    存儲系統作為數據的載體,為前端的服務器和應用程序提供讀寫服務。存儲陣列某種意義上來說,是對應用服務器提供數據服務的后端服務器。應用服務器對存儲系統發送數據的讀和寫的請求。然而,不同的應用程序對存儲
    的頭像 發表于 11-30 15:21 ?2284次閱讀
    不同<b class='flag-5'>應用程序</b>的存儲IO類型解析

    MMU的工作原理梳理

    本文從內存管理的發展歷程角度層層遞進,介紹 MMU 的誕生背景,工作機制。而忽略了具體處理器的具體實現細節,將 MMU 的工作原理從概念上比較清晰的梳理了一遍。 MMU 誕生之前:在傳統的批處理
    的頭像 發表于 12-17 16:13 ?1.3w次閱讀
    MMU的<b class='flag-5'>工作原理</b>梳理

    前端與后端編程有什么區別

    什么是web開發?Web開發是創建網站或Web應用程序的過程。我們可以將其分為兩個主要層:前端開發和后端開發。 每個網站都有后端和前端。
    的頭像 發表于 05-05 18:19 ?1606次閱讀

    springboot前后端交互流程

    Spring Boot 是一個用于構建 Java 企業級應用程序的開源框架,它提供了一種簡化的開發方式,使得開發人員可以更加便捷地創建獨立的、可執行的 Spring 應用程序。在使用 Spring
    的頭像 發表于 11-22 16:00 ?2232次閱讀

    氣壓制動系統工作原理簡述

    氣壓制動系統的工作原理可以簡述如下: 一、系統概述 氣壓制動系統是一種通過壓縮空氣來實現制動的技術,廣泛應用于汽車行業中,特別是大型商用車和重型車輛。該系統利用發動機驅動的空氣壓縮機產生壓縮空氣,并
    的頭像 發表于 09-18 15:44 ?894次閱讀
    主站蜘蛛池模板: 翁熄性放纵交换01 | 云南14学生真实初次破初视频 | YIN荡的老师系列第6部分视频 | 国产三级在线精品男人的天堂 | 九九热这里都是精品 | 国产成人免费在线 | 久久免费看少妇级毛片蜜臀 | 国产69精品久久久久妇女 | 成人毛片手机版免费看 | 国产精品人妻无码免费A片导航 | 风车动漫(p)_在线观看官网 | 国产精品内射久久久久欢欢 | 国产精品大陆在线视频 | 日本国产精品无码一区免费看 | 亚洲欧美人成视频在线 | 国产精品美女WWW爽爽爽视频 | 午夜DJ国产精华日本无码 | 美女裸露100%奶头视频 | 国产成人久视频免费 | 成人在线视频网站 | 日韩精品免费在线观看 | 亚洲一区二区免费看 | 色偷偷亚洲男人天堂 | 色一欲一性一乱一区二区三区 | 日本老人oldmantv乱 | 国产精品亚洲精品久久品 | 草莓国产视频免费观看 | 97精品在线| 国产精品九九久久精品视 | 久久爽狠狠添AV激情五月 | 波多久久亚洲精品AV无码 | 青草伊人网 | 琪琪的色原网站 | 99蜜桃在线观看免费视频网站 | 國產麻豆AVMDXMDX | 亚洲人女同志video | 99精品成人无码A片观看金桔 | 无码中文字幕热热久久 | 久久久黄色大片 | 秋霞影音先锋一区二区 | 99久久久无码国产精品免费人妻 |