Servlet 运行工作原理详解
Servlet 運行工作原理詳解
瓜子二手車 秋季校招內推郵箱:liyoule@guazi.com,歡迎投簡歷哦
一、研發類校招
1.研發工程師(前端/后端/云平臺開發)
2.算法
3.測試開發
4.數據倉庫
5.安全工程師
二、運營/數據分析類職位校招
1.數據分析(商業分析/經營分析/業務分析等)
2.運營(品類運營)
三、產品類職位校招
1、產品經理
投遞方式:郵件發送簡歷至liyoule@guazi.com.郵件主題: [校招簡歷投遞] 姓名-學校-崗位
投遞截止時間: 2021/12/31 24:00
正文開始:
事實上,servlet就是一個Java接口,interface! 打開idea,ctrl + shift + n,搜索servlet,就可以看到是一個只有5個方法的interface!
所以,提問中說的網絡協議、http什么的,servlet根本不管!也管不著!
那servlet是干嘛的?很簡單,接口的作用是什么?規范唄!
servlet接口定義的是一套處理網絡請求的規范,所有實現servlet的類,都需要實現它那五個方法,其中最主要的是兩個生命周期方法 init()和destroy(),還有一個處理請求的service(),也就是說,所有實現servlet接口的類,或者說,所有想要處理網絡請求的類,都需要回答這三個問題:
你初始化時要做什么
你銷毀時要做什么
你接受到請求時要做什么
這是Java給的一種規范!就像阿西莫夫的機器人三大定律、行尸走肉里Rick的那三個問題一樣,規范!
servlet是一個規范,那實現了servlet的類,就能處理請求了嗎?
答案是,不能。
你可以隨便谷歌一個servlet的hello world教程,里面都會讓你寫一個servlet,相信我,你從來不會在servlet中寫什么監聽8080端口的代碼,servlet不會直接和客戶端打交道!
那請求怎么來到servlet呢?答案是servlet容器,比如我們最常用的tomcat,同樣,你可以隨便谷歌一個servlet的hello world教程,里面肯定會讓你把servlet部署到一個容器中,不然你的servlet壓根不會起作用。
tomcat才是與客戶端直接打交道的家伙,他監聽了端口,請求過來后,根據url等信息,確定要將請求交給哪個servlet去處理,然后調用那個servlet的service方法,service方法返回一個response對象,tomcat再把這個response返回給客戶端。
Servlet(Server Applet),全稱Java Servlet,未有中文譯文。是用Java編寫的服務器端程序。其主要功能在于交互式地瀏覽和修改數據,生成動態Web內容。狹義的Servlet是指Java語言實現的一個接口,廣義的Servlet是指任何實現了這個Servlet接口的類,一般情況下,人們將Servlet理解為后者。
Servlet運行于支持Java的應用服務器中。從原理上講,Servlet可以響應任何類型的請求,但絕大多數情況下Servlet只用來擴展基于HTTP協議的Web服務器。
最早支持Servlet標準的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服務器開始支持標準的Servlet。
工作流程
Web Client 向Servlet容器(Tomcat)發出Http請求
Servlet容器接收Web Client的請求
Servlet容器創建一個HttpRequest對象,將Web Client請求的信息封裝到這個對象中。
Servlet容器創建一個HttpResponse對象
Servlet容器調用HttpServlet對象的service方法,把HttpRequest對象與HttpResponse對象作為參數傳給 HttpServlet 對象。
HttpServlet調用HttpRequest對象的有關方法,獲取Http請求信息。
HttpServlet調用HttpResponse對象的有關方法,生成響應數據。
Servlet容器把HttpServlet的響應結果傳給Web Client。
處理請求流程
用戶點擊一個鏈接,指向了一個servlet而不是一個靜態頁面。
容器“看出”這個請求是一個Servlet,所以它創建了兩個對象HttpServletRequest和HttpServletResponse。
容器根據請求中的URL找到正確的Servlet,為這個請求創建或分配一個線程,并把請求和響應對象傳遞給這個Servlet線程。
容器調用Servlet的service()方法。根據請求的不同類型,service()方法會調用doGet()或doPost()方法。這里假設調用doGet()方法。
doGet()方法生成動態頁面,并把這個頁面“塞到”響應對象里,需要注意的是,容器還有響應對象的一個引用!
線程結束,容器把響應對象轉換為一個HTTP響應,并把它發回給客戶,然后刪除請求和響應對象。
工作原理
1、首先簡單解釋一下Servlet接收和響應客戶請求的過程,首先客戶發送一個請求,Servlet是調用service()方法對請求進行響應的,通過源代碼可見,service()方法中對請求的方式進行了匹配,選擇調用doGet,doPost等這些方法,然后再進入對應的方法中調用邏輯層的方法,實現對客戶的響應。在Servlet接口和GenericServlet中是沒有doGet()、doPost()等等這些方法的,HttpServlet中定義了這些方法,但是都是返回error信息,所以,我們每次定義一個Servlet的時候,都必須實現doGet或doPost等這些方法。
2、每一個自定義的Servlet都必須實現Servlet的接口,Servlet接口中定義了五個方法,其中比較重要的三個方法涉及到Servlet的生命周期,分別是上文提到的init(),service(),destroy()方法。GenericServlet是一個通用的,不特定于任何協議的Servlet,它實現了Servlet接口。而HttpServlet繼承于GenericServlet,因此HttpServlet也實現了Servlet接口。所以我們定義Servlet的時候只需要繼承HttpServlet即可。
3、Servlet接口和GenericServlet是不特定于任何協議的,而HttpServlet是特定于HTTP協議的類,所以HttpServlet中實現了service()方法,并將請求ServletRequest、ServletResponse 強轉為HttpRequest 和 HttpResponse。
總結
以上是生活随笔為你收集整理的Servlet 运行工作原理详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于基于jsp+mysql+Spring
- 下一篇: AxureUX中后台管理信息系统通用原型