Servlet簡介

一、Servlet的由來

  • 背景
    最開始web的設計初衷是一個靜態信息資源發佈媒介,通過超文本標記語言(HTML)描述信息資源,通過統一資源標識符(URI)定位信息資源,通過超文本轉移協議(HTTP)請求信息資源。
    時代在發展,Web也在發展。很快這種簡單的處理方式,滿足不了人們的需要,CGI(Common Gateway Interface)誕生了。Web上的動態信息服務開始蓬勃興起。
  • CGI
    CGI定義了Web服務器與外部應用程序之間的通信接口標準,因此Web服務器可以通過CGI執行外部程序,讓外部程序根據Web請求內容生成動態的內容。Perl因爲跨操作系統和易於修改的特性成爲CGI的主要編寫語言。當然,CGI可以用任何支持標準輸入輸出和環境變量的語言編寫,比如Shell腳本,C/C++語言,只要符合接口標準即可。比如你用C語言編寫CGI程序,你把希望返回的HTML內容通過printf輸出就可以發送給Web服務器,進而返回給用戶。
    CGI模式的特點:是將服務端的動態資源基於進程(process)方法來運行(每個用戶請求產生新進程來處理)。由於進程的執行非常耗費時間,且內存空間浪費,所以效率極其低下。
    與其同時Java也在發展,想要適應市場,必須也能動態的處理網絡請求
    applet出現了,是安裝在客戶端的java程序,瀏覽器的插件。這也就決定了不能保證每個瀏覽器都能支持,安裝插件。侷限性太大。爲了解決了問題,servlet來了。

二、Servlet

  • Servlet簡介
    Servlet(Server Applet)是Java Servlet的簡稱,稱爲小服務程序或服務連接器,用Java編寫的服務器端程序,具有獨立於平臺和協議的特性,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容。
    狹義的Servlet是指Java語言實現的一個接口,廣義的Servlet是指任何實現了這個Servlet接口的類,一般情況下,人們將Servlet理解爲後者。Servlet運行於支持Java的應用服務器中。從原理上講,Servlet可以響應任何類型的請求,但絕大多數情況下Servlet只用來擴展基於HTTP協議的Web服務器。
  • Servlet的工作原理
    其實Servlet的工作原理基本類似上面的CGI,不過Servlet比CGI更好。
    1、WEB服務器接收一個用戶請求;
    2、WEB服務器將請求轉交給WEB服務器關聯的Servlet容器;
    3、Servlet容器找到對應的Servlet並執行這個Servlet;
    4、Servlet容器將處理結果返回給WEB服務器;
    5、WEB服務器把結果送回用戶;
  • Servlet比CGI的優勢
    Java Servlet 通常情況下與使用 CGI(Common Gateway Interface,公共網關接口)實現的程序可以達到異曲同工的效果。但是相比於 CGI,Servlet 有以下幾點優勢:
    1、性能明顯更好。
    2、Servlet 在 Web 服務器的地址空間內執行。這樣它就沒有必要再創建一個單獨的進程來處理每個客戶端請求。
    3、Servlet 是獨立於平臺的,因爲它們是用 Java 編寫的。
    4、服務器上的 Java 安全管理器執行了一系列限制,以保護服務器計算機上的資源。因此,Servlet 是可信的。
    5、Java 類庫的全部功能對 Servlet 來說都是可用的。它可以通過 sockets 和 RMI 機制與 applets、數據庫或其他軟件進行交互。

三、Servlet的發展

  • Servlet誕生後,SUN公司很快發現了Servlet編程非常繁瑣,這是因爲:
    1、 Servlet代碼中有大量冗餘代碼,每個Servlet都有一模一樣的或基本近似的代碼,比如out輸出你可能就得寫成百遍;
    2、 開發Servlet必須精通網頁前端和美工,你得非常不直觀的在Servlet中寫前端代碼,這使得實現各種頁面效果和風格非常困難。

  • 所以,SUN借鑑了Microsoft的ASP,正式提出JSP(Servlet1.1),已期望能代替Servlet。但是很快,SUN發現JSP也有問題:
    1、 List item前端開發人員需要看JSP中大量的令他困惑的後端代碼;
    2、 同樣,Servlet開發人員也得在複雜的前端代碼中找到其能寫Servlet代碼的地方;

  • 所以,Servlet1.2出現了,這個版本的Servlet倡導了MVC思想:
    1、 JSP(V):將後端代碼封裝在標籤中,使用大量的標籤,JSP只用來寫前端代碼而不要有後臺代碼;
    2、 Servlet(C):Servlet完成Controller的功能再加上部分代碼邏輯;
    3、 Model(M):Servlet將數據發送給Model,Model包括部分代碼邏輯,最主要的Model也代表着被組織好的用於返回的數據。最終,Model數據會被顯示在JSP上(V)。

基本上也差不多了。前後端分離來了…

文章參考:
https://blog.csdn.net/u010297957/article/details/51498018

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