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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Servlet的生命周期 与CGI的区别

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

2019獨角獸企業重金招聘Python工程師標準>>>

對于Servlet,服務器只創建每個servlet的單一實例,每個用戶請求都會引發新的線程-----將用戶請求將會給相應的doGet/doPost進行處理。那么,servlet是如何進行創建和銷毀的?

當首次創建servlet時,它的init方法會得到調用,在這之前首先是服務器加載相應的servlet。init是放置一次性代碼 的地方,在這之后,針對每個用戶請求,都會創建一個線程,該線程調用前面創建的實例的service方法。多個并發請求一般會導致多個線程的同時調用 service(盡管可以實現特殊的接口,如 SingleThreadModel,規定任何時間只允許單個線程運行)。在調用service方法后,根據service方法收到的HTTP請求的類型,調用doGet,doPost,若其他doXxx方法,最后,如果服務決定缷載某個service,它會首先調用servlet的destroy方法。

service方法?

服務器每次接收到對servlet的請求,都會產生一個新的線程,調用service方法,service方法檢查HTTP請求的類型(GET,POST,PUT,DELETE等)并相應地調用doGet,doPost,doPut,doDelete等方法,GET請求起因于正常的URL請求,或沒有指定method="post"的表單請求。POST請求起因于特別將POST列為method的HTML表單,其他HTTP請求都由定制客戶生成。

如果我們需要在servlet中等同地處理POST和GET請求,我們有可能會不去實現doPost doGet方法,而是直接配覆寫service方法。但是這樣做不是一個好的思想,我們應該在doPost方法中調用doGet或相反。

public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{

??

? ?doGet(request,response);

}

public void doGet()throws ServletException,IOException{ ? // 相應的業務處理方法代碼?

}

這樣做有幾處優點:首先,我們還可以添加doPut,doTrace等方法,支持HTTP請求方法;其次,可以通過添加getLastModified方法加入對修改日期的支持。


destroy方法

服務器可以會決定移除之前載入的servlet實例,這時候它會調用servlet的destroy方法,從而使得servlet有機會關閉數據庫連接、停止后臺運行的線程、將cookie列表和點擊計數寫入到磁盤,并執行其他清理活動。在這里,要注意的是 web服務器可能會崩潰;所以我們不應該將destory機制作為向磁盤上保存狀態的惟一機制。如果服務器執行諸如點擊計數,或對cookie值(表示特殊的訪問 )的列表進行累加等活動,應該主動地定期將數據寫到磁盤上。


Servlet 與CGI的區別:

與CGI的區別在于servlet處于服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務于多個請求,并且其實例一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成后就銷毀,所以效率上低于servlet。

轉載于:https://my.oschina.net/u/938966/blog/107654

總結

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

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