JavaWeb自學筆記,Servlet技術基礎

Servlet結構體系

Servlet是運行在Web服務器端的Java應用程序,它使用Java語言編寫,具有Java語言的優點。與Java程序的區別是,Servlet對象主要封裝了對HTTP請求的處理,並且它的運行需要Servlet容器的支持,在Java Web應用方面,Servlet的應用佔有十分重要的地位,它在Web請求的處理功能方面也非常強大。
Servlet實質上就是按Servlet規範編寫的Java類,但它可以處理Web應用中的相關請求,Servlet是一個標準,它由Sun公司定義,其具體細節由Servlet容器進行實現,如Tomcat,JBoss等。在J2EE架構中,Servlet結構體系的UML如下圖。
在這裏插入圖片描述
在上圖中,Servlet對象,ServletConfig對象與Serializable對象是接口對象,其中Serializable是java.io包種的序列化接口,Servlet對象和ServletConfig對象是javax.servlet包中定義的對象,這兩個對象定義了Servlet的基本方法以及封裝了Servlet的相關配置信息,GenericServlet對象是一個抽象類,它分別實現了上述3個接口,該對象爲Servlet接口及ServletConfig接口提供了部分實現,但它並沒有對HTTP請求處理進行實現,這一操作由它的子類HttpServlet進行實現。這個對象爲HTTP請求中POST,GET等類型提供了具體的操作方法,所以通常情況下,我們所編寫的Servlet對象都繼承於HttpServlet,在開發中,所使用的具體的Servlet對象就是HttpServlet對象,原因是HttpServlet是Servlet的實現類,並提供了HTTP請求的處理方法。

Servlet技術特點

Servlet使用Java語言編寫,它不僅繼承了Java語言中的優點,而且還對Web的相關應用進行了封裝,同時Servlet容器還提供了對應用的相關擴展,無論是在功能,性能,安全等方面都十分優秀,其技術特點表現在以下幾個方面。
1,功能強大
Servlet採用Java語言編寫,它可以調用Java API中的對象及方法。此外,Servlet對象對Web應用進行了封裝,提供了Servlet對Web應用的編程接口,還可以對HTTP請求進行相應的處理,如處理提交數據,會話跟蹤,讀取和設置HTTP頭信息等。由於Servlet既擁有Java提供的API,而且還可以調用Servlet封裝的ServletAPI編程接口,因此,它在業務功能方面十分強大。
2,可移植
Java語言是跨平臺的,所謂跨平臺是指程序的運行不依賴於操作系統平臺,它可以運行到多個系統平臺中,如目前常用的操作系統,Windows,Linux和UNIX等,由於Servlet使用Java語言編寫,所以,Servlet繼承了Java語言的優點,程序一次編碼,多平臺運行,擁有超強的可移植性。
3,性能高效
Servlet對象在Servlet容器啓動時被初始化,當第一次被請求時,Servlet容器將其實例化,此時它駐存於內存中。如果存在多個請求,Servlet不會再被實例化,仍然由此Servlet對其進行處理。每一個請求是一個線程,而不是一個進程,因此,Servlet對請求處理的性能是十分高效的。
4,安全性高
Servlet使用了Java的安全框架,同時Servlet容器還可以爲Servlet提供額外的功能,它的安全性是非常高的,
5,可擴展
Java語言是面向對象的編程語言,Servlet由Java語言編寫,所以它繼承了Java的面向對象的優點,在業務邏輯處理中,可以通過封裝,繼承等來擴展實際的業務需要,其擴展性非常強。

Servlet於JSP的區別

