日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Servlet 生命周期介绍

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Servlet 生命周期介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在面試的時候.

有時會被問到這個問題: 請描述一下Servlet的生命周期.

其實面試官就是想問你1個Servlet何時被創建, 何時被調用等....


本文就是詳細解答這個問題的.



總體流程圖



上面的流程圖從輸入網址 到瀏覽器地址欄開始, 到Web 服務器軟件關閉結束.

其中白底色的圖形代表的是瀏覽器在工作.

灰底色的指的是Web服務器軟件(例如Tomcat, IIS等)

黃底色的代表的是Servlet對象本身在工作.


下面對這個流程圖的每一步都進行解析.


一, 瀏覽器地址輸入地址

例如上面的地址欄輸入

http://localhost:8080/TestServlet2/ABC


其中:

http 指的是網頁瀏覽協議,? 大部分常用的都是http協議,? 需要嚴格安全管理的(例如需要傳送密碼的)的網頁往往會使用https 協議.

localhost 指的服務器名稱. 也就是瀏覽器要從網絡哪一臺主機去獲得需要瀏覽的內容.

8080 指的是服務器的Web 服務器程序用的是哪一個端口.?? 大部分網站都會讓web 服務器軟件使用80端口, 那么瀏覽器地址欄就不用輸入端口(默認就是80), tomcat默認使用的端口是8080.

TestServlet2 指的是網絡應用程序的名字, 這個應用程序是部署在web主機的web服務器軟件內的.? 記住, 這個網絡應用程序只是針對J2EE來講的.? 并不一定適用于其他技術編寫的網站(如asp.net. psp等)

ABC 只于這個地址名稱就是定義在servlet配置中的(一般在WEB-INF/web.xml中, 應用MVC的框架則可能配置在Control 類里)URL后序.? 每1個后序關鍵字對應1個Servlet對象. Web服務器軟件會將Http協議Get請求發送到這個servlet對象, 交由它處理.



二, 瀏覽器分析地址獲得Web主機的ip

例如上面那條URL,? 主機別名是localhost.

那么瀏覽器如何根據localhost 這個關鍵字獲得對應的ip.


第一步就是去瀏覽器所在機器的host文件去找.

例如linux機器的host 文件/etc/hosts 是這樣的: (windows也有host文件, 具體位置忘了)

gateman@TPEOS ~ $ cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 TPEOS 192.168.1.104 S960 #172.18.6.140 TPRHEL 192.168.1.105 TPRHEL #192.168.20.57 TPRHEL
可以到localhost 正是對應 127.0.0.1 就是本機地址了.


也就是講, 瀏覽器會將localhost解析成127.0.0.1的地址.


但是如果在host文件里找不到, 例如輸入www.163.com?

這是瀏覽器就需要到dns服務器去找, 總之, 必須解析出主機地址.


三,嘗試與web主機的web服務器軟件建立連接.

之前講過TCP協議了, 只需要知道主機地址和端口. 就可以利用socket發起1個連接請求.

Web服務器端, 一旦接受請求, 則會建立一條TCP傳輸通道.??


這個通道里面包含兩條Stream, 方向相反.



四, 瀏覽器發送http請求(Get/post)到web服務器軟件.

一旦瀏覽器與Web主機的服務器軟件(例如Tomcat, Jboss,IIS..)建立了一條連接通道.

瀏覽器就會按照Http協議發送get請求到web服務器軟件.


如上圖, 在瀏覽器按下F12可以看到開發者信息.


這個簡單的例子中,? 瀏覽器只發送了1個Get請求到服務器軟件.

在右下角可以見到該get請求的內容:

Host: localhost:8080 User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive
包括host信息,? 瀏覽器與操作系統信息等等..


實際上, 在上圖我們也看到服務器的反饋(respones) . 這個后面再講.



五, Web服務器軟件解析出對應Web應用程序.

好了, 到這一步, 主要工作就輪到Web服務器軟件了.

首先, Server App會繼續解析URL(包括在Get request)中.

對于Tomcat來講, 這一步會解析出對應的web 應用程序 TestServlet2


注: 1個web服務器軟件通常會同時管理多個網絡應用程序.



六, Web服務器軟件解析出對應的URL后序.

好了, 到了這步,?? 整個URL

http://localhost:8080/TestServlet2/ABC

就剩下/ABC 這一部分了.


這部分通常是Servlet來(本文就是基于Servlet技術來講的) 管理,? 對應關系通常編寫在../WEB-INF/web.xml里( MVC框架也可能在Controller類里)


這個例子中. web.xml 的 Servlet配置部分是這樣寫的:

<!-- servlet-name is the nick name of servlet objectThe source name is user defined, it's suggested that using the name of servlet class servlet-class is the full name(include packege path) of the servlet object--><servlet><servlet-name>MyFirstServlet</servlet-name> <servlet-class>com.pkg1.MyFirstServlet</servlet-class> </servlet><!-- the mapping of servlet of jsp actionthe servlet-name must be same with the above "servlet-name"url-pattern is the source name of which will access servlet objectit must be started with "/"--><servlet-mapping><servlet-name>MyFirstServlet</servlet-name> <url-pattern>/ABC</url-pattern></servlet-mapping>

先看servlet-mapping部分

/ABC 這個url match的是 MyFirstServlet 這個 Servlet 昵稱(Nick Name).


然后看servlet部分.

MyFirstServlet 對應的就是

com.pkg1.MyFirstServlet

而這個就是真正的要工作的Servlet類.


七, Web服務器軟件檢查Servlet對象是否存在.

在web世界中, 我們可以把每1個Servlet類都看成Singleton 類.

也就是講, 對于每1個Servlet類, 都只會有最多1個對象在工作, 不會同時存在兩個相同Servlet類的對象.


