博客 / 詳情

返回

超詳細的Servlet實戰教程,10分鐘帶你瞭解servlet

Servlet是什麼?

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

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

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

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

servlet實戰視頻教程

https://www.bilibili.com/vide...

servlet資料下載

http://www.bjpowernode.com/?s...

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 的速度劣勢很快就可以被克服。

user avatar tigerandflower 頭像 buxia97 頭像 liyl1993 頭像 light_5cfbb652e97ce 頭像 nihaojob 頭像 shangxindi 頭像 niaonao 頭像 zuckjet 頭像 yangyaya 頭像 qianxiaqingkong 頭像 yourena_c 頭像 coypan 頭像
13 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.