1. 程式人生 > 程式設計 >JavaWeb元件Servlet使用例項解析

JavaWeb元件Servlet使用例項解析

在JavaWeb中有三大元件,分別是Servlet、Filter和Listener。其中Servlet的作用是處理請求,伺服器會把接收到的請求交給Servlet來處理,即接收請求資料、處理請求和完成響應。

1. 實現Servlet的方式

主要有三種實現方式:1)實現javax.servlet.Servlet介面;2)繼承javax.servlet.GenericServlet類;3)繼承javax.servlet.http.HttpServlet類;其中最常用的繼承HttpServlet類來實現。

2. 關於Servlet介面

public interface Servlet {
  public void init(ServletConfig config) throws ServletException;
  public ServletConfig getServletConfig();
  public void service(ServletRequest req,ServletResponse res)
      throws ServletException,IOException;
  public String getServletInfo();
  public void destroy();
}

如上是Servlet介面的原始碼,內部主要有五個方法,其中與Servlet生命週期有關的方法有 init方法、service方法和destroy方法。

1) void init(ServletConfig);它會在Servlet物件建立之後馬上執行,並且只執行一次。

2) void service(ServletRequest,ServletResponse);它會被呼叫多次,每次處理請求都被呼叫。

3) void destroy();它會在Servlet被銷燬之前被Tomcat呼叫,並且只執行一次。

3. Servlet的建立

伺服器會在Servlet第一次被訪問時建立Servlet,或者是在伺服器啟動時建立Servlet。如果伺服器啟動時就建立Servlet,那麼還需要在web.xml檔案中配置。如果 Servlet 的 load-on-startup 配置項大於 0,那麼在 Context 容器啟動的時候就會被例項化,也就是說預設情況下,Servlet是在第一次被訪問時由伺服器建立的。而且一個Servlet型別,伺服器只建立一個例項物件。

4. Servlet與執行緒安全

因為一個型別的Servlet只有一個例項物件,那麼就有可能會現時出一個Servlet同時處理多個請求,那麼Servlet是否為執行緒安全的呢?答案是:“不是執行緒安全的”。這說明Servlet的工作效率很高,但也存線上程安全問題!

所以我們不應該在Servlet中隨便建立成員變數,因為可能會存在一個執行緒對這個成員變數進行寫操作,另一個執行緒對這個成員變數進行讀操作。

5. Servlet的使用

如果想要瀏覽器可以訪問Servlet,需要給Servlet繫結一個路徑,這個需要在web.xml中進行配置。其中<servlet> 指定HelloServlet這個Servlet的名稱為hello;<servlet-mapping>:指定/helloworld訪問路徑所以訪問的Servlet名為hello。<servlet>和<servlet-mapping>通過<servlet-name>這個元素關聯在一起。

<servlet>
  <servlet-name>hello</servlet-name>
  <servlet-class>com.Demrystv.HelloServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/helloworld</url-pattern>
 </servlet-mapping>

6. 關於HttpServlet

HttpServlet類是GenericServlet的子類,它提供了對HTTP請求的特殊支援,所以通常我們都會通過繼承HttpServlet來完成自定義的Servlet。

HttpServlet類是一個抽象類,但是沒有抽象方法,必須繼承,實現doGet或者doPost,但是doGet()或doPost()方法不是抽象方法,預設的實現是給客戶一個405。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。