Java Servlet 編程及應用(一) – JAVA編程語言程序開發技術文章

Servlet是一種獨立於平臺和協議的服務器端的Java應用程序,可以生成動態的Web頁面

一、概述

Servlet是一種獨立於平臺和協議的服務器端的Java應用程序,可以生成動態的Web頁面。

Servlet是位於Web 服務器內部的服務器端的Java應用程序,與傳統的從命令行啟動的Java應用程序不同,Servlet由Web服務器進行加載,該Web服務器必須包含支持Servlet的Java虛擬機。

Java Servlet 與 Applet 的比較:

相似之處:

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

* 它們不是由用戶或程序員調用,而是由另外一個應用程序(容器)調用。

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

不同之處:

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

* Servlet 則沒有圖形界面,運行在服務器端。

Java Servlet 與 CGI(Common Gateway Interface) 的比較:

與傳統的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、Microsoft IIS或者WebStar。幾乎所有的主流服務器都直接或通過插件支持Servlet。

* 節省投資

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

Java Servlet 與 JSP(JavaServer Pages) 的比較:

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

Java Servlet API 2.2 簡介

Java Servlet API 2.2 的類和接口組成兩個Java 包,即:javax.servlet 和 javax.servlet.http(還包括javax.servlet.jsp包,不在本篇文章討論范圍之內)。

javax.servlet 包提供瞭控制 Servlet 生命周期所必需的 Servlet 接口,是編寫 Servlet 時必須要實現的。

javax.servlet.http 包提供瞭從Servlet 接口派生出的專門用於處理 HTTP 請求的抽象類和一般的工具類。所有的Servlet 對象都要實現Servlet 接口,大多數情況下是作為已經實現瞭Servlet 接口的javax.servlet.GenericServlet 和 javax.servlet.http.HttpServlet 這兩個抽象類的子類來間接實現Servlet 接口。

javax.servlet 包定義的類和接口:

interface RequestDispatcher

//定義一種對象,用於從客戶接受請求,並將請求發送到服務器上任何指定的資源,如一個Servlet 、JSP 或 HTML 文件。

interface Servlet

//定義瞭所有 Servlet 必須實現的方法。

interface ServletConfig

//定義Servlet config 對象,由Servlet 引擎用在 Servlet 初始化時,向 Servlet 傳遞信息。

interface ServletContext

//定義瞭一系列方法,以便Servlet與其運行的環境通信。

interface ServletRequest

//定義瞭用於向Servlet傳遞客戶請求信息的對象。

interface ServletResponse

//定義瞭一個對象,由Servlet用於向客戶發送響應。

interface SingleThreadModel

//用於保證Servlet在任一時刻,隻處理一個請求。

class GenericServlet

//繼承Servlet接口,定義瞭一個通用的,與協議無關的Servlet。

class ServletInputStream

//定義瞭一個輸入流,用於由Servlet從中讀取客戶請求的二進制數據。

class ServletOutputStream

//定義瞭一個輸出流,用於由Servlet向客戶發送二進制數據。

class ServletException

//定義瞭一個當Servlet遇到問題時可以拋出的異常。

class UnavailableException

//定義瞭一種異常,用於由Servlet指明它永遠或暫時不可用。

javax.servlet.http 包定義的類和接口:

interface HttpServletRequest

//繼承瞭ServletRequest 接口,為HTTPServlet 提供請求信息。

interface HttpServletResponse

//繼承瞭ServletResponse 接口,為HTTPServlet 輸出響應信息提供支持。

interface HttpSession

//為維護 HTTP 用戶的會話狀態提供支持。

interface HttpSessionBindingListener

//使得某對象在加入一個會話或從會話中刪除時能夠得到通知。

interface HttpSessionContext

//由Servlet 2.1 定義,該對象在新版本已不被支持。

class Cookie

//用在Servlet 中使用Cookie 技術

class HttpServlet

//定義瞭一個抽象類,繼承 GenericServlet 抽象類,應被 HTTPServlet 繼承。

class HttpSessionBindingEvent

//定義瞭一種對象,當某一個實現瞭HttpSessionBindingListener接口的對象被加入會話或從會//話中刪除時,會收到該類對象的一個句柄

class HttpUtils

//提供瞭一系列便於編寫HTTPServlet 的方法。

下面主要介紹javax.servlet.http提供的HTTP Servlet應用編程接口。

HTTP Servlet 使用一個 HTML 表格來發送和接收數據。要創建一個 HTTP Servlet,請擴展 HttpServlet 類, 該類是用專門的方法來處理 HTML 表格的 GenericServlet 的一個子類。 HTML 表單是由 <FORM> 和 </FORM> 標記定義的。表單中典型地包含輸入字段(如文本輸入字段、復選框、單選按鈕和選擇列表)和用於提交數據的按鈕。當提交信息時,它們還指定服務器應執行哪一個Servlet(或其它的程序)。 HttpSe

發佈留言