- Tomcat容器
Tomcat容器—>Servlet容器—>Context容器

- Servlet的生命周期
四步:servlet類加載--->實例化--->服務--->銷毀。
1、Web Client 向Servlet容器(Tomcat)發出Http請求
2、Servlet容器接收Web Client的請求
3、Servlet容器創建一個HttpRequest對象,將Web Client請求的信息封裝到這個對象中
4、Servlet容器創建一個HttpResponse對象
5、Servlet容器調用HttpServlet對象的service方法,把HttpRequest對象與HttpResponse對象作為參數
傳給 HttpServlet對象
6、HttpServlet調用HttpRequest對象的有關方法,獲取Http請求信息
7、HttpServlet調用HttpResponse對象的有關方法,生成響應數據
8、Servlet容器把HttpServlet的響應結果傳給Web Client
Servlet的框架是由兩個Java包組成的:javax.servlet與javax.servlet.http。在javax.servlet包中定義了所有的Servlet類都必須實現或者擴展的通用接口和類。在javax.servlet.http包中定義了采用Http協議通信的HttpServlet類。Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必須實現這個接口。
在Servlet接口中定義了5個方法,
其中3個方法代表了Servlet的生命周期:
1、init方法:負責初始化Servlet對象。
2、service方法:負責響應客戶的請求。
3、destroy方法:當Servlet對象退出生命周期時,負責釋放占用的資源。
public void init(ServletConfig config)throws ServletException{ //第一個 this.config = config; this.init(); } ·public void init()throws ServletException{ //第二個
}
當容器(tomcat)幫忙調用init(ServletConfig config)並且給傳過來一個參數config,這個方法把參數對象的引用指向類的成員變量this.config,並且調用類的 this.init()方法。我們一般重寫init()方法都是重寫的第二個,這樣當忘記寫super.init()時不會導致空指針的錯誤。如果我們在寫Servlet類時重寫init(ServletConfig config),那么忘記寫super.init(ServletConfig config),就容易造成出現空指針異常。所以,最好不要重寫init(ServletConfig config)。
public void setAttribute(String name,Object value) 將value對象以name名稱綁定到會話 public object getAttribute(String name) 取得name的屬性值,如果屬性不存在則返回null public void removeAttribute(String name) 從會話中刪除name屬性,如果不存在不會執行,也不會拋處錯誤. public Enumeration getAttributeNames() 返回和會話有關的枚舉值 public void invalidate() 使會話失效,同時刪除屬性對象 public Boolean isNew() 用於檢測當前客戶是否為新的會話 public long getCreationTime() 返回會話創建時間 public long getLastAccessedTime() 返回在會話時間內web容器接收到客戶最后發出的請求的時間 public int getMaxInactiveInterval() 返回在會話期間內客戶請求的最長時間.秒 public void setMasInactiveInterval(int seconds) 允許客戶客戶請求的最長時間 ServletContext getServletContext() 返回當前會話的上下文環境,ServletContext對象可以使Servlet與web容器進行通信 public String getId() 返回會話期間的識別號
4. servlet中的cookie到底有什么?
構造cookie 的方法 : new Cookie(鍵,值) 構造函數如下: Cookie(java.lang.String name, java.lang.String value) 把cookie發送給客戶端 HttpServletResponse.addCookie(javax.servlet.http.Cookie) 取得客戶瀏覽器的cookie,返回的是數組 HttpServletRequest.getCookies() getComment/setComment 獲取/設置Cookie的注釋。 getDomain/setDomain 獲取/設置Cookie適用的域。一般地,Cookie只返回給與發送它的服務器名字完全相同的服務器。使用這里的方法可以指示瀏覽器把Cookie返回給同一域內的其他服務器。注意域必須以點開始(例如.sitename.com),非國家類的域(如.com,.edu,.gov)必須包含兩個點,國家類的域(如.com.cn,.edu.uk)必須包含三個點。 getMaxAge/setMaxAge 獲取/設置Cookie過期之前的時間,以秒計。如果不設置該值,則Cookie只在當前會話內有效,即在用戶關閉瀏覽器之前有效,而且這些Cookie不會保存到磁盤上。 若生存時間為負值,代表瀏覽器關閉Cookie即消失。生存時間為0,代表刪除Cookie,生存時間為正數,代表Cookie存在多少秒。 getName/setName 獲取/設置Cookie的名字。本質上,名字和值是我們始終關心的兩個部分。由於HttpServletRequest的getCookies方法返回的是一個Cookie對象的數組,因此通常要用循環來訪問這個數組查找特定名字,然后用getValue檢查它的值。 getPath/setPath 獲取/設置Cookie適用的路徑。如果不指定路徑,Cookie將返回給當前頁面所在目錄及其子目錄下的所有頁面。這里的方法可以用來設定一些更一般的條件。例如,someCookie.setPath("/"),此時服務器上的所有頁面都可以接收到該Cookie。 getSecure/setSecure 獲取/設置一個boolean值,該值表示是否Cookie只能通過加密的連接(即SSL)發送。 getValue/setValue 獲取/設置Cookie的值。如前所述,名字和值實際上是我們始終關心的兩個方面。不過也有一些例外情況,比如把名字作為邏輯標記(也就是說,如果名字存在,則表示true)。 getVersion/setVersion 獲取/設置Cookie所遵從的協議版本。默認版本0(遵從原先的Netscape規范);版本1遵從RFC 2109 , 但尚未得到廣泛的支持。 幾個Cookie工具函數,獲取指定名字的Cookie值 該函數是ServletUtilities.java的一部分。getCookieValue通過循環依次訪問Cookie對象數組的各個元素,尋找是否有指定名字的Cookie,如找到,則返回該Cookie的值;否則,返回參數中給出的默認值。getCookieValue能夠在一定程度上簡化Cookie值的提取。
- 問題
1. 都是一些抽象類,那么誰實現這個接口或者抽象類了?