超詳細的Servlet教程,10分鐘帶你認識servlet

牛仔碼農發表於2021-12-31

Servlet是什麼?

servlet是Server Applet的簡稱,翻譯過來就是服務程式。

好吧,這麼說你可能還是不太懂,簡單地講,這個servlet是執行在伺服器上的一個小程式,用來處理伺服器請求的.進一步講,我們知道,一般的網頁程式,是由我們通過瀏覽器訪問來實現的,在這個過程中,我們的瀏覽器傳送訪問請求,伺服器接收請求,並對瀏覽器的請求作出相應的處理.這就是我們熟悉的B/S模型(瀏覽器-伺服器模型).而servlet就是對請求作出處理的元件,執行於支援Java的應用伺服器中.

Java Servlet 可以使用所有的 Java API,Java 能做的事情,Servlet 都能做。

動力節點的 Servlet 教程對 Servlet 技術的整體框架進行了講解,並附帶了例項演示,需要具備 Java 基礎,servlet學習資料點下邊連結:

見評論區!!!

Servlet只是古老的CGI技術的替代品,直接使用Servle開發還是很麻煩,所以Java後來又對Servlet 進行了升級,推出了 JSP 技術。JSP 只是對 Servlet 加了一層殼,JSP 經過編譯後還是 Servlet。

Servlet的開發流程

狹義上講,servlet是servlet是java語言實現的一個類,所以我們就要根據這個類進行相應的擴充套件開發.

開發流程如下:

  • 編寫一個java類,繼承HttpServlet類
  • 重寫HttpServlet類的doGet方法和doPost方法
  • 配置web.xml檔案,或者使用註解對servlet進行配置

開發流程就是這個樣子,我們先來看一下最後一個步驟.

#對servlet進行配置

你一定在想,如果我寫了好幾個servlet,但是前端傳送請求的時候,究竟會把請求傳送給哪個servlet呢?我在輸入某個地址的時候,究竟是由哪個servlet進行響應的呢?

這時候servlet的配置就顯得尤為重要.對servlet的配置指定了對前端請求處理究竟是通過哪個servlet.

配置servlet一共有兩種方式,一種是使用web.xml檔案配置,另外一種就是使用註解配置,下面我們來詳解介紹這兩種配置方式

使用web.xml檔案配置

注意,servlet的配置內容要寫在webapp內部

<webapp><!-- 配置一個servlet -->
  <!-- servlet的配置 -->
  <servlet>
  	<!-- servlet的內部名稱,自定義。儘量有意義 -->
  	<servlet-name>MyServlet</servlet-name>
  	<!-- servlet的類全名: 包名+簡單類名 -->
  	<servlet-class>cn.roobtyan.servlet.FirstServlet</servlet-class>
  </servlet>
  
  
  <!-- servlet的對映配置 -->
  <servlet-mapping>
  	<!-- servlet的內部名稱,一定要和上面的內部名稱保持一致!! -->
  	<servlet-name>MyServlet</servlet-name>
  	<!-- servlet的對映路徑(訪問servlet的名稱) -->
  	<url-pattern>/first</url-pattern>
  </servlet-mapping></webapp>

當你訪問/first的時候,伺服器自然就會把請求交給MyServlet進行處理了.

使用@註解配置

新版本的servlet支援使用註解進行配置,這樣極大的簡便了開發.

註解配置如下:

@WebServlet(name = "LoginServlet",urlPatterns = {"/login"})public class LoginServlet extends HttpServlet {
}

然後,你在訪問/login的時候,伺服器同樣就會將處理交由LoginServlet進行處理了.

這樣是不是非常爽?(-)

實際上,註解的作用和web.xml的作用是相同的,一般都是推薦使用註解的方式進行開發,這樣十分簡便,可讀性也變的更加強大.

你一定會好奇,如下:

<url-pattern>/first<url-pattern>
和@WebServlet(name = "LoginServlet",urlPatterns = {"/login"})

這裡面的url可不可以不這麼精確的配置,用一種模糊匹配的方式,就是我訪問某種規則的路徑的時候,統一呼叫一個servlet,這當然是可以的了.

這就涉及到對映路徑的問題了

Servlet命名

Servlet 的命名可以看出 sun 命名的特點,如 Applet 表示小應用程式;Scriptlet = Script + Applet,表示小指令碼程式;同樣 Servlet = Service + Applet,表示小服務程式。

  • 生命週期編輯
  • 客戶端請求該 Servlet;
  • 載入 Servlet 類到記憶體;
  • 例項化並呼叫init()方法初始化該 Servlet;
  • service()(根據請求方法不同呼叫doGet() 或者 doPost(),此外還有doHead()、doPut()、doTrace()、doDelete()、doOptions());
  • destroy()。
  • 載入和例項化 Servlet。這項操作一般是動態執行的。然而,Server 通常會提供一個管理的選項,用於在 Server 啟動時強制裝載和初始化特定的 Servlet。

對比

與 Applet 的比較

相似之處:

• 它們不是獨立的應用程式,沒有 main() 方法。

• 它們不是由使用者或程式設計師呼叫,而是由另外一個應用程式(容器)呼叫。

• 它們都有一個生存週期,包含 init() 和 destroy() 方法。

不同之處:

• Applet具有很好的圖形介面(AWT),與瀏覽器一起,在客戶端執行。

• Servlet 則沒有圖形介面,執行在伺服器端。

與 CGI 比較

與傳統的 CGI 和許多其他類似 CGI 的技術相比,Java Servlet 具有更高的效率,更容易使用,功能更強大,具有更好的可移植性,更節省投資。在未來的技術發展過程中,Servlet 有可能徹底取代 CGI。

在傳統的 CGI中,每個請求都要啟動一個新的程式,如果 CGI 程式本身的執行時間較短,啟動程式所需要的開銷很可能反而超過實際執行時間。而在 Servlet 中,每個請求由一個輕量級的 Java 執行緒處理(而不是重量級的作業系統程式)。

在傳統 CGI 中,如果有 N 個併發的對同一 CGI程式的請求,則該CGI程式的程式碼在記憶體中重複裝載了 N 次;而對於 Servlet,處理請求的是 N 個執行緒,只需要一份 Servlet 類程式碼。在效能優化方面,Servlet 也比 CGI 有著更多的選擇。

• 方便

Servlet 提供了大量的實用工具例程,例如自動地解析和解碼 HTML 表單資料、讀取和設定 HTTP頭、處理Cookie、跟蹤會話狀態等。

• 功能強大

在Servlet中,許多使用傳統 CGI 程式很難完成的任務都可以輕鬆地完成。例如,Servlet 能夠直接和 Web伺服器互動,而普通的 CGI 程式不能。Servlet 還能夠在各個程式之間共享資料,使得資料庫連線池之類的功能很容易實現。

• 可移植性好

Servlet 用 Java 編寫,Servlet API具有完善的標準。因此,為 IPlanet Enterprise Server 寫的 Servlet 無需任何實質上的改動即可移植到 Apache、MicrosoftIIS 或者 WebStar。幾乎所有的主流伺服器都直接或通過外掛支援 Servlet。

• 節省投資

不僅有許多廉價甚至免費的 Web 伺服器可供個人或小規模網站使用,而且對於現有的伺服器,如果它不支援 Servlet 的話,要加上這部分功能也往往是免費的(或只需要極少的投資)。

與 JSP 比較

JSP 和 Servlet 的區別到底在應用上有哪些體現,很多人搞不清楚。簡單的說,SUN首先發展出 Servlet,其功能比較強勁,體系設計也很先進,只是,它輸出 HTML 語句還是採用了老的 CGI 方式,是一句一句輸出,所以,編寫和修改 HTML 非常不方便。

