Java Servlet API說明文檔(2.1a版)(二)

來源:互聯網
上載者:User
servlet API對象的說明\r
這一部分包含了對Java Servlet API的全部類和介面的詳細說明。這個說明與Javadoc API差不多,但是這份文檔提供了更多的資訊。
API包含了兩個軟體包,十二個介面和九個類。
軟體包:javax.servlet
所包含的介面:RequestDispatcher;Servlet;ServletConfig;ServletContext;ServletRequest;ServletResponse;SingleThreadModel。
所包含的類:GenericServlet;ServletInputStream;ServletOutputStream;ServletException;UnavailableException。

一、RequestDispatcher介面:
定義:
public interface RequestDispatcher;
定義一個對象,從用戶端接收請求,然後將它發給伺服器的可用資源(例如Servlet、CGI、HTML檔案、JSP檔案)。Servlet引擎建立request dispatcher對象,用於封裝由一個特定的URL定義的伺服器資源。
這個介面是專用於封裝Servlet的,但是一個Servlet引擎可以建立request dispatcher對象用於封裝任何類型的資源。
request dispatcher對象是由Servlet引擎建立的,而不是由Servlet開發人員建立的。
方法
1、forward
public void forward(ServletRequest request, ServletReponse response)
throws ServletException, IOException;
被用來從這個Servlet向其它伺服器資源傳遞請求。當一個Servlet對響應作了初步的處理,並要求其它的對象對此作出響應時,可以使用這個方法。
當request對象被傳遞到目標對象時,請求的URL路徑和其他路徑參數會被調整為反映目標對象的目標URL路徑。
如果已經通過響應返回了一個ServletOutputStream對象或PrintWriter對象,這個方法將不能使用,否則,這個方法會拋出一個IllegalStateException。
2、include
public void include(ServletRequest request, ServletResponse response)
throws ServletException, IOException
用來包括髮送給其他伺服器資源的響應的內容。本質上來說,這個方法反映了伺服器端的內容。
請求對象傳到目標對象後會反映調用請求的請求URL路徑和路徑資訊。這個響應對象只能調用這個Servlet的ServletOutputStream對象和PrintWriter對象。
一個調用include的Servlet不能設定頭域,如果這個Servlet調用了必須設定頭域的方法(例如cookie),這個方法將不能保證正常使用。作為一個Servlet開發人員,你必須妥善地解決那些可能直接儲存頭域的方法。例如,即使你使用會話跟蹤,為了保證session的正常工作,你必須在一個調用include的Servlet之外開始你的session

二、Servlet介面。
定義\r
public interface Servlet
這個介面定義了一個Servlet:一個在Web伺服器上繼承了這個功能的Java類。
方法
1、init
public void init(ServletConfig config) throws ServletException;
Servlet引擎會在Servlet執行個體化之後,置入服務之前精確地調用init方法。在調用service方法之前,init方法必須成功退出。
如果init方法拋出一個ServletException,你不能將這個Servlet置入服務中,如果init方法在逾時範圍內沒完成,我們也可以假定這個Servlet是不具備功能的,也不能置入服務中。
2、service
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException;
Servlet引擎調用這個方法以允許Servlet響應請求。這個方法在Servlet未成功初始化之前無法調用。在Servlet被初始化之前,Servlet引擎能夠封鎖未決的請求。
在一個Servlet對象被卸載後,直到一個新的Servelt被初始化,Servlet引擎不能調用這個方法
3、destroy
public void destroy();
當一個Servlet被從服務中去除時,Servlet引擎調用這個方法。在這個對象的service方法所有線程未全部退出或者沒被引擎認為發生逾時操作時,destroy方法不能被調用。
4、getServletConfig
public ServletConfig getServletConfig();
返回一個ServletConfig對象,作為一個Servlet的開發人員,你應該通過init方法儲存ServletConfig對象以便這個方法能返回這個對象。為了你的便利,GenericServlet在執行這個介面時,已經這樣做了。
5、getServletInfo
public String getServletInfo();
允許Servlet向主機的Servlet運行者提供有關它本身的資訊。返回的字串應該是純文字格式而不應有任何標誌(例如HTML,XML等)。

