02.28 servlet文件和java文件有什麼區別?

吳帥澎


你這種問法估計有點問題,Servlet文件本身就是Java文件。你可能想問的是,servlet文件和JSP文件有什麼不同吧?Jsp文件是一種特殊的Servlet文件。


碼聞強識


Servlet是Server Applet的簡稱,是Java編寫的服務器端程序,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容。

這麼說吧:

Servlet是Java實現的 具有特定格式的 一個接口/類;

Servlet文件是Java文件中的一種。

servlet是一個供其他java程序調用的java類。他不能獨立運行,她的運行完全由servlet引擎控制和調度

針對客戶端的多次servlet請求,通常情況下,服務器只會創建一servlet實力對象,也就是說servlet一擔創建,他就會駐留在內存之中,為後續的其他請求服務,直至web容器推出,servlet實力對象才會被銷燬。

在servlet的整個生命週期內,servlet的init方法只會被調用一次,而對一個Servlet的每次訪問都導致引擎調用一次servlet的service方法。對於每次訪問請求,servlet引擎都會創建有哥httpservletRequest請求對象和一個httpservletReponse響應對象,然後將這兩個對象作為參數傳遞給servlet的service()方法。servlet方法再根據請求方式分別調用doXXX方法。

servlet的線程安全問題

當多個客戶端兵法訪問一個servlet時,web服務器會為每一個客戶端的訪問請求創建一個線程,並在這個線程調用servlet的service方法,因此service方法內如果放同一個資源的話,就有可能引發線程安全問題,

針對servlet線程安全問題,Sun公司是提供有解決方案的:讓Servlet去實現一個SingleThreadModel接口,如果某個Servlet實現了SingleThreadModel接口,那麼Servlet引擎將以但線程模式來調用期Service方法

查看Sevlet的API可以看到,SingleThreadModel接口中沒有定義任何方法和常量,在Java中,把沒有定義任何方法和常量的接口稱之為標記接口,經常看到的一個最典型的標記接口就是"Serializable",這個接口也是沒有定義任何方法和常量的,標記接口在Java中有什麼用呢?主要作用就是給某個對象打上一個標誌,告訴JVM,這個對象可以做什麼,比如實現了"Serializable"接口的類的對象就可以被序列化,還有一個"Cloneable"接口,這個也是一個標記接口,在默認情況下,Java中的對象是不允許被克隆的,就像現實生活中的人一樣,不允許克隆,但是隻要實現了"Cloneable"接口,那麼對象就可以被克隆了。

  讓Servlet實現了SingleThreadModel接口,只要在Servlet類的定義中增加實現SingleThreadModel接口的聲明即可。

  對於實現了SingleThreadModel接口的Servlet,Servlet引擎仍然支持對該Servlet的多線程併發訪問,其採用的方式是產生多個Servlet實例對象,併發的每個線程分別調用一個獨立的Servlet實例對象。

  實現SingleThreadModel接口並不能真正解決Servlet的線程安全問題,因為Servlet引擎會創建多個Servlet實例對象,而真正意義上解決多線程安全問題是指一個Servlet實例對象被多個線程同時調用的問題。事實上,在Servlet API 2.4中,已經將SingleThreadModel標記為Deprecated(過時的)。



三不猴vip


Servlet是在服務器端的Java程序,只不過它有一套規則(API),而JSP就是一套簡單規則的Servlet,JSP可以寫java代碼,html代碼,也可以寫JavaScript,CSS,但是到服務器端會被轉成Servlet程序,然後按Servlet執行順序執行。

JSP的本質就是Servlet,JVM只能識別java的類,不能識別JSP的代碼,Web容器將JSP的代碼編譯成JVM能夠識別的java類。

JSP 工作原理: JSP頁面在執行的時候都會被服務器端的JSP引擎轉換為Servlet(.java),然後又由JSP引擎調用Java編譯器,將Servlet(.java)編譯為Class文件(.class),並由Java虛擬機(JVM)解釋執行。

Servlet的應用邏輯是在Java文件中,從Java代碼中動態輸出HTML,並且完全從表示層中的HTML裡分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。


企校錦囊


servlet文件是什麼文件?Java文件是什麼文件?你連這個都沒搞清楚都敢提這種問題?servlet是Java web服務的標準接口,並不是什麼文件,所有允許在jdk下面運行的都是.Java文件編譯後的.class文件。實現了servlet接口的Java class才能運行在實現了servlet標準的容器中起作用。servlet文件應該表述為實現了servlet接口的Java class。有什麼區別呢?普通Java class不會被servlet容器識別,實現了servlet接口的才能被識別(如Tomcat還需要配置文件配置才能找到),為什麼呢?因為j2ee以servlet接口作為Java web開發規範,對外開放了相關接口,所以才有人根據規範開發了對應能運行servlet相關接口的容器,所以才有了Tomcat,jetty等承載Java web應用的容器。servlet只是Java web開發中標準規範,不能稱作為什麼servlet文件。


三觀不正定上斜下歪


這個問題本身存在問題,servlet在JAVA語言中不是文件他是用Java編寫的Server端程序,而JAVA文件是JAVA程序的源碼文件。這就是他們的區別


程序猿之奇異世界


servlet其實就屬於java的,java是個通的東西,包括了servlet。


分享到:


相關文章: