前言
前面說到Servlet的由來、工作流程及創建等,這篇文章繼續說下servlet的API。
正文
一、概覽-Servlet API中主要的接口和類
二、Servlet 接口
要編寫一個Servlet,需要實現javax.servlet.Servlet接口,該接口定義了5個方法
//1、Servlet容器通過ServletConfig 參數向Servlet傳遞配置信息
public void init(ServletConfig config) throws ServletException
//2、處理客戶端的請求
public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException
//3、 釋放Servlet 對象的資源,隨後該對象會被java的垃圾收集器所回收
public void destory()
//4、ServletConfig對象包含了Servlet的初始化參數,傳遞給init方法
public ServletConfig getSevletConfig()
//5、該方法返回關於Servlet的信息
public java.lang.string getServletInfo()
三、ServletResquest 和 ServletResoponse 接口
Servlet 由 Servlet 容器來管理,當客戶請求到來時,容器創建一個ServletRequest 對象,封裝請求數據,同時創建一個ServletResponse對象,封裝響應數據。Servlet利用ServletRequest對象處理客戶端發來的請求數據,利用ServletResponse對象發送響應數據。
這兩種對象常用的方法在這裏就不做介紹了,用到了可以去查看API 文檔。
四、ServletConfig 接口
Servlet 容器使用ServletConfig對象在Servlet初始化期間向它傳遞配置信息,一個Servlet只能有一個ServletConfig對象。
// 返回名字爲name 的初始化參數的值,該初始化參數在web.xml配置文件中進行配置
public java.lang.String getInitParameter(java.lang.String name)
// 返回Servlet所有初始化參數的名字的枚舉集合
public java.util.Enumeration getInitParameterNames()
// 返回Servlet上下文對象的引用
public ServletContext getServletContext()
//返回Servlet 實例的名字,這個名字是在Web應用程序的web.xml配置文件中指定的
public java.lang.String getServletName()
五、GenericServlet 類
爲了簡化Servlet 的編寫,在javax.servlet包中提供了一個抽象的類GenericServlet,她給出了除service()方法外的其他4個方法的簡單實現。GenericServlet類定義了一個通用的、不依賴於具體協議的Servlet,它實現了Servlet接口和ServletConfig接口。
public abstract class GenericServlet extends java.lang.Object implements Servlet,ServletConfig,java.io.Serializable
如果我們要編寫一個通用的Servlet,只需要從GenericServlet類繼承,並實現其中的抽象方法service()。
在GenericServlet類中,定義了兩個重載的init()方法:
public void init(ServletConfig config) throws ServletException
public vid init() throws ServletException
第一個init()方法是Servlet接口中init()方法的實現。在這個方法中,首先講ServletConfig 對象保存在一個transient實例變量中(用transient關鍵字標記的成員變量不參與序列化過程),然後調用第二個不帶參數的init()方法。
六、HttpServlet
爲了快遞開發應用於HTTP協議的Servlet 類,Sun公司在javax.servlet.http 包中提供了一個抽象的類HttpServlet,它繼承自GenericServlet類,用於創建適合web站點的HTTP Servlet.
public abstract class HttpServlet extends GenericServvlet implements java.io.Serializable
在HttpServlet類中提供了兩個重載的service()方法:
public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException
protected void service(HttpServletRequest req,HttpServletResponse res) throws ServletException,java.io.IOException
第一個service()方法是GenericServlet類中service()方法的實現,這個方法中,首先將req和res對象轉換爲HttpServletRequest(繼承自ServletRequest 接口)和HttpServletResponse(繼承自ServletResponset 接口)類型,然後調用第二個service() 方法,對客戶請求進行處理。
七、HttpServletRequest 和 HttpServletResponse接口
HttpServletRequest中的方法 | 描述 |
---|---|
getContextPath() | 返回請求上下文的部分 |
getCookies() | 返回客戶端在此次請求中發送的所有Cookie對象 |
getHeader(String name) | 返回名字爲name的請求報頭的值 |
getMethod() | 返回此次請求所使用的HTTP方法的名字 |
getQueryStrig() | 返回請求URL中在路徑後面的查詢字符串 |
HttpServletResponse中的方法 | 描述 |
---|---|
addCooke(Cookie cookie) | 增加一個Cookie到響應中 |
addHeader(String name,String value)() | 用給出的name和value 增加一個響應報頭到響應中 |
contaisHeader(String name) | 判斷以name爲名字的響應報頭是否已經設置 |
sendRedirect(String location) | 發送一個臨時的重定向響應到客戶端,讓客戶端訪問新的URL |
setStatus(int sc) | 爲響應設置狀態代碼 |
總結
感謝您的閱讀,在一次次http 請求和響應中不斷熟悉以上內容,下期再會!