三、ServletConfig介面
定義\r
public interface ServletConfig
這個介面定義了一個對象,通過這個對象,Servlet引擎配置一個Servlet並且允許Servlet獲得一個有關它的ServletContext介面的說明。每一個ServletConfig對象對應著一個唯一的Servlet。
方法
1、getInitParameter
public String getInitParameter(String name);
這個方法返回一個包含Servlet指定的初始化參數的String。如果這個參數不存在,返加空值。
2、getInitParameterNames
public Enumeration getInitParameterNames();
這個方法返回一個列表String對象,該對象包括Servlet的所有初始化參數名。如果Servlet沒有初始化參數,getInitParameterNames返回一個空的列表。
3、getServletContext
public ServletContext getServletContext();
返回這個Servlet的ServletContext對象。

四、ServletContext介面
定義\r
public interface ServletContext
定義了一個Servlet的環境對象,通過這個對象,Servlet引擎向Servlet提供環境資訊。
一個Servlet的環境對象必須至少與它所駐留的主機是一一對應的。在一個處理多個虛擬機器主機的Servlet引擎中(例如,使用了HTTP1.1的主機頭域),每一個虛擬機器主機必須被視為一個單獨的環境。此外,Servlet引擎還可以建立對應於一組Servlet的環境對象。
方法
1、getAttribute
public Object getAttribute(String name);
返回Servlet環境對象中指定的屬性對象。如果該屬性對象不存在,返回空值。這個方法允許訪問有關這個Servlet引擎的在該介面的其他方法中尚未提供的附加資訊。
2、getAttributeNames
public Enumeration getAttributeNames();
返回一個Servlet環境對象中可用的屬性名稱的列表。
3、getContext
public ServletContext getContext(String uripath);
返回一個Servlet環境對象,這個對象包括了特定URI路徑的Servlets和資源,如果該路徑不存在,則返回一個空值。URI路徑格式是/dir/dir/filename.ext。
為了安全,如果通過這個方法訪問一個受限制的Servlet的環境對象,會返回一個空值。
4、getMajorVersion
public int getMajorVersion();
返回Servlet引擎支援的Servlet API的主要版本號。例如對於2.1版,這個方法會返回一個整數2。
5、getMinorVersion
public int getMinorVersion();
返回Servlet引擎支援的Servlet API的次版本號碼。例如對於2.1版,這個方法會返回一個整數2。
6、getMimeType
public String getMimeType(String file);
返回指定檔案的MIME類型,如果這種MIME類型未知,則返回一個空值。MIME類型是由Servlet引擎的配置決定的。
7、getRealPath
public String getRealPath(String path);
一個符合URL路徑格式的指定的虛擬路徑的格式是:/dir/dir/filename.ext。用這個方法,可以返回與一個符合該格式的虛擬路徑相對應的真實路徑的String。這個真實路徑的格式應該適合於運行這個Servlet引擎的電腦(包括其相應的路徑解析器)。
不管是什麼原因,如果這一從虛擬路徑轉換成實際路徑的過程不能執行,該方法將會返回一個空值。
8、getResource
public URL getResource(String uripath);
返回一個URL對象,該對象反映位於給定的URL地址(格式:/dir/dir/filename.ext)的Servlet環境對象已知的資源。無論URLStreamHandlers對於訪問給定的環境是不是必須的,Servlet引擎都必須執行。如果給定的路徑的Servlet環境沒有已知的資源,該方法會返回一個空值。
這個方法和java.lang.Class的getResource方法不完全相同。java.lang.Class的getResource方法通過裝載類來尋找資源。而這個方法允許伺服器產生環境變數給任何資源的任何Servlet,而不必依賴於裝載類、特定地區等等。
9、getResourceAsStream
public InputStream getResourceAsStream(String uripath);
返回一個InputStream對象,該對象引用指定的URL的Servlet環境對象的內容。如果沒找到Servlet環境變數,就會返回空值,URL路徑應該具有這種格式:/dir/dir/filename.ext。
這個方法是一個通過getResource方法獲得URL對象的方便的途徑。請注意,當你使用這個方法時,meta-information(例如內容長度、內容類型)會丟失。
10、getRequestDispatcher
public RequestDispatcher getRequestDispatcher(String uripath);
如果這個指定的路徑下能夠找到活動的資源(例如一個Servlet,JSP頁面,CGI等等)就返回一個特定URL的RequestDispatcher對象,否則,就返回一個空值,Servlet引擎負責用一個request dispatcher對象封裝目標路徑。這個request dispatcher對象可以用來完全請求的傳送。
11、getServerInfo
public String getServerInfo();
返回一個String對象,該對象至少包括Servlet引擎的名字和版本號碼。
12、log
public void log(String msg);
public void log(String msg, Throwable t);
public void log(Exception exception, String msg); // 這種用法將被取消\r
寫指定的資訊到一個Servlet環境對象的log檔案中。被寫入的log檔案由Servlet引擎指定,但是通常這是一個事件log。當這個方法被一個異常調用時,log中將包括堆疊追蹤。
13、setAttribute
public void setAttribute(String name, Object o);
給予Servlet環境對象中你所指定的對象一個名稱。
14、removeAttribute
public void removeAttribute(String name);
從指定的Servlet環境對象中刪除一個屬性。
註:以下幾個方法將被取消\r
15、getServlet
public Servlet getServlet(String name) throws ServletException;
最初用來返回一個指定名稱的Servlet,如果沒找到就返回一個空值。如果這個Servlet能夠返回,這就意味著它已經被初始化,而且已經可以接受service請求。這是一個危險的方法。當調用這個方法時,可能並不知道Servlet的狀態,這就可能導致有關伺服器狀態的問題。而允許一個Servlet訪問其他Servlet的這個方法也同樣的危險。
現在這個方法返回一個空值,為了保持和以前版本的相容性,現在這個方法還沒有被取消。在以後的API版本中,該方法將被取消。
16、getServletNames
public Enumeration getServletNames();
最初用來返回一個String對象的列表,該列表表示了在這個Servlet環境下所有已知的Servlet對象名。這個列表總是包含這個Servlet自身。
基於與上一個方法同樣的理由,這也是一個危險的方法。
現在這個方法返回一個空的列表。為了保持和以前版本的相容性,現在這個方法還沒有被取消。在以後的API版本中,該方法將被取消。
17、getServlets
public Enumeration getServlets();
最初用來返回在這個Servelet環境下所有已知的Servlet對象的列表。這個列表總是包含這個Servlet自身。
基於與getServlet方法同樣的理由,這也是一個危險的方法。
現在這個方法返回一個空的列表。為了保持和以前版本的相容性,現在這個方法還沒有被取消。在以後的API版本中,該方法將被取消。

