欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaWeb組件Servlet使用實(shí)例解析

 更新時(shí)間:2019年11月07日 08:30:04   作者:Demrystv  
這篇文章主要介紹了JavaWeb組件Servlet使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在JavaWeb中有三大組件,分別是Servlet、Filter和Listener。其中Servlet的作用是處理請求,服務(wù)器會把接收到的請求交給Servlet來處理,即接收請求數(shù)據(jù)、處理請求和完成響應(yīng)。

1. 實(shí)現(xiàn)Servlet的方式

主要有三種實(shí)現(xiàn)方式:1)實(shí)現(xiàn)javax.servlet.Servlet接口;2)繼承javax.servlet.GenericServlet類;3)繼承javax.servlet.http.HttpServlet類;其中最常用的繼承HttpServlet類來實(shí)現(xiàn)。

2. 關(guān)于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接口的源碼,內(nèi)部主要有五個(gè)方法,其中與Servlet生命周期有關(guān)的方法有 init方法、service方法和destroy方法。

1) void init(ServletConfig);它會在Servlet對象創(chuàng)建之后馬上執(zhí)行,并且只執(zhí)行一次。

2) void service(ServletRequest,ServletResponse);它會被調(diào)用多次,每次處理請求都被調(diào)用。

3) void destroy();它會在Servlet被銷毀之前被Tomcat調(diào)用,并且只執(zhí)行一次。

3. Servlet的創(chuàng)建

服務(wù)器會在Servlet第一次被訪問時(shí)創(chuàng)建Servlet,或者是在服務(wù)器啟動(dòng)時(shí)創(chuàng)建Servlet。如果服務(wù)器啟動(dòng)時(shí)就創(chuàng)建Servlet,那么還需要在web.xml文件中配置。如果 Servlet 的 load-on-startup 配置項(xiàng)大于 0,那么在 Context 容器啟動(dòng)的時(shí)候就會被實(shí)例化,也就是說默認(rèn)情況下,Servlet是在第一次被訪問時(shí)由服務(wù)器創(chuàng)建的。而且一個(gè)Servlet類型,服務(wù)器只創(chuàng)建一個(gè)實(shí)例對象。

4. Servlet與線程安全

因?yàn)橐粋€(gè)類型的Servlet只有一個(gè)實(shí)例對象,那么就有可能會現(xiàn)時(shí)出一個(gè)Servlet同時(shí)處理多個(gè)請求,那么Servlet是否為線程安全的呢?答案是:“不是線程安全的”。這說明Servlet的工作效率很高,但也存在線程安全問題!

所以我們不應(yīng)該在Servlet中隨便創(chuàng)建成員變量,因?yàn)榭赡軙嬖谝粋€(gè)線程對這個(gè)成員變量進(jìn)行寫操作,另一個(gè)線程對這個(gè)成員變量進(jìn)行讀操作。

5. Servlet的使用

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

<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. 關(guān)于HttpServlet

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

HttpServlet類是一個(gè)抽象類,但是沒有抽象方法,必須繼承,實(shí)現(xiàn)doGet或者doPost,但是doGet()或doPost()方法不是抽象方法,默認(rèn)的實(shí)現(xiàn)是給客戶一個(gè)405。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論