天天看點

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

目錄

    • **ServletConfig接口**
    • **ServletContext接口**
    • **Servlet接口**
    • **GenericServlet類**
    • **HTTPServlet類**
    • **ServletRequest接口**
    • **HttpServletRequest接口**
    • **ServeletResponse**
    • **HttpServletResponse接口**
    • **RequestDispatcher接口**
    • **Filter接口**
    • **FilterChain接口**
    • **FilterConfig接口**
    • 與會話事件相關
    • 官方文檔

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。 */
}
           

與會話事件相關

官方文檔