五、ServletRequest介面
定義\r
public interface ServletRequest
定義一個Servlet引擎產生的對象,通過這個對象,Servlet可以獲得用戶端請求的資料。這個對象通過讀取請求體的資料提供包括參數的名稱、值和屬性以及輸入資料流的所有資料。
方法
1、getAttribute
public Object getAttribute(String name);
返回請求中指定屬性的值,如果這個屬性不存在,就返回一個空值。這個方法允許訪問一些不提供給這個介面中其他方法的請求資訊以及其他Servlet放置在這個請求對象內的資料。
2、getAttributeNames
public Enumeration getAttributeNames();
返回包含在這個請求中的所有屬性名稱的列表。
3、getCharacterEncoding
public String getCharacterEncoding();
返回請求中輸入內容的字元編碼類型,如果沒有定義字元編碼類型就返回空值。
4、getContentLength
public int getContentLength();
請求內容的長度,如果長度未知就返回-1。
5、getContentType
public String getContentType();
返回請求資料體的MIME類型,如果類型未知返回空值。
6、getInputStream
public ServletInputStream getInputStream() throws IOException;
返回一個輸入資料流用來從請求體讀取位元據。如果在此之前已經通過getReader方法獲得了要讀取的結果,這個方法會拋出一個IllegalStateException。
7、getParameter
public String getParameter(String name);
以一個String返回指定的參數的值,如果這個參數不存在返回空值。例如,在一個HTTP Servlet中,這個方法會返回一個指定的查詢語句產生的參數的值或一個被提交的表單中的參數值。如果一個參數名對應著幾個參數值,這個方法只能返回通過getParameterValues方法返回的數組中的第一個值。因此,如果這個參數有(或者可能有)多個值,你只能使用getParameterValues方法。
8、getParameterNames
public Enumeration getParameterNames();
返回所有參數名的String對象列表,如果沒有輸入參數,該方法返回一個空值。
9、getParameterValues
public String[] getParameterValues(String name);
通過一個String對象的數組返回指定參數的值,如果這個參數不存在,該方法返回一個空值。
10、getProtocol
public String getProtocol();
返回這個請求所用的協議,其形式是協議/主要版本號.次版本號碼。例如對於一個HTTP1.0的請求,該方法返回HTTP/1.0。
11、getReader
public BufferedReader getReader() throws IOException;
這個方法返回一個buffered reader用來讀取請求體的實體,其編碼方式依照請求資料的編碼方式。如果這個請求的輸入資料流已經被getInputStream調用獲得,這個方法會拋出一個IllegalStateException。
12、getRemoteAddr
public String getRemoteAddr();
返回傳送要求者的IP地址。
13、getRemoteHost
public String getRemoteHost();
返回傳送要求者的主機名稱。如果引擎不能或者選擇不解析主機名稱(為了改善效能),這個方法會直接返回IP地址。
14、getScheme
public String getScheme();
返回請求所使用的URL的模式。例如,對於一個HTTP請求,這個模式就是http。
15、getServerName
public String getServerName();
返回接收請求的伺服器的主機名稱。
16、getServerPort
public int getServerPort();
返回接收請求的連接埠號碼。
17、setAttribute
public void setAttribute(String name, Object object);
這個方法在請求中添加一個屬性,這個屬性可以被其他可以訪問這個請求對象的對象(例如一個嵌套的Servlet)使用。
註:以下方法將被取消\r
getRealPath
public String getRealPath(String path);
返回與虛擬路徑相對應的真實路徑,如果因為某種原因,這一過程不能進行,該方法將返回一個空值。
這個方法和ServletContext介面中的getRealPath方法重複。在2.1版中,ServletContext介面將闡明一個Servlet所能用的所有的路徑的映射。該方法執行的結果將會與ServletContext中getRealPath方法的結果完全一樣。

