2017-04-24 14 views
0

我是網絡服務的新手,我想了解平靜的澤西島執行情況。我有一些疑問,我GOOGLE了它,但不能得到滿意的答覆平臺進程與CGI和servlet有什麼不同?

,因爲我們知道下面的servlet的生命週期階段:

加載和實例:在實例化的servlet 容器調用初始化的時間(ServletConfig)這個方法在 servlet的整個生命週期中只調用一次。關鍵是容器將在Servlet的整個生命週期中只創建一次 對象。

服務:一旦加載和實例完成每個請求來 由服務method.Now這個servlet句柄下一個請求容器 不會再創造的servlet的對象時,它創建單獨的線程來 柄新來請求。這是CGI應用程序執行servlet的好的主要原因之一,因爲(在CGI每次都有客戶端請求時,HTTP服務器會創建新進程的實例,以 來服務這個請求,這是性能殺手)。

Destroy:容器調用destroy()方法向servlet 指示該servlet正在退出服務。一旦servlet的服務方法中的所有線程退出或在超時時間結束後都調用 ,則此方法僅調用 。

我是對的嗎?

現在開始第二部分當我們爲每個調用請求容器創建澤西資源時,我們得到了每次調用構造函數時都會看到的資源類的單獨實例。

@Path("myresource") 
public class MyResource { 
    public MyResource(){ 
    System.out.prinln("hi"); 
    } 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getIt() { 
     return "Got it!"; 
    } 
} 

我的問題是如何澤西過程是不同於CGI?如果不是爲什麼人們爲了表現而妥協?

+0

可能重複的[Java CGI與Servlets](http://stackoverflow.com/questions/8401465/java-cgi-vs-servlets) – stdunbar

+0

我知道Java CGI與Servlets,這就是爲什麼我解釋有問題,我想知道球衣與這些球衣有何不同? –

回答

0

最終,JAX-RS規範說(部分JAX-RS 2.0規範的3.1.1)

缺省情況下爲每個請求該資源創建一個新的資源類實例。首先調用構造函數(請參閱 第3.1.2節),然後注入任何所需的依賴關係(請參閱第3.2節),然後調用相應的 方法(參見第3.3節),最後該對象可用於垃圾回收

所以是的,JAX-RS資源類和CGI腳本之間有一些相似之處。但主要區別在於,創建新對象和垃圾收集要比分叉/執行新流程要便宜得多。我認爲對於超高性能的JAX-RS可能比Servlets慢。實施取決於你決定什麼效果最好。

相關問題