java面试题8 牛客:在Web应用程序中,( )负责将HTTP请求转换为HttpServletRequest对象
在Web應(yīng)用程序中,(??? )負(fù)責(zé)將HTTP請求轉(zhuǎn)換為HttpServletRequest對象
A Servlet對象 B HTTP服務(wù)器 C Web容器 D JSP網(wǎng)頁首先我們來看看web程序的整個過程
web的基本工作流程
首先,我們先來思考一下我們平常在上網(wǎng)瀏覽網(wǎng)頁時候的場景,大致就是打開一個web瀏覽器,輸入某一個網(wǎng)站的地址,然后轉(zhuǎn)到該網(wǎng)址,在瀏覽器中得到該網(wǎng)址的頁面。從這個場景中我們可以抽象出來幾個基本對象,我們(用戶)、web瀏覽器(客戶端)和發(fā)送過來頁面的地方(服務(wù)端),這些對象其實(shí)就是整個web工作流程中的重要組成部分。
?
為了加強(qiáng)理解,其實(shí)可以將這個工作流程看做去吃飯時點(diǎn)餐的流程,web瀏覽器就是服務(wù)員,而服務(wù)端就是廚房。你給服務(wù)員說你要點(diǎn)什么菜,然后服務(wù)員將你點(diǎn)的菜端上來,具體廚房里是怎么忙活的也并不知道,其實(shí)web服務(wù)器就相當(dāng)于廚師,有著各種各樣的技能,根據(jù)你的成菜要求,為你進(jìn)行服務(wù),數(shù)據(jù)庫在這里可以認(rèn)為是個菜窖,需要什么菜去拿什么菜。
web中的一些基本概念
HTTP
HTTP協(xié)議(Hyper Text Transfer Protocol,超文本傳輸協(xié)議)是用于從web服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議,是因特網(wǎng)中的“多媒體信使”。它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少。它不僅保證計(jì)算機(jī)正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內(nèi)容首先顯示(如文本先于圖形)等。同時,HTTP使用的是可靠的數(shù)據(jù)傳輸協(xié)議,即使是來自于地球另一端的數(shù)據(jù),它也可以確保數(shù)據(jù)在傳輸?shù)倪^程中不會丟失和損壞,保證了用戶在訪問信息時的完整性。HTTP是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種協(xié)議,后面還會介紹其他的互聯(lián)網(wǎng)常用協(xié)議(https,ftp,file,mailto等)。
按照上述點(diǎn)餐流程理解的話就是廚師具備煎、炒、烹、炸、溜、爆、煸、蒸、燒、煮等多種烹調(diào)技法,你需要告訴廚師這道菜怎么做。
web客戶端和服務(wù)端
web服務(wù)器是web資源的宿主,每天都有數(shù)以億計(jì)的圖片、HTML頁面、視頻、音頻等資源在互聯(lián)網(wǎng)上傳輸,而這些資源信息都是存儲在web服務(wù)器(由于web服務(wù)器使用的是HTTP協(xié)議,所以也常常被稱作HTTP服務(wù)器)上的。如果客戶端向服務(wù)器發(fā)送HTTP請求,服務(wù)器會在HTTP響應(yīng)中回送所請求的數(shù)據(jù)以及其他一些數(shù)據(jù)信息,包括對象,對象類型,對象長度等。
最常見的web客戶端就是web瀏覽器,web瀏覽器向服務(wù)器請求HTTP對象,并將這些對象顯示在你的屏幕上。其他的客戶端還有“網(wǎng)絡(luò)蜘蛛”(spiders)、“web機(jī)器人”(Web robots)等。這些客戶端還被稱作Agent代理,可以代表用戶發(fā)起HTTP請求,后面提到的“網(wǎng)絡(luò)蜘蛛”、“web機(jī)器人”都是自動代理,可以在無人監(jiān)視的情況下,自動發(fā)起HTTP請求并獲取相應(yīng)內(nèi)容,也就是我們常說的“網(wǎng)絡(luò)爬蟲”。
URI
Web上可用的每種資源 HTML文檔、圖像、視頻片段、程序等,均由一個通用資源標(biāo)識符(Uniform Resource Identifier, 簡稱”URI”)進(jìn)行定位。這個就像是快遞地址一樣,快遞小哥根據(jù)你的地址才能找到你你給你快遞,然后你返回給快遞小哥一個簽收單,而這個地址在世界范圍內(nèi)唯一標(biāo)識并定位資源信息。
給定了URI,HTTP就可以解析出來對象,URI有兩種形式——URL和URN。
URL
統(tǒng)一資源定義符(Uniform Resource Locator)是資源標(biāo)識符最常用的形式,它提供了一種定位因特網(wǎng)上任意資源的手段。URL精確地說明了某資源的位置以及如何去訪問它。?
URL的語法會隨著方案的不同而有所變化,但都遵循一個通用的語法規(guī)則。
大多數(shù)URL方案的語法都遵循由這9個部分構(gòu)成的通用格式上,但是幾乎沒有URL全部包含了這些組件。
瀏覽器的工作流程
在了解完web的工作流程后及相關(guān)基本概念后,再來了解一下瀏覽器的工作流程。瀏覽器是我們最常用的客戶端工具,那它的工作流程是怎樣的呢?在這之前我們先來了解一下IP地址的概念。
IP地址是指互聯(lián)網(wǎng)協(xié)議地址(英語:Internet Protocol Address,又譯為網(wǎng)際協(xié)議地址),是IP Address的縮寫。IP地址是IP協(xié)議提供的一種統(tǒng)一的地址格式,它為互聯(lián)網(wǎng)上的每一個網(wǎng)絡(luò)和每一臺主機(jī)分配一個邏輯地址,以此來屏蔽物理地址的差異。
這個概念是不是和前面介紹的URL很像?那其實(shí)URL沒有使用數(shù)字形式的IP地址,它使用的是文本形式的域名,或者稱為主機(jī)名。主機(jī)名就是IP地址比較人性化的別稱。想象一下,每次訪問網(wǎng)站的時候,需要輸入的是一串IP地址,那得有多繁瑣。所以可以通過一種名為域名服務(wù)(DNS)的機(jī)制幫我們將主機(jī)名轉(zhuǎn)化為IP地址,這樣繁瑣的問題就簡單化了。瀏覽器的工作流程也就基本清楚了。
連接
大概介紹了web的工作流程和HTTP報文之后,我們來看一下報文是如何傳輸?shù)摹T贖TTP客戶端向服務(wù)器發(fā)送報文之前,需要用到我們前面所提到的IP地址和端口號在客戶端與服務(wù)器之間建立一條TCP/IP連接。這里涉及到一個傳輸控制協(xié)議(Transmission Control Protocol,TCP)的概念。首先我們看一下HTTP網(wǎng)絡(luò)協(xié)議棧
TCP具有以下幾個特征
- 無差錯的數(shù)據(jù)傳輸
- 按序傳輸(按照發(fā)送順序送達(dá))
- 未分段的數(shù)據(jù)流(可以在任何時候以任意尺寸發(fā)出數(shù)據(jù))
所以只要建立了TCP連接,客戶端與服務(wù)器之間的報文交換就不會丟失、不會被破壞、不會出現(xiàn)錯序。在TCP中,你只需要知道服務(wù)器的IP地址以及運(yùn)行在服務(wù)器上特定程序相關(guān)的端口號,就可以了,而具體到客戶端與服務(wù)器之間是需要通過Socket“三次握手”進(jìn)行連接,這里不做贅述。
在解析域名,建立TCP/IP連接,發(fā)送http報文,得到響應(yīng)結(jié)果后,服務(wù)器會斷開TCP連接,瀏覽器顯示內(nèi)容。但是如果服務(wù)器或客戶端在報文中增加connection:keep-alive的名/值對,就表示客戶端與服務(wù)器之間會繼續(xù)保持連接,在下次使用時可以繼續(xù)使用該連接。
一、為什么要轉(zhuǎn)換
因?yàn)镾ervletRequest中只提供了獲取基本信息的方法,沒有獲取用戶請求類型的方法。
所以就必須要將ServletRequest轉(zhuǎn)成HttpServletRequest。因?yàn)镠ttpServletRequest與Http協(xié)議相關(guān)的,
所以它包含了獲取用戶請求類型的方法叫:getMethod.
二、為什么能轉(zhuǎn)換成功
因?yàn)?#xff0c;在tomcat內(nèi)部創(chuàng)建的這個request它就是httpservletrequest接口的子類。
三、轉(zhuǎn)換內(nèi)部代碼實(shí)現(xiàn)的原理
1、用戶發(fā)出doGet或doPost請求到tomcat容器。
2、tomcat接受到請求后會準(zhǔn)備好request對象,response對象,
3、tomcat初始化程序員創(chuàng)建的HTttpServlet的子類,這里創(chuàng)建的子類名稱為:hiServlet,同時調(diào)用doGet方法,傳遞request和response對象地址。
4、tomcat這兩個對象傳遞到hiServlet類,在下圖的myeclipse控制臺可以看到是RequestFacade類會去調(diào)用父類HTTPServlet類的service(ServletRequest req, ServletResponse res)方法。
在這個方法中將請求轉(zhuǎn)換成HttpServletRequest請求。
所以這題選c,我是歌謠,歡迎發(fā)布你的理解
文章僅個人理解,來在各大網(wǎng)站。如有不合理之處,歡迎吐槽。
閱讀目錄(置頂)(長期更新計(jì)算機(jī)領(lǐng)域知識)https://blog.csdn.net/weixin_43392489/article/details/102380691
閱讀目錄(置頂)(長期更新計(jì)算機(jī)領(lǐng)域知識)https://blog.csdn.net/weixin_43392489/article/details/102380882
閱讀目錄(置頂)(長期科技領(lǐng)域知識)https://blog.csdn.net/weixin_43392489/article/details/102600114
歌謠帶你看java面試題 https://blog.csdn.net/weixin_43392489/article/details/102675944
?
總結(jié)
以上是生活随笔為你收集整理的java面试题8 牛客:在Web应用程序中,( )负责将HTTP请求转换为HttpServletRequest对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows10安装oracle10
- 下一篇: 06 - 雷达发射机 概述