Servlet是使用JavaServlet接口(API)運行在Web應用服務器上的Java程序,其功能十分強大,它不但可以處理HTTP請求中的業務邏輯,而且還可以輸出HTML代碼來顯示指定頁面。而JSP是一種在Servlet規範之上的動態網頁技術,在JSP頁面中,同樣可以編寫業務邏輯處理HTTP請求,也可以通過HTML代碼來編輯頁面,在實現功能上,Servlet與JSP貌似相同,實質存在一定的區別,主要表現在以下幾個方面。
1,角色不同
JSP頁面可以存在HTML代碼與Java代碼並存的情況,而Servlet需要承擔客戶請求與業務處理的中間角色,只有調用固定的方法才能將動態內容輸出爲靜態的HTML,所以,JSP更具有顯示層的角色。
2,編程方法不同
Servlet與JSP在編程方法上存在很大的區別,使用Servlet開發Web應用程序需要遵循Java的標準,而JSP需要遵循一定的腳本語言規範,在Servlet代碼中,需要調用Servlet提供的相關API接口方法,纔可以對HTTP請求及業務進行處理,對於業務邏輯方面的處理功能更顯強大。然而在JSP頁面中,通過HTML代碼與JSP內置對象實現對HTTP請求及頁面的處理,其顯示界面的功能更加強大。
3,Servlet需要編譯後運行
Servlet需要在Java編譯器編譯後纔可以運行,如果Servlet在編寫完成或修改後,沒有被重新編譯,則不能運行在Web容器中。而JSP則與之相反,JSP由JSP Container對其進行管理,它的編輯過程也由JSPContainer對JSP進行自動編輯,所以,無論JSP文件被創建還是修改,都不需要對其編譯即可執行。
4,速度不同
由於JSP頁面由JSP Container對其進行管理,在每次執行不同內容的動態JSP頁面時,JSP Container都要對其自動編譯,所以,它的效率低於Servlet的執行效率。而Servlet在編譯完成之後,則不需要再次編譯,可以直接獲取及輸出動態內容,在JSP頁面中的內容沒有變化的情況下,JSP頁面的編輯完成之後,JSP Container不會再次對JSP進行編譯
在JSP產生之前,無論是頁面設計還是業務邏輯代碼都需要編寫於Servlet中,雖然Servlet在功能方面很強大,完全可以滿足對Web應用的開發需求,但如果每一句HTML代碼都由Servlet的固定方法來輸出,則操縱會過於複雜。而且在頁面中,往往還需要用到CSS央視代碼,JS腳本代碼等,對於程序開發人員而言,其代碼量將不斷增加,所以操作十分繁瑣。針對這一問題,Sun公司提出了JSP技術,可以將HTML,CSS,JS等相關代碼直接寫入到JSP頁面中,從而簡化了程序員對Web程序的開發。

Servlet代碼結構

在Java中通常所說的Servlet是指HttpServlet對象,在聲明一個對象爲Servlet時,需要繼承HttpServlet類,HttpServlet類是Servlet接口的一個實現類,繼承該類後,可以重寫HttpServlet類中的方法對HTTP請求進行處理。

import javax.annotation.PostConstruct;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class TestServlet extends HttpServlet {
    @Override
    //初始化方法
    public void init() throws ServletException {
        super.init();
    }

    @Override
    //處理HTTP Get請求
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    //處理HTTP Post請求
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    //出列HTTP Put請求
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPut(req, resp);
    }

    @Override
    //處理HTPP Delete請求
    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doDelete(req, resp);
    }

    @Override
    //銷燬方法
    public void destroy() {
        super.destroy();
    }
}

上述代碼顯示了一個Servlet對象的代碼結構,TestServlet類通過繼承HttpServlet類被聲明爲一個Servlet對象。該類中包含6個方法,其中init()方法與destory()方法爲Servlet初始化與生命週期結束所調用的方法,其餘的4個方法爲Servlet針對處理不同的HTTP請求類型所提供的方法,其作用如註釋中所示。
在一個Servlet對象中,最常用的方法是doGet()與doPost()方法,這兩個方法分別用於處理HTTP的Get與Post請求。例如,form表單對象所聲明的method屬性爲post,提交到Servlet對象處理時,Servlet將調用doPost()方法進行處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章