servlet定義

    servlet定義:web

Servlet是一個Java應用程序,運行在服務器端,用來處理客戶端請求並做出響應的程序。安全

Servlet多線程體系結構是創建在Java多線程機制之上的,它的生命週期是由Web容器負責的。服務器

     當客戶端第一次請求某個Servlet時,Servlet容器將會根據web.xml配置文件實例化這個Servlet類,此時它貯存於內存中。。當有新的客戶端請求該Servlet時,通常不會再實例化該Servlet類,也就是有多個線程在使用這個實例。這樣,當兩個或多個線程同時訪問同一個Servlet時,可能會發生多個線程同時訪問同一資源的狀況,數據可能會變得不一致。因此在用Servlet構建的Web應用時要注意線程安全的問題。每個請求都是一個線程,而不是進程,所以,Servlet對請求的處理的性能很是高。多線程

       對於Servlet,它被設計爲多線程的(若是它是單線程的,你就能夠想象,當1000我的同時請求一個網頁時,在第一我的得到請求結果以前,其它999我的都在鬱悶地等待),若是爲每一個用戶的每一次請求都建立一個新的線程對象來運行的話,系統就會在建立線程和銷燬線程上耗費很大的開銷,大大下降系統的效率。併發

所以,Servlet多線程機制背後有一個線程池在支持,線程池在初始化初期就建立了必定數量的線程對象,經過提升對這些對象的利用率,避免高頻率地建立對象,從而達到提升程序的效率的目的。(由線程來執行Servletservice方法,servletTomcat中是以單例模式存在的, Servlet的線程安全問題只有在大量的併發訪問時纔會顯現出來,而且很難發現,所以在編寫Servlet程序時要特別注意。線程安全問題主要是由實例變量形成的,所以在Servlet中應避免使用實例變量。若是應用程設計沒法避免使用實例變量,那麼使用同步來保護要使用的實例變量,但爲保證系統的最佳性能,應該同步可用性最小的代碼路徑)ide

 Struts2Action是原型,非單實例的;會對每個請求,產生一個Action的實例來處理。性能

         解決servlet線程安全的方案:同步對共享數據的操做 Synchronized (this){...}、避免使用實例變量this

客戶端向服務器端發出請求;spa

這個過程比較重要,這時Tomcat會建立兩個對象:HttpServletResponseHttpServletRequest。並將它們的引用(注意是引用)傳給剛分配的線程;.net

線程開始着手接洽servlet

④servlet根據傳來的是GETPOST,分別調用doGet()doPost()方法進行處理;

⑥servlet將處理後的結果經過線程傳回Tomcat,並在以後將這個線程銷燬或者送還線程池;

⑦Tomcat將處理後的結果變成一個HTTP響應發送回客戶端,這樣,客戶端就能夠接受處處理後的結果了。

相關文章
相關標籤/搜索