Java Server Pages(JSP)是一種實現普通靜態HTML 和動態 HTML 混合編碼的技術,JSP 並沒有增加任何本質上不能用 Servlet 實現的功能。但是,在 JSP 中編寫靜態HTML 更加方便,不必再用 println語 句來輸出每一行 HTML 程式碼。更重要的是,藉助內容和外觀的分離,頁面製作中不同性質的任務可以方便地分開:比如,由頁面設計者進行 HTML設計,同時留出供 Servlet 程式設計師插入動態內容的空間。

後來 SUN 推出了類似於 ASP 的鑲嵌型的 JSP,把 JSP TAG 鑲嵌到 HTML 語句中,這樣,就大大簡化和方便了網頁的設計和修改。新型的網路語言如 ASP,PHP,JSP 都是鑲嵌型的語言。 這是 JSP 和 Servlet 區別的運作原理層面。

從網路三層結構的角度看 JSP 和 Servlet 的區別,一個網路專案最少分三層:data layer(資料層),business layer(業務層),presentation layer(表現層)。當然也可以更復雜。Servlet 用來寫 business layer 是很強大的,但是對於寫 presentation layer 就很不方便。JSP 則主要是為了方便寫 presentation layer 而設計的。當然也可以寫 business layer。習慣了 ASP,PHP,CGI的朋友,經常會不自覺的把 presentation layer 和 business layer 混在一起。

據 SUN 自己的推薦,JSP中應該僅僅存放與 presentation layer 有關的東西,也就是說,只放輸出 HTML 網頁的部分。而所有的資料計算,資料分析,資料庫聯結處理,統統是屬於 business layer,應該放在 Java BEANS 中。通過 JSP 呼叫 Java BEANS,實現兩層的整合。

微軟前不久推出的 DNA 技術,是 ASP+COM/DCOM 技術。與J SP+BEANS 完全類似,所有的 presentation layer 由 ASP 完成,所有的 business layer 由 COM/DCOM 完成。通過呼叫,實現整合。

採用這些元件技術單純的因為 ASP/JSP 語言是非常低效率執行的,如果出現大量使用者點選,純 SCRIPT 語言很快就到達了他的功能上限,而元件技術就能大幅度提高功能上限,加快執行速度。

另外一方面,純 SCRIPT 語言將 presentation layer 和 business layer 混在一起,造成修改不方便,並且程式碼不能重複利用。如果想修改一個地方,經常會牽涉到十幾頁 code,採用元件技術就只改元件就可以了。

綜上所述,Servlet 是一個早期的不完善的產品,寫 business layer 很好,寫 presentation layer 就很臭,並且兩層混雜。

所以,推出JSP+BEAN,用 JSP 寫 presentation layer,用 BEAN 寫 business layer。SUN 自己的意思也是將來用 JSP 替代 Servlet。這是技術更新方面 JSP 和 Servlet 的區別。

可是,這不是說,學了 Servlet 沒用,實際上,你還是應該從 Servlet 入門,再上 JSP,再上 JSP+BEAN。

強調的是:學了JSP,不會用 Java BEAN 並進行整合,等於沒學。大家多花點力氣在 JSP+BEAN 上。

我們可以看到,當 ASP+COM 和 JSP+BEAN 都採用元件技術後,所有的元件都是先進行編譯,並駐留記憶體,然後快速執行。所以,大家經常吹的 Servlet/JSP 先編譯駐記憶體後執行的速度優勢就沒有了。

反之,ASP+COM+IIS+NT 緊密整合,應該會有較大的速度優勢呈現。而且,ASP+COM+IIS+NT 開發效率非常高,雖然bug 很多。

那麼,為什麼還用 JSP+BEAN?因為 Java 實在前途遠大。作業系統群雄並起,應用軟體的開發商必定要找一個通用開發語言進行開發,Java 一統天下的時機就到了。

簡單分析了一下 JSP 和 Servlet 的區別和 Java Web 開發方面的發展。隨著機器速度越來越快,Java 的速度劣勢很快就可以被克服。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70007020/viewspace-2850341/,如需轉載,請註明出處,否則將追究法律責任。

相關文章