例如第6步, 根據/ABC? 得出com.pkg1.MyFirstServlet類后.? Web服務器軟件就會去檢查是否有1個對應的servlet對象已經被創建.


如果有則跳過第八步.




八, Web服務器軟件構造出Servlet對象.

注意, 這一步有1個前提, 就是當前該Servlet沒有任何1個對象被創建.(或者之前的被銷毀)


而我們常寫的Servlet類都沒有寫構造函數的.
一般是重寫 Init(), doGet(). doPost()..


實際上, 這個Servlet不是被new出來的, 而是web服務器軟件利用反射技術構建.( 根據類名創建該類的對象)


在這過程中, 這個Servlet里的init()函數會被執行一次.

而無論這個Servlet對象再被調用多少次, init()方法都不會再杯執行, 直至銷毀后重新創建.



九, Web服務器軟件把接收到的http 請求打包成1個ServletRequest對象, 在構造1個ServletResponse對象發給Servlet對象.

再得到1個Servlet對象后.

Web服務器軟件, 就會把從瀏覽器接收到的Http請求交給Servlet來處理.


其中ServletRequest對象里包含里傳入的參數, 而ServletResponese對象用于獲取Servlet對象的處理結果



十, Servlet對象工作

這里的代碼通常就是程序猿寫的業務代碼了


無非分兩個步驟

1, 處理傳入的ServletRequest對象里的信息

2. 把結果放在ServletRespones的對象里面(通常是利用里面的OutputStream)


這個例子的代碼:

System.out.println("service() has been called!"); res.getWriter().println("<font color=\"blue\" style=\"font-size:40px;\">Just a testing</font>");res.getWriter().flush();

可見它往ServletResponse對象的outputStream寫入了一段很簡單的html語句..


這個一步就是Servlet生命周期最核心的一步, 也是最常用的一步, 1個Servlet可能會被調用很多次, 這個就是Servlet對象的存在意義.



十一, WebServer 軟件對返回信息進行處理

Web服務器軟件會從ServletResponse這個對象中得出Servlet工作處理完的反饋信息.

但是這些信息通常不能被瀏覽器直接解析(或者很耗時間)


所以WebServer軟件通常會將這些信息翻譯成瀏覽器能直接閱讀的格式.


十二, WebServer 把返回信息發送會瀏覽器


看上圖右下角, 我們可以觀察得reponse里面的內容就是 servlet往outputStream寫的內容.

所以瀏覽器就中直接顯示3個藍色的單詞了.



十三, 如果對應的網絡程序被reload或者webServer本身被關閉, 則servlet對象會被銷毀

這個就是Servlet生命周期的最后一步了, 不難理解.

這時, servlet對象會執行自己的destory()方法.












































總結

以上是生活随笔為你收集整理的Servlet 生命周期介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产网站免费看 | 9人人澡人人爽人人精品 | 欧美精选一区 | 美女扒开腿男人爽桶 | 欧美美女性高潮 | 国产剧情一区二区三区 | 精品国模一区二区三区 | 娇妻玩4p被三个男人伺候电影 | 男男成人高潮片免费网站 | 三级精品在线 | 日韩激情国产 | 麻豆传媒视频入口 | 日韩操操 | 色乱码一区二区三区网站 | 国产另类自拍 | 91精品国产99久久久久久红楼 | 国产视频久久久久久 | 色综合99久久久无码国产精品 | 美日韩av在线 | 日日碰| 91美女高潮出水 | 欧美3p在线观看 | 最好看的mv中文字幕国语电影 | 夜夜骑夜夜操 | 9l视频自拍蝌蚪9l视频成人 | 成人黄页 | jjzz日本女人| 高清国产mv在线观看 | 91蜜桃网 | 国产免费成人在线视频 | 亚洲欧美日本一区二区三区 | 午夜不卡在线观看 | 国产欧美自拍 | 一级片a级片 | 艳妇乳肉豪妇荡乳 | 日本黄视频网站 | 久久精品无码一区 | www.99在线| 免费三片在线观看网站v888 | 精品福利三区3d卡通动漫 | 日韩网站免费观看高清 | 亚洲精品成人片在线观看精品字幕 | 欧美另类视频在线观看 | 久久久久中文 | 国产一区二区三区在线播放无 | www欧美 | 日韩国产欧美 | 69网站在线观看 | 欧美伊人网 | 中文字幕日韩人妻在线视频 | 毛片2 | 国产福利精品一区 | 国产欧美一区二区三区精品酒店 | 美女乱淫 | 亚洲精品视频在线播放 | 亚欧毛片| 东京热一本视频一区 | 国产中文字幕精品 | 毛片3| 久久性视频 | 不用播放器av | 日韩成人在线视频观看 | 日本成人一区二区三区 | 色播在线| 91爱爱影院 | 一级午夜 | 欧美日韩国产精品一区二区 | 中文字幕欧美人妻精品一区蜜臀 | 手机在线看永久av片免费 | 精品亚洲一区二区三区 | 在线看三级 | 岛国av一区| 国产福利免费 | 日本在线一区 | 国产在线激情视频 | 国产污视频在线看 | 在线五月天 | 日本呦呦 | 五月婷婷伊人网 | 精品久久久久成人码免费动漫 | 看一级黄色 | 亚洲精品一区二区口爆 | 91精品推荐 | 国产成人综合在线视频 | 亚洲1区| 日本不卡123 | 久久久久99人妻一区二区三区 | 国产视频手机在线观看 | 久草视频在线播放 | 婷婷玖玖 | 2019国产精品 | 番号动态图 | 欧美日本中文字幕 | 成人天堂av | 91黄视频在线观看 | 尤物久久| 欧美区一区二区 | 免费性情网站 | 亚洲午夜久久久久久久久久久 |