天天看點

javaWeb項目之Servlet學習筆記----初識Servlet

1,介紹

Servlet是一門專門用于開發動态web資源的技術,Sun公司在其API中提供了一個Servlet接口(當然,我們不會去直接實作這個接口,而是去繼承其實作類會更好),是以,狹義的Servlet是指這個接口,廣義的Servlet是指任何實作了這個Servlet接口的類。 使用Servlet開發一個動态web資源,其實就是開發一個Java程式向浏覽器輸出資料。

  Servlet其實就是一個運作在伺服器上得Java程式,Servlet是J2EE十三門技術中的一種,是以我們不能去看J2SE的API文檔,如果是初學者,最好能看專門Servlet的API文檔。我們來看Servlet的文檔介紹:

javaWeb項目之Servlet學習筆記----初識Servlet

  從這個對Servlet接口的介紹就可以看出,如果要實作Servlet接口,就要實作其所有的方法,Servlet程式是運作在web伺服器上得,用來接收和響應從用戶端發來的請求。當然就像我之前說的,如果自己寫一個類來實作Servlet接口,那麼就要複寫Servlet所有的方法,但是我們可以繼承其實作類,例如GenericServlet類或者HttpServlet類,這樣隻需要複寫我們想複寫的方法即可。

  Servlet中的方法包括了其生命周期方法和非生命周期的方法。在Servlet中,生命周期方法包括:init(ServletConfig config)、destroy()、service(ServletRequest req , ServletResponse res),也就是Servlet初始化、對請求進行響應服務,和Servlet的銷毀。

  除了Servlet的生命周期方法,還有非生命周期方法,如getServletConfig()和getServletInfo()方法,這兩個方法可以獲得有關該Servlet的一些資訊。

  Servlet生命周期是指Servlet執行個體從建立到響應用戶端請求,最後銷毀的過程。具體過程如下:

  1,  Server建立一個Servlet的執行個體,也就是調用了init()方法;

  2,  一個用戶端的請求(對象)到達Server;

  3,  Server将請求發送給Servlet;

  4,  Servlet生成對請求的響應(對象);

  5,  Server激活Servlet的service()方法,傳遞請求對象和響應對象作為參數;

  6,  Service()方法獲得請求對象的資訊,處理請求,通路資源,獲得所需的資訊;

  7,  Service()方法使用響應對象的方法,将響應傳回Server,最終到達用戶端。Service方法還可能激活其他方法處理請求,如doGet()或者doPost()方法;

  8,  對于更多的用戶端請求,Server建立新的請求和響應對象,仍然激活此Servlet的service方法,将這兩個對象作為參數傳遞給它,無需再調用init()方法。一般Servlet隻初始化一次。當Server不在需要Servlet時(一般是Server關閉),Server調用Servlet的destroy()方法銷毀Servlet。

  從以上可以看出,Servlet生命周期上得三個方法是由伺服器調用,可以說是在Servlet存在開始到銷毀這個過程中的某個時刻(如果有事件觸發)則必定會被執行的方法稱為生命周期方法。

  是以,在Servlet中最重要的就是service()方法,要想從伺服器端将資源傳回用戶端或者向用戶端發送資料,都将在service()方法中進行。

  從service(ServletRequest req , ServletResponse res)方法來看,不僅service()方法是由伺服器調用執行,連ServletRequest請求對象和ServletResponse響應對象也是由伺服器提供,如果我們要寫一個簡單的資料給用戶端,就可以在service()方法中操作ServletResponse響應對象:

  

第一個Servlet程式

package fjdingsd.web;

import java.io.*;
import javax.servlet.*;

public class FirstServlet extends GenericServlet{
     public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException
     {
          OutputStream out = res.getOutputStream();
          out.write("Hello Servlet".getBytes());
     }
}
           

配置web.xml

javaWeb項目之Servlet學習筆記----初識Servlet

這裡就有比較重要的知識點了,<servlet>和<servlet-mapping>中的<servlet-name>必須保持一緻,<servlet>中的<servlet-class>必須有完整包名和類名,而<servlet-mapping>中的<url-pattern>就是我們可以設定的對外通路路徑了,可以自定義路徑。這個路徑的設定可以不寫,則為預設值,那麼浏覽器中的輸入位址隻要有web應用名即可,但是即使設為預設值,在<url-pattern>中,内容也一定要有斜線:“/”。

javaWeb項目之Servlet學習筆記----初識Servlet

還有一個問題,如果對于多個Servlet在xml檔案中的對外通路路徑都配置一樣的話,同樣不能通路,如下圖:

javaWeb項目之Servlet學習筆記----初識Servlet
javaWeb項目之Servlet學習筆記----初識Servlet

繼續閱讀