再看下面文字時,首先我們要將上面的圖搞清楚,這樣在編碼的時候就會根據不同的需求去繼承不同的類了
Servlet API的核心是javax.servlet.Servlet介面,所有的servlet類都必須繼承這一介面,在Servlet介面中定義了5個方法,其中3個方法都有servlet容器來調用,容器會在servlet的生命週期的不同階段來調用不同的方法。
@init(ServletConfigconfig)方法:負責初始化servlet對象。容器在建立好之後就開始調用這個方法。
@service(ServletRequestreq,ServletResponse res)方法:負責響應客戶的請求。當容器收到來自用戶端的訊息之後,就會調用servic方法然後根據http協議中的get方法or post方法然後在servlet中用相應的doGet()和doPost方法來進行處理。
@destroy()方法:負責釋放servlet對象佔有的資源,當servlet對象結束生命週期的時候就會調用此方法。
當我們的servlet繼承了GenericServlet類之後,就會自動複寫父類的 @Override
public voidservice(ServletRequest req, ServletResponse res)
throwsServletException, IOException {
}方法。
此時將詳細講解ServletRequest 介面:
在上述的方法裡有一個ServletRequest類型的參數。ServletRequest類表示來自用戶端的請求,當servlet容器接收到用戶端要訪問特定的servlet請求之後,容器先解析用戶端的未經處理資料,把它封裝成一個ServletRequest對象。當容器調用servlet對象的service方法時,就可以把ServletRequest作為參數傳遞給service()方法
ServletRequest介面提供了一系列讀取用戶端的請求資料的方法
@getContentLength():返回請求本文的長度,如果請求本文長度未知,則返回-1;
@getContentType():獲得請求本文的MIME類型,如果請求本文的類型未知,則返回null
@getInputStream():用於讀取請求本文的輸入資料流
@getLocalAddr():返回伺服器端的IP地址
@getLocalName():返回伺服器端的主機名稱
@getLocalPort():返回伺服器端的ftp連接埠號碼
@getParameter(String name):根據給定的參數名,返回請求中德匹配請求參數值
@getProtocol():返回用戶端和伺服器端通訊所用的協議名稱及版本號碼
@getReader():返回用於讀取字串形式的請求本文的BufferReader對象。
@getRemoteAddr():返回用戶端的ip地址
@getRemoteHost():返回用戶端的主機名稱
@getRemotePort():返回用戶端的ftp連接埠號碼
此外在ServletRequest介面中還定義了一組用於在請求範圍記憶體取共用資料的方法
@setAttribute(String name,Object object):在請求範圍之內儲存一個屬性值,參數name表示屬性名稱,參數object表示屬性值
@getAttribute(String name):根據name參數給定的屬性名稱,返回請求範圍內匹配的屬性值
@removeAttribute(String name):從請求範圍內刪除一個屬性值
此時將詳細講解ServletResponse介面:
在ServletResponse介面中定義了一系列與產生響應結果相關的方法
@setCharacterEnocoding(String charset)設定響應本文的字元編碼,預設是iso-8859-1
@setContentLength(int len)設定響應本文的長度
@setContentType(String type):設定響應本文的MIME的類型
@getCharacterEncoding():返迴響應本文的字元編碼
@getContentType()返迴響應本文的的MIME類型
@setBufferSize(int size):設定用於存放響應本文資料的緩衝區的大小
@getBufferSize ():獲得用於存放響應本文資料的緩衝區的大小
@reset():清空緩衝區的本文資料,並且清空響應狀態碼及回應標頭
@resetBuffer():僅僅清空緩衝區本文資料,不清空響應狀態碼及回應標頭
@flushBuffer():強制性地把緩衝區資料的響應本文資料發送到用戶端
@isCommited():返回一個boolean,true代表緩衝資料以提交給用戶端,false相反
@getOutputStream():返回一個ServletOutputStream對象用它來輸出位元據
@getWriter():返回一個PrintWriter對象,servlet用它來輸出字串形式的資料
當繼承HttpServlet後會複寫父類的以下方法
public class Setvlert extendsHttpServlet {
publicSetvlert() {
super();
}
public voiddestroy() {
super.destroy();// Just puts "destroy"string in log
}
public voiddoGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
response.setContentType("text/html");
PrintWriter out =response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML4.01 Transitional//EN\">");
}
public voiddoPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
response.setContentType("text/html");
PrintWriter out =response.getWriter();
}
public void init()throws ServletException {
}
}
HttpServletRequest介面是ServletRequest介面的子介面。HttpServletRequest介面提供了用於讀取Http請求中的相關資訊
@getScheme()方法返回請求的計劃,比如http,https或者ftp.
@getServerName()方法返回被發送請求的伺服器的主機名稱
@getServerPort()方法返回被發送請求的連接埠號碼。
@getContextPath()返回請求地址的根目錄,以"/"開關,但不是以"/"結尾。
一個常用的獲得伺服器位址的連接字串是:
String path = request.getContextPath();
String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
@getCookies() 取得cookie
@getMethod() 取得要求方法,如get,post或put
@getRequestURL() 取得請求URL(統一資源定位器)
@getRequestURI() 取得請求URI(統一資源識別項)
@getSession() 取得對應session
@getHeaderNames()返回請求包含的所有頭名稱的一個enumeration(遍曆器)
HttpServletReponse介面提供了用於設定Http請求中的相關資訊
@從Servlet中可以通過getWriter方法取得PrintWriter對象,來輸出字元資料。從Servlet中可以通過getOutputStream方法取得ServletoutputStream對象。ServletOutputStream既可以輸出字元資料,也可以輸出MIME格式的位元據。如果getWriter方法已經被使用過,當使用getOutputStream時,會有java.lang.IllegalStateException例外拋出。
@setContentType方法:在響應中可以表明內容格式和長短。
@setBufferSize方法:設定Web容器的緩衝器大小; getBufferSize方法返回Web容器的緩衝器大小; resetBuffer方法清空並重設緩衝器,使用reset方法清空緩衝器、狀態頭資訊,使用flushBuffer方法將緩衝器內的所有輸出內容向客戶傳遞。使用isCommitted方法判斷是否響應已經被履行。“履行”的定義是指狀態代碼冬耕 資訊已經被寫入響應。
@setLocal方法設定響應的地區資訊,主要在Web程式的國際貨幣國際化時使用。這個方法應該在getWriter之前被使用。預設的Web伺服器的地區資訊。
HttpServletResponse繼承了ServletResponse介面,並提供了與Http協議有關的方法,這些方法的主要功能是設定HTTP狀態代碼和管理Cookie。
@setStatus方法用來設定Servlet向用戶端返回的狀態代碼,它用來設定沒有出錯的狀態。如果Servlet運行出錯,Servlet可以使用sendError方法設定狀態代碼,如sendError(int sc)方法設定錯誤狀態碼。sendError(int sc,String msg)方法除了設定狀態代碼,還向客戶發出一條錯誤資訊。
@setHeader可以指定特定名稱的頭資訊的值,addDateheader,addIntHeader,setDateHeader,setIntHeader可以加入或理性特定時間或整數型頭資訊。
@addCookie方法可以在Web伺服器響應中加入Cookie對象,這個對象將被瀏覽器所儲存。Cookie機制也被用來維護工作階段狀態。
@sendRedirect方法向客戶發出臨時重新導向的響應。它產生的響應狀態代碼為302。該響應給了客戶一個新的URL風趣。如果緩衝器已經被清空,這個方法會彈出一個IllegalStateException例外。