六、ServletResponse介面
定義\r
public interface ServletResponse
定義一個Servlet引擎產生的對象,通過這個對象,Servlet對用戶端的請求作出響應。這個響應應該是一個MIME實體,可能是一個HTML頁、圖象資料或其他MIME的格式。
方法
1、getCharacterEncoding
public String getCharacterEncoding();
返回MIME實體的字元編碼。這個字元編碼可以是指定的類型,也可以是與要求標頭域所反映的用戶端所能接受的字元編碼最匹配的類型。在HTTP協議中,這個資訊被通過Accept-Charset傳送到Servlet引擎。
有關字元編碼和MIME的更多資訊請參看RFC 2047。
2、getOutputStream
public ServletOutputStream getOutputStream() throws IOException;
返回一個記錄二進位的響應資料的輸出資料流。
如果這個響應對象已經調用getWriter,將會拋出IllegalStateException。
3、getWriter
public PrintWriter getWriter throws IOException;
這個方法返回一個PringWriter對象用來記錄格式化的響應實體。如果要反映使用的字元編碼,必須修改響應的MIME類型。在調用這個方法之前,必須設定響應的content類型。
如果沒有提供這樣的編碼類別型,會拋出一個UnsupportedEncodingException,如果這個響應對象已調用getOutputStream,會拋出一個getOutputStream。
4、setContentLength
public void setContentLength(int length);
設定響應的內容的長度,這個方法會覆蓋以前對內容長度的設定。
為了保證成功地設定回應標頭的內容長度,在響應被提交到輸出資料流之前必須調用這個方法。
5、setContentType
public void setContentType(String type);
這個方法用來設定響應的content類型。這個類型以後可能會在另外的一些情況下被隱式地修改,這裡所說的另外的情況可能當伺服器發現有必要的情況下對MIME的字元設定。
為了保證成功地設定回應標頭的content類型,在響應被提交到輸出資料流之前必須調用這個方法。

