要介紹 Servlet 必須要先把 Servlet 容器說清楚,Servlet 與 Servlet 容器的關系有點像槍和子彈的關系,槍是為子彈而生,而子彈又讓槍有了殺傷力。雖然它們是彼此依存的,但是又相互獨立發展,這一切都是為了適應工業化生產的結果。從技術角度來說是為了解耦,通過標準化接口來相互協作。既然接口是連接 Servlet 與 Servlet 容器的關鍵,那我們就從它們的接口說起。
常用Web服務器。 動態網頁技術。 Tomat簡介。 HTTP協議簡介。 Web Application簡介。 Servlet簡介。 第一個Servlet程序。 Servlet生命周期。 Cookie。 Session。 Application、Page、Request。 Filter、Listener。 Servlet線程安全問題。
Servlet是服務器端的Java小程序。用于響應客戶機的請求。 在默認情況下,Servlet采用一種無狀態的請求-響應處理方式。Servlet代碼的主要作用是為了增強Java服務器端功能。
Servlet:Java的服務器端小程序,是使用JAVA實現的CGI程序。傳統的CGI程序使用的是多進程的處理方式,而使用JAVA實現的CGI程序與傳統CGI相比,使用的是多線程的處理方式。
簡介:Servlet是JavaEE規范體系的重要組成部分,也是Java開發人員必須具備的基礎技能,Servlet3.0是Servlet規范的最新版本。本文主要介紹了Servlet3.0引入的若干重要新特性,包括異步處理、新增的注解支持、可插性支持等等,為讀者順利向新版本過渡掃清障礙.Servlet3.0新特性概述Servlet3.0作為JavaEE6規范體系中一員,隨著JavaEE6規范一起發布。該版本在前一版本(Servlet2.5)的基礎上提供了若干新特性用于簡化Web應用的開發和部署。其中有幾項特性的引入讓開發者感到非常興奮,同時也獲得了Java社區的一片贊譽之聲:異步處理支持。
Servlet的生命周期是由servlet的容器來控制的。分為3個階段:初始化階段、運行階段、銷毀階段。
世界上的各地區都有本地的語言。地區差異直接導致了語言環境的差異。在開發一個國際化程序的過程中,處理語言問題就顯得很重要了。
servlet生命周期中只有一個對象,即一次實例化后就可以一直處理請求,因為一次實例化后就已經把.Class文件Load到內存中了。這也說明只有在servlet生命周期中沒有對象時才調用destroy()方法。而且一個servlet生命周期中只有一次初始化,即只調用一次init(servletconfig)方法。
Servlet監聽器用于監聽一些重要事件的發生,監聽器對象可以在事情發生前、發生后可以做一些必要的處理。下面將介紹幾種常用的監聽器,以及它們都適合運用于那些環境。
Catalina由許多組件構成。當Catalina啟動時,那些組件也需要啟動。當前Catalina停止時,那些組件也必須擁有釋放資源的機會。例如,當容器停止工作時,它必須調用它內部的所有Servlet的destroy方法并且session管理器必須將session對象保存在備用儲備中。一個使組件啟動和停止始終如一的措施是讓當前組件實現org.apache.catalina.Lifecycle接口,一個實現了這個接口的組件可以引起下列的事件:BEFORE_START_EVENT、START_EVENT、AFTER_START_EVENT、BEFORE_STOP_EVENT、STOP_EVENT、AFTER_STOP_EVENT。前三個事件在組件啟動時會被激活,后三個事件在組件停止時會被激活。事件是通過org.apache.catalina.LifecycleEvent定義,當然,如果想讓Catalina組件可以激活一個事件,那么你必須編寫此事件的監聽器。監聽器通過org.apache.catalina.LifecycleListener定義。<br> 這一章將談論Lifecycle、LifecycleEvent、LifecycleListener這三種生命周期接口。并且,我們也會講解一個叫做LifecycleSupport的實用類,這個類為組件提供了一種簡單的方法去激活生命周期事件并且分配聲明周期監聽器。在這一章,我們將使用一些實現了Lifecycle接口的類去建立一個應用程序,這個應用程序是基于在第五章的第二個應用程序的。
容器是處理某個Servlet接收到的請求并且將此Servlet做出的響應返還給web客戶端的單元,org.apache.catalina.Container接口定義了容器的規范并且這里有四種容器:Engine,Host,Context,Wrapper。這一章講述了Context和Wrapper,其他的兩種容器留在第13章講述。這一章通過對容器接口的討論開始,然后講述一個容器內的各個部分的運行順序,然后我們查看Wrapper和Context接口。在這一章的結尾,將有兩個各自演示簡單的Wrapper和簡單的Context的例子。
ServletContext是servlet與servlet容器之間的直接通信的接口。Servlet容器在啟動一個Web應用時,會為它創建一個servletContext對象。每個web應用有唯一的servletContext對象。同一個web應用的所有servlet對象共享一個serveltContext,servlet對象可以通過它來訪問容器中的各種資源。
Servlet規范定義,在默認情況下(Servlet不是在分布式的環境中部署),Servlet容器對聲明的每一個Servlet,只創建一個實例。如果有多個客戶請求同時訪問這個Servlet,Servlet容器如何處理這多個請求呢?答案是采用多線程,Servlet容器維護了一個線程池來服務請求。線程池實際上是等待執行代碼的一組線程,這些線程叫做工作者線程(WorkerThread)。Servlet容器使用一個調度者線程(DispatcherThread)來管理工作者線程。當容器接收到一個訪問Servlet的請求,調度者線程從線程池中選取一個工作者線程,將請求傳遞給該線程,然后由這個線程執行Servlet的service()方法。
servlet可以被認為是服務器端的applet。servlet被Web服務器加載和執行,就如同applet被瀏覽器加載和執行一樣。servlet從客戶端(通過Web服務器)接收請求,執行某種作業,然后返回結果。 使用servlet的基本流程如下: ·客戶端(很可能是Web瀏覽器)通過HTTP提出請求。 ·Web服務器接收該請求并將其發給servlet。如果這個servlet尚未被加載,Web服務器將把它加載到Java虛擬機并且執行它。 ·servlet將接收該HTTP請求并執行某種處理。 ·servlet將向Web服務器返回應答。 ·Web服務器將從servlet收到的應答發送給客戶端。
Servlet可以用來擴充Java-enabledserver的基本功能,而今日最常使用的是增加webserver的互動性,它提供了強而有力且具效率的技術來取代CGI(commongatewayinterface)。傳統的webserver只提供靜態網頁的服務,并不能產生動態網頁。為了克服此限制,我們通常都會另外撰寫程式,而這類為了產生動態網頁或是擴充web-server的基本功能的程式便稱為web applications。它可以簡單的只做關鍵字搜尋,但其動作的復雜度也可以像電子簽章般。為了解servlet的優點我們必須認識一些其它設計web application的方法。
servlet筆試題目1.說一說Servlet的生命周期?答:servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。與cgi的區別在于servlet處于服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務于多個請求,并且其實例一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成后就銷毀,所以效率上低于servlet。
這是一份關于2.1版Java Servlet API的說明文檔,作為對這本文檔的補充,你可以到http://java.sun.com/products/servlet/index.html下面下載Javadoc格式的文檔。Java Servlet API由兩個軟件包組成:一個是對應HTTP的軟件包,另一個是不對應HTTP的通用的軟件包。這兩個軟件包的同時存在使得Java Servlet API能夠適應將來的其他請求-響應的協議。 這份文檔以及剛才提及的Javadoc格式的文檔都描述了這兩個軟件包,Javadoc格式的文檔還描述了你應該如何使用這兩個軟件包中的所有方法。