Servlet & JSP - Servlet API Overview

來源:互聯網
上載者:User

標籤:

Servlet & Generic & HttpServlet類圖

Servlet 的生命週期

init、service 和 destroy 是 servlet 的生命週期方法,它們的調用規則如下:

init: 當第一次請求 servlet 時,servlet 容器會調用此方法,而後面即使再接收到請求,容器也不會再調用此方法。因此,可以在 init 方法內做一些初始化的操作。當調用此方法時,容器會傳遞一個 ServletConfig 參數,可以使用一個類層級的變數將該參數保留。Servlet 不是單例的,但是 servlet 容器對每個 Servlet 類只會構造一個執行個體。

service: 當接收到請求時,servlet 容器調用此方法。

destory: 當 servlet 被銷毀時,容器會調用此方法。這通常是 web 應用從 servlet 容器卸載或者 servlet 容器關閉的時候。可以在 destroy 方法做一些清理操作。

load-on-startup 參數

預設情況下,當 servlet 第一次接收到請求,servlet 容器才會去構造並初始化 servlet 執行個體。使用 load-on-startup 參數,可以指定容器啟動時就載入 servlet。當初始化操作比較複雜,耗時間長度時,load-on-startup 參數特別有用。load-on-startup 是一個整型的參數,它指定了容器載入 servlet 的順序。當取值小於 0 或沒有指定時,servlet 容器可以選擇在任意時候執行個體化 servlet。當取值大於或等於 0 時,值越小,servlet 容器越優先執行個體化 servlet。當 load-on-startup 取值一樣,servlet 容器自行選擇載入 servlet 的順序。load-on-startup 參數不同通過 @WebServlet 註解指定,而只能 

<servlet>    <servlet-name>myServlet</servlet-name>    <servlet-class>com.huey.hello.servlets.MyServlet</servlet-class>    <load-on-startup>1</load-on-startup></servlet>

 

ServletRequest & HttpServletRequest

ServletRequest(HttpServletRequest) 封裝了一個(HTTP)請求。下面是 ServletRequest(HttpServletRequest)常用的方法:

getServletContext: 擷取 servlet 上下文執行個體。

getSession: 擷取會話執行個體。

getCookies: 擷取 Cookie。

getHeader: 擷取 HTTP 要求的首部。類似的方法還有 getIntHeader。還有一些擷取特定首部的方法:getContentLength、getContentType 等。

getParameter: 擷取表單和 URL 的請求參數。類似的方法還有 getParameterValues、getParameterNames 和 getParameterMap。

getAttribute: 擷取請求的屬性。

getRemoteAddr: 返回傳送請求的用戶端或最後一個代理的 IP 位址。

getRemoteHost: 返回傳送請求的用戶端或最後一個代理的完全限定名稱。

 

ServletResponse & HttpServletResponse

ServletResponse(HttpServletResponse) 封裝了一個(HTTP)響應。下面是 ServletResponse(HttpServletResponse)常用的方法:

setContentType: 設定響應的內容。

addCookie: 將指定的 cookie 添加至響應。

addHeader: 將指定的首部添加至響應。

 

ServletConfig

在調用 servlet 的 init 方法時,servlet 容器會傳遞一個 ServletConfig 對象,ServletConfig 封裝了 servlet 的配置資訊。有兩種方法可以配置 servlet 的初始參數。

在 web.xml 中配置 servlet 的初始參數:

<servlet>    <servlet-name>myServlet</servlet-name>    <servlet-class>com.huey.hello.servlets.MyServlet</servlet-class>    <init-param>        <param-name>user</param-name>        <param-value>huey</param-value>    </init-param></servlet>

使用 Servlet3.0,還可以通過 @WebServlet 配置初始參數:

@WebServlet(name = "myServlet", urlPatterns = {"/my"},         initParams = { @WebInitParam(name="user", value="huey")})public class MyServlet extends HttpServlet {    // ...}

getInitParameter、getInitParameterNames 等方法可以擷取初始參數:

ServletConfig servletConfig = this.getServletConfig();Enumeration<String> initParamNames = servletConfig.getInitParameterNames();while (initParamNames.hasMoreElements()) {    String paramName = (String) initParamNames.nextElement();    resp.getWriter().println(paramName + ": " + servletConfig.getInitParameter(paramName));}

 

ServletContext

ServletContent 表示的是 servlet 應用,每個 web 應用都只有一個上下文。在分布式環境,一個應用部署在多個容器中,則每個 JVM 有一個 ServletContext 對象。可以通過 servletConfig.getServletContext() 方法擷取 ServletContext 對象。下面是 ServletContext 類常用的方法:

getAttribute: 擷取應用的屬性, 類似的方法還有 getAttributeNames。

setAttribute: 設定應用的屬性。

removeAttribute: 刪除應用的屬性。

getContextPath: 返回 Web 應用程式的上下文路徑。

getRealPath(String path): 為給定的虛擬路徑返回伺服器檔案系統上的絕對檔案路徑。

getResource(String path): 返回指向映射到指定路徑的資源的 URL。該路徑必須以 "/" 開頭,並相對於當前上下文根進行解釋。

getResourceAsStream(String path): 類似 getResource,返回的是 InputStream 對象。

 

Servlet & JSP - Servlet API Overview

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.