七、SingleThreadModel介面
定義\r
public interface SingleThreadModel;
這是一個空介面,它指定了系統如何處理對同一個Servlet的調用。如果一個Servlet被這個介面指定,那麼在這個Servlet中的service方法中將不會有兩個線程被同時執行。
Servlet可以通過維持一個各自獨立的Servlet執行個體池,或者通過只讓Servlet的service中只有一個線程的方法來實現這個保證。

八、GenericServlet類\r
public abstract class GenericServlet implements Servlet,
ServletConfig, Serializable;
這個類的存在使得編寫Servlet更加方便。它提供了一個簡單的方案,這個方案用來執行有關Servlet生命週期的方法以及在初始化時對ServletConfig對象和ServletContext對象進行說明。
方法
1、destroy
public void destroy();
在這裡destroy方法不做任何其他的工作。
2、getInitParameter
public String getInitParameter(String name);
這是一個簡便的途徑,它將會調用ServletConfig對象的同名的方法。
3、getInitParameterNames
public Enumeration getInitParameterNames();
這是一個簡便的途徑,它將會調用ServletConfig對象的同名的方法。
4、getServletConfig
public ServletConfig getServletConfig();
返回一個通過這個類的init方法產生的ServletConfig對象的說明。
5、getServletContext
public ServletContext getServletContext();
這是一個簡便的途徑,它將會調用ServletConfig對象的同名的方法。
6、getServletInfo
public String getServletInfo();
返回一個反映Servlet版本的String。
7、init
public void init() throws ServletException;
public void init(ServletConfig config) throws ServletException;
init(ServletConfig config)方法是一個對這個Servlet的生命週期進行初始化的簡便的途徑。
init()方法是用來讓你對GenericServlet類進行擴充的,使用這個方法時,你不需要儲存config對象,也不需要調用super.init(config)。
init(ServletConfig config)方法會儲存config對象然後調用init()。如果你重載了這個方法,你必須調用super.init(config),這樣GenericServlet類的其他方法才能正常工作。
8、log
public void log(String msg);
public void log(String msg, Throwable cause);
通過Servlet content對象將Servlet的類名和給定的資訊寫入log檔案中。
9、service
public abstract void service(ServletRequest request, ServletResponse
response) throws ServletException, IOException;
這是一個抽象的方法,當你擴充這個類時,為了執行網路請求,你必須執行它。

九、ServletInputStream類\r
定義\r
public abstract class ServletInputStream extends InputStream
這個類定義了一個用來讀取用戶端的請求資訊的輸入資料流。這是一個Servlet引擎提供的抽象類別。一個Servlet通過使用ServletRequest介面獲得了對一個ServletInputStream對象的說明。
這個類的子類必須提供一個從InputStream介面讀取有關資訊的方法。
方法
1、readLine
public int readLine(byte[] b, int off, int len) throws IOException;
從輸入資料流的指定的位移量開始將指定長度的位元組讀入到指定的數組中。如果該行所有請求的內容都已被讀取,這個讀取的過程將結束。如果是遇到了新的一行,新的一行的首個字元也將被讀入到數組中。

