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