Servlet相關接口、類的方法整理

ServletConfig接口

servlet 容器使用的 servlet 配置對象,該對象在初始化期間從web.xml文件獲取配置信息傳遞給 servlet。

public interface ServletCofig{
	public String getInitParameter(String name) 
     /*返回包含指定初始化參數的值的String或null*/     
 	public ServletContext getServletContext() 
    /*返回一個ServletContext對象,調用者用於與其servlet容器交互*/  
	public String getServletName() 
	/*返回servlet實例名稱*/
	public Enumeration getInitParameterNames() 
    /*返回包含 servlet 初始化參數名稱的 String 對象的 Enumeration*/
 }

ServletContext接口

定義一組方法,servlet 使用這些方法與其 servlet 容器進行通信,例如,獲取文件的 MIME 類型、分發請求或寫入日誌文件。

public interface ServletContext{
	public String getInitParameter(String name)
	/*返回指定參數名稱的參數值*/
	public Enumeration getInitParameterNames()
	/*返回上下文的初始化參數的名稱*/
	public void setAttribute(String name,Object object)
	/*將對象綁定到此 servlet 上下文中的給定屬性名稱。*/
	public Object getAttribute(String name)
	/*返回指定名稱的屬性*/
	public Enumeration getInitParameterNames()
	/*返回上下文的初始化參數的名稱,作爲String對象的枚舉*/
	public void removeAttribute(String name)
	/*從servlet上下文中刪除給定名稱的屬性*/
}

Servlet接口

Servlet接口定義了一些生命週期方法以及getServletConfig()和getServletInfo()。

public interface Servlet{
	public void init(ServletConfig config) throws ServletException
	/*servlet容器在實例化servlet之後調用此方法將servlet放入服務準備接受請求,可拋出異常*/
	public void service(ServletRequest req,ServletResponse res)throws ServletException,IOException
	/*servlet容器調用以允許servley響應請求,可拋出妨礙servlet操作或輸入/出的異常*/
	public void destory();
	/*servlet容器取出servlet,清除內存線程等,確保持久狀態與該servlet的狀態保持同步*/
	public ServletConfig getServletConfig();
	/*返回ServletConfig對象,對象包含此servlet的初始化和啓動參數,傳遞給init()*/
	public String getServletInfo();
	/*返回純文本的字符串,包含servlet的信息如作者版本版權*/
}

GenericServlet類

定義一般的、與協議無關的 servlet。實現 Servlet 和 ServletConfig 接口,所以servlet 可以直接擴展 GenericServlet重寫抽象 service 方法即可。

public abstract class GenericServlet extends Object implements Servlet,ServletConfig,Serializable{  
   
 	public String getInitParameter(String name) 
    /*返回包含指定初始化參數的值的String或null*/    
 	public Enumeration getInitParameterNames() 
    /*返回包含 servlet 初始化參數名稱的 String 對象的 Enumeration*/         
	public String getServletInfo() 
    /*返回純文本的字符串,包含servlet的信息如作者版本版權*/
 	public String getServletName() 
     /*返回servlet實例名稱*/    

	 public ServletConfig getServletConfig() 
    /*返回此 servlet 的 ServletConfig 對象*/    
	public ServletContext getServletContext() 
    /*返回一個ServletContext對象,調用者用於與其servlet容器交互*/  
 	public void init() 
 	/*重寫不必調用 super.init(config) */         
 	public void init(ServletConfig config) 
 	/*servlet容器在實例化servlet之後調用此方法將servlet放入服務準備接受請求,可拋出異常;在重寫方法時,調用 super.init(config)*/ 
 	abstract public  void service(ServletRequest req, ServletResponse res)  throws ServletException, java.io.IOException
	/*由 servlet 容器調用,以允許 servlet 響應某個請求。*/
 	 public void destroy() 
	 /*取出servlet*/  
	      