十、ServletOutputStream類\r
定義\r
public abstract class ServletOutputStream extends OutputStream
這是一個由Servlet引擎使用的抽象類別。Servlet通過使用ServletResponse介面的使用獲得了對一個這種類型的對象的說明。利用這個輸出資料流可以將資料返回到用戶端。
這個類的子類必須提供一個向OutputStream介面寫入有關資訊的方法。
在這個介面中,當一個重新整理或關閉的方法被調用時。所有資料緩衝區的資訊將會被發送到用戶端,也就是說響應被提交了。請注意,關閉這種類型的對象時不一定要關閉隱含的socket流。
方法
1、print
public void print(String s) throws IOException;
public void print(boolean b) throws IOException;
public void print(char c) throws IOException;
public void print(int i) throws IOException;
public void print(long l) throws IOException;
public void print(float f) throws IOException;
public void print(double d) throws IOException;
輸出變數到輸出資料流中
2、println
public void println() throws IOException;
public void println(String s) throws IOException;
public void println(boolean b) throws IOException;
public void println(char c) throws IOException;
public void println(int i) throws IOException;
public void println(long l) throws IOException;
public void println(float f) throws IOException;
public void println(double d) throws IOException;
輸出變數到輸出資料流中,並增加一個斷行符號分行符號\r

十一、ServletException類\r
定義\r
public class ServletException extends Exception
當Servlet遇到問題時拋出的一個異常。
建構函式
public ServletException();
public ServletException(String message);
public ServletException(String message, Throwable cause);
public ServletException(Throwable cause);
構造一個新的ServletException,如果這個建構函式包括一個Throwable參數,這個Throwable對象將被作為可能拋出這個異常的原因。
方法
1、getRootCause
public Throwable getRootCause();
如果配置了拋出這個異常的原因,這個方法將返回這個原因,否則返回一個空值。

十二、UnavailableException類\r
定義\r
public class UnavailableException extends ServletException
不論一個Servlet是永久地還是臨時地無效,都會拋出這個異常。Servlet會記錄這個異常以及Servlet引擎所要採取的相應措施。
臨時的無效是指Servlet在某一時間由於一個臨時的問題而不能處理請求。例如,在另一個不同的應用程式層的服務(可能是資料庫)無法使用。這個問題可能會自行糾正或者需要採取其他的矯正措施。
永久的無效是指除非管理員採取措施,這個Servlet將不能處理用戶端的請求。例如,這個Servlet配置資訊丟失或Servlet的狀態被破壞。
Servlet引擎可以安全地處理包括永久無效在內的這兩種異常,但是對臨時無效的正常處理可以使得Servlet引擎更健壯。特別的,這時對Servlet的請求只是被阻止(或者是被延期)一段時間,這顯然要比在service自己重新啟動前完全拒絕請求更為科學。
建構函式
public UnavailableException(Servlet servlet, String message);
public UnavailableException(int seconds, Servlet servlet,
String message);
構造一個包含指定的描述資訊的新的異常。如果這個建構函式有一個關於秒數的參數,這將給出Servlet發生臨時無效後,能夠重新處理請求的估計時間。如果不包含這個參數,這意味著這個Servlet永久無效。
方法
1、getServlet
public Servlet getServlet();
返回報告無效的Servlet。這被Servlet引擎用來識別受到影響的Servlet。
2、getUnavailableSeconds
public int getUnavailableSeconds();
返回Servlet預期的無效時間,如果這個Servlet是永久無效,返回-1。
3、isPermanent
public boolean isPermanent();
如果這個Servlet永久無效,返回布爾值true,指示必須採取一些管理行動以使得這個Servlet可用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.