	public void log(String msg) 
     /*將前置有 servlet 名稱的指定消息寫入 servlet 日誌文件*/     
 	public void log(String message, Throwable t) 
 	/*將前置有 servlet 名稱的給定 Throwable 異常的解釋性消息和堆棧跟蹤寫入 servlet 日誌文件*/          
	
	public GenericServlet()
	/*不執行操作,servlet初始化由init方法完成*/
	//以及一些繼承自Object的方法
}

HTTPServlet類

提供將要被子類化以創建適用於 Web 站點的 HTTP servlet 的抽象類。service將HTTP請求分發給相應類型的do×××方法,所以HttpServlet 的子類至少必須重寫以下一個方法:

  • doGet,如果 servlet 支持 HTTP GET 請求
  • doPost,用於 HTTP POST 請求
  • doPut,用於HTTP PUT 請求
  • doDelete,用於 HTTP DELETE 請求
  • init 和 destroy,用於管理 servlet的生命週期內保存的資源
  • getServletInfo,servlet 使用它提供有關其自身的信息
public abstract class HttpServlet extends GenericServlet implements Serializable{
	protected  void doDelete(HttpServletRequest req, HttpServletResponse resp)          
	protected  void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException          
	protected  void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
    protected  void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
    protected  void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
	protected  void doPut(HttpServletRequest req, HttpServletResponse resp)throws ServletException, java.io.IOException
	protected  void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
	protected  long getLastModified(HttpServletRequest req)
    protected  void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
	void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException

   
	public HttpServlet()
	/*抽象類構造方法無操作*/
	//從GenericServlet繼承來的方法
	/*從Object繼承來的方法clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait*/
}

直接看官方文檔
doget()由服務器通過service方法調用,子類重寫後以支持servlet處理GET請求,也就支持了HTTP HEAD請求(返回響應中沒有正文、只有請求頭字段的GET請求)。
重寫此方法時,讀取請求數據、寫入響應頭、獲取響應的編寫者或輸出流對象,最後,寫入響應數據。最好包括內容類型和編碼。使用 PrintWriter 對象返回響應時,在訪問 PrintWriter 對象之前設置內容類型。
提交響應前,servlet 容器必須寫入響應頭,因爲在 HTTP 中響應頭必須在響應正文之前發送。
如有可能,應設置 Content-Length 頭(使用 javax.servlet.ServletResponse#setContentLength 方法),以允許 servlet 容器使用持久連接向客戶端返回響應,從而改進性能。如果響應緩衝區能夠容納整個響應,則自動設置內容長度。
使用 HTTP 1.1 存儲塊編碼時(這意味着響應具有 Transfer-Encoding 頭),不要設置 Content-Length 頭。
GET 方法應該是安全的,也就是說,沒有需要用戶負責的任何副作用。例如,大多數形式查詢沒有副作用。如果某個客戶端請求用於更改存儲數據,則該請求應該使用某個其他 HTTP 方法。
GET 方法還應該是冪等的,這意味着可以安全地重複使用它。有時使某個方法是安全的也會使其成爲冪等的。例如,重複查詢既是安全的,又是冪等的,但在線購買某個產品或修改數據則既不是安全的又不是冪等的。
如果servlet無法處理對GET的請求或IO錯誤則報錯。

getLastModified()返回上次修改HttpServletRequest 對象的時間,是從格標開始的毫秒數或-1。
支持 HTTP GET 請求並且可以快速確定其上次修改時間的 servlet 應該重寫此方法。這使瀏覽器和代理緩存更有效地工作,減少服務器和網絡資源上的負載。

doHead() 接收來自受保護 service 方法的 HTTP HEAD 請求並處理該請求。當客戶端只想看到響應的頭(比如 Content-Type 或 Content-Length)時,它可以發送一個 HEAD 請求。HTTP HEAD 方法計算響應中的輸出字節數,以便準確設置 Content-Length 頭。
如果重寫此方法,可以避免計算響應正文而僅直接設置響應頭,從而提高性能。確保編寫的 doHead 方法是既安全又冪等的(也就是說,保護它自己不被一個 HTTP HEAD 請求多次調用)。

doPost()由服務器調用(通過 service 方法),以允許 servlet 處理 POST 請求。 HTTP POST 方法允許客戶端一次將不限長度的數據發送到 Web 服務器,這在發送諸如信用卡號之類的信息時很有用。
重寫此方法時,讀取請求數據、寫入響應頭、獲取響應的編寫者或輸出流對象,最後,寫入響應數據。最好包括內容類型和編碼。使用 PrintWriter 對象返回響應時,在訪問 PrintWriter 對象之前設置內容類型。
提交響應前,servlet 容器必須寫入響應頭,因爲在 HTTP 中響應頭必須在響應正文之前發送。
如有可能,應設置 Content-Length 頭(使用 javax.servlet.ServletResponse#setContentLength 方法),以允許 servlet 容器使用持久連接向客戶端返回響應,從而改進性能。如果響應緩衝區能夠容納整個響應,則自動設置內容長度。
使用 HTTP 1.1 存儲塊編碼時(這意味着響應具有 Transfer-Encoding 頭),不要設置 Content-Length 頭。
此方法不需要是安全的或冪等的。通過 POST 請求的操作可能產生用戶需要負責的副作用,例如,更新存儲數據或在線購買商品。

doput()由服務器調用(通過 service 方法),以允許 servlet 處理 PUT 請求。 PUT 操作允許客戶端將文件放在服務器上,類似於通過 FTP 發送文件。
在重寫此方法時,隨請求一起發送的所有內容頭都要保持原樣,這些內容頭包括 Content-Length、Content-Type、Content-Transfer-Encoding、Content-Encoding、Content-Base、Content-Language、Content-Location、Content-MD5 和 Content-Range。如果某個方法無法處理內容頭,則它必鬚髮出一條錯誤消息 (HTTP 501 - Not Implemented) 並丟棄該請求。有關 HTTP 1.1 的更多信息參見 RFC 2616 。
此方法不需要是安全的或冪等的。doPut 執行的操作可能具有用戶需要負責的副作用。使用此方法時,在臨時存儲器中保存受影響 URL 的副本可能會很有用。

doDelete()由服務器調用(通過 service 方法),以允許 servlet 處理 DELETE 請求。 DELETE 操作允許客戶端從服務器中移除文檔或 Web 頁面。
此方法不需要是安全的或冪等的。通過 DELETE 請求的操作可能具有用戶需要負責的副作用。使用此方法時,在臨時存儲器中保存受影響 URL 的副本可能會很有用。

doOptions()由服務器調用(通過 service 方法),以允許 servlet 處理 OPTIONS 請求。 OPTIONS 請求可確定服務器支持哪些 HTTP 方法,並返回相應的頭。例如,如果 servlet 重寫 doGet,則此方法返回以下頭: Allow:GET, HEAD, TRACE, OPTIONS
無需重寫此方法,除非 servlet 實現了 HTTP 1.1 實現的那些方法以外的新 HTTP 方法。

doTrace()由服務器調用(通過 service 方法),以允許 servlet 處理 TRACE 請求。 TRACE 將隨 TRACE 請求一起發送的頭返回給客戶端,以便在調試中使用它們。無需重寫此方法。

public void service()將客戶端請求分發給受保護的 service 方法。無需重寫此方法。
protected void service()接收來自 public service 方法的標準 HTTP 請求,並將它們分發給此類中定義的 doXXX 方法。此方法是 javax.servlet.Servlet#service 方法的特定於 HTTP 的版本。無需重寫此方法。

//public
public void service(ServletRequest req, ServletResponse res)  
        throws ServletException, IOException  
{  
        HttpServletRequest request;  
        HttpServletResponse response;  
        try  
        {  
            request = (HttpServletRequest)req;  
            response = (HttpServletResponse)res;  
        }  
        catch(ClassCastException e)  
        {  
            throw new ServletException("non-HTTP request or response");  
        }  
        service(request, response);  
}
//protected
protected void service(HttpServletRequest req, HttpServletResponse resp)  
        throws ServletException, IOException  
{  
    String method = req.getMethod();  
    if(method.equals("GET"))  
    {  
        long lastModified = getLastModified(req);  
        if(lastModified == -1L)  
        {  
            doGet(req, resp);  
        }   
        ....  
        //rest of the code  
    }  
}

ServletRequest接口

定義將客戶端請求信息提供給某個 servlet 的對象。servlet 容器創建 ServletRequest 對象,並將該對象作爲參數傳遞給該 servlet 的 service 方法。
ServletRequest 對象提供包括參數名稱、參數值、屬性和輸入流的數據。

public interface ServletRequest {
	public String getParameter(String name)
	/*用於通過名稱獲取參數的值*/
	public String[] getParameterValues(String name)
	/*返回一個包含給定參數名稱的所有值的String數組。它主要用於獲取多選列表框的值*/
	java.util.Enumeration getParameterNames()
	/*返回所有請求參數名稱的枚舉*/
	public int getContentLength()
	/*返回請求實體數據的大小,如果未知則返回-1*/
	public String getCharacterEncoding()
	/*返回此請求輸入的字符集編碼*/
	public String getContentType()
	/*返回請求實體數據的網絡媒體類型,如果未知則返回null*/
	public ServletInputStream getInputStream() throws IOException
	/*返回用於讀取請求正文中二進制數據的輸入流*/
	public abstract String getServerName()
	/*返回接收請求的服務器的主機名*/
	public int getServerPort()
	/*返回接收到此請求的端口號*/
	public RequestDispatcher getRequestDispatcher(String path)
	/*返回一個 RequestDispatcher 對象,它充當位於給定路徑上的資源的包裝器。可以使用 RequestDispatcher 對象將請求轉發給資源,或者在響應中包含資源。資源可以是動態的,也可以是靜態的。*/
	//其他
	}

HttpServletRequest接口

public interface HttpServletRequest extends ServletRequest{
	String getAuthType() 
          
 	String getContextPath() 
          
 	Cookie[] getCookies() 
    /*返回此請求中包含的所有 Cookie 的數組或null*/     
 	long getDateHeader(String name) 
       
 	String getHeader(String name) 
          
 	Enumeration getHeaderNames() 
          
 	Enumeration getHeaders(String name) 
          
 	int getIntHeader(String name) 
         
 	String getMethod() 
         
 	String getPathInfo() 
         
 	String getPathTranslated() 
          
 	String getQueryString() 
         
 	String getRemoteUser() 
         
 	String getRequestedSessionId() 
          
 	String getRequestURI() 
          
 	StringBuffer getRequestURL() 
          
 	String getServletPath() 
          
 	HttpSession getSession() 
         
 	HttpSession getSession(boolean create) 
         
 	Principal getUserPrincipal() 
         
 	boolean isRequestedSessionIdFromCookie() 
         
 	boolean isRequestedSessionIdFromUrl() 
          
 	boolean isRequestedSessionIdFromURL() 
          
 	boolean isRequestedSessionIdValid() 
         
 	boolean isUserInRole(String role) 
          
    //以及繼承來的方法      

}

ServeletResponse

定義輔助 servlet 將響應發送到客戶端的對象。servlet 容器創建 ServletResponse 對象,並將它作爲參數傳遞給 servlet 的 service 方法。

public interface ServletResponse{
	public void setContentType(String type)
	/*設置將發送到客戶端的響應的內容類型*/
	public java.io.PrintWriter getWriter() throws java.io.IOException
	/*返回可將字符文本發送到客戶端的 PrintWriter 對象。PrintWriter 使用 #getCharacterEncoding 返回的字符編碼。*/
}

HttpServletResponse接口

擴展 ServletResponse 接口以提供特定於 HTTP 的發送響應功能。例如,該接口擁有訪問 HTTP 頭和 cookie 的方法。
servlet 容器創建 HttpServletResponse 對象,並將該對象作爲參數傳遞給 servlet 的 service 方法(doGet、doPost,等等)。

public interface HttpServletResponse extends ServletResponse{
	public void sendRedirect(String location) throws java.io.IOException
	/*使用指定重定向位置 URL 將臨時重定向響應發送到客戶端*/
}

RequestDispatcher接口

定義接收來自客戶端的請求並將它們發送到服務器上的任何資源(比如 servlet、HTML 文件或 JSP 文件)的對象。servlet 容器可創建 RequestDispatcher 對象,該對象被用作包裝位於特定路徑上的服務器資源或通過特定名稱給定的服務器資源的包裝器。 

此接口用於包裝 servlet,但 servlet 容器可創建包裝任何類型資源的 RequestDispatcher 對象。

public interface RequestDispatcher{
	public void forward(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
	/*將請求從一個 servlet 轉發到服務器上的另一個資源(servlet、JSP 文件或 HTML 文件)。此方法允許一個 servlet 對請求進行初步處理,並使另一個資源生成響應。 
通過 getRequestDispatcher() 獲得的 RequestDispatcher,ServletRequest 對象使其路徑元素和參數進行調整以匹配目標資源的路徑。 
	在將響應提交到客戶端之前(在刷新響應正文輸出之前),應該調用 forward。如果已經提交了響應,則此方法拋出 IllegalStateException。在轉發之前,自動清除響應緩衝區中未提交的輸出。 
	request 和 response 參數必須是傳入調用的 servlet service 方法的對象,或者是包裝它們的 ServletRequestWrapper 或 ServletResponseWrapper 類的子類。
*/
	public void include(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
	/*包含響應中某個資源(servlet、JSP 頁面和 HTML 文件)的內容。事實上,此方法支持編程式服務器端包含。 
	ServletResponse 對象使其路徑元素和參數不根據調用者的路徑元素和參數發生改變。包含的 servlet 無法更改響應狀態代碼或設置頭;任何更改嘗試都將被忽略。 
	request 和 response 參數必須是傳入調用的 servlet service 方法的對象,或者是包裝它們的 ServletRequestWrapper 或 ServletResponseWrapper 類的子類。
*/
}

Filter接口

過濾器是執行過濾任務的對象,這些任務是針對對某一資源(servlet 或靜態內容)的請求或來自某一資源的響應執行的,抑或同時針對這兩者執行。

public interface Filter{
	public void init(FilterConfug config) throws ServletException
	/*將指示放入服務中的過濾器以實現之後的過濾工作*/
}
	public void doFilter(ServletRequest requst,ServletReponse reponse,FilterChain chain) 
throws java.io.IOException,SerletException
	/*允許Filter將請求響應傳到鏈中的下一個實體*/
	public void destory()
	/*取出過濾器,同步*/

FilterChain接口

用來調用下一個資源

public interface FilterChain{
	public void doFilter(ServletRequest request, ServletResponse response) throws java.io.IOException, ServletException

}

FilterConfig接口

servlet 容器使用的過濾器配置對象,該對象在初始化期間將信息傳遞給過濾器。

public interface FilterConfig{
	public String getFilterName()
	/*返回過濾器名稱*/
	public ServletContext getServletContext()
	/*返回對調用者在其中執行操作的ServletContext的引用*/
	public String getInitParameter(String name)
	/*返回包含指定初始化參數的值的String或null*/
	public java.util.Enumeration<E> getInitParameterNames()
	/*以 String 對象的 Enumeration 的形式返回過濾器初始化參數的名稱或空的 Enumeration。 */
}

與會話事件相關

官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章