第 19 章 java servlet 程式設計

31
19 19 Java Servlet Java Servlet 第第第第 第第第第 19-1 Java 19-1 Java Web Web 第第第第第第 第第第第第第 19-2 Java Servlet 19-2 Java Servlet 第第第 第第第 19-3 19-3 第第 第第 Java Servlet Java Servlet 第第 第第 19-4 Java Servlet 19-4 Java Servlet 第第第第第 第第第第第

Upload: jamil

Post on 05-Jan-2016

88 views

Category:

Documents


5 download

DESCRIPTION

第 19 章 Java Servlet 程式設計. 19-1 Java 的 Web 應用程式架構 19-2 Java Servlet 的基礎 19-3 建立 Java Servlet 程式 19-4 Java Servlet 的執行過程. 19-1 Java 的 Web 應用程式架構 - 圖例. 昇陽 Java 平台的 Web 應用程式架構是一種結合 Servlet 、 JSP 技術和 JavaBeans 元件的三層架構,如下圖所示:. 19-1 Java 的 Web 應用程式架構 - 圖例說明. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 19 章  Java Servlet 程式設計

第第 1919 章 章 Java ServletJava Servlet 程式設計程式設計

19-1 Java19-1 Java的的 WebWeb 應用程式架構應用程式架構19-2 Java Servlet19-2 Java Servlet 的基礎的基礎19-3 19-3 建立建立 Java ServletJava Servlet 程式程式19-4 Java Servlet19-4 Java Servlet 的執行過程的執行過程

Page 2: 第 19 章  Java Servlet 程式設計

19-1 Java19-1 Java的的 WebWeb 應用程式架構應用程式架構 --圖例圖例

昇陽昇陽 JavaJava 平台的平台的 WebWeb 應用程式架構是一種結合應用程式架構是一種結合ServletServlet、、 JSPJSP 技術和技術和 JavaBeansJavaBeans 元件的三層架元件的三層架構,如下圖所示:構,如下圖所示:

Page 3: 第 19 章  Java Servlet 程式設計

19-1 Java19-1 Java的的 WebWeb 應用程式架構應用程式架構 --圖例說明圖例說明

MVCMVC 設計模型是將應用程式分成三層設計模型是將應用程式分成三層ViewView、、 ControllerController和和 ModelModel ,如下所示:,如下所示: 展示層(展示層( Presentation LayerPresentation Layer ):展示層是與使用者互):展示層是與使用者互

動的使用者介面,這是在客戶端瀏覽程式實際看到的動的使用者介面,這是在客戶端瀏覽程式實際看到的顯示結果或表單介面,我們可以使用顯示結果或表單介面,我們可以使用 HTMLHTML、、 Java Java AppletApplet或或 JSPJSP 程式來產生展示層的使用者介面,或顯程式來產生展示層的使用者介面,或顯示示 WebWeb 應用程式的執行結果,即應用程式的執行結果,即 MVCMVC 設計模型的設計模型的ViewView 。。

控制層(控制層( Control LayerControl Layer ):控制層是用來連接展示層):控制層是用來連接展示層和商業邏輯層,以和商業邏輯層,以 ServletServlet或或 JSPJSP 作為控制層來控制應作為控制層來控制應用程式的執行,即作為控制資料處理流程的控制者用程式的執行,即作為控制資料處理流程的控制者ControllerController ,負責接收使用者的,負責接收使用者的 HTTPHTTP 請求。請求。

商業邏輯層(商業邏輯層( Business Logic LayerBusiness Logic Layer ):商業邏輯層):商業邏輯層負責負責 WebWeb 應用程式的資料存取和處理,即應用程式的資料存取和處理,即 ModelModel ,我,我們可以使用們可以使用 JavaBeansJavaBeans和和 JSPJSP 來建立商業邏輯層,用來建立商業邏輯層,用來存取和處理儲存在資料庫、文字檔案和來存取和處理儲存在資料庫、文字檔案和 XMLXML 檔案中檔案中的資料。的資料。

Page 4: 第 19 章  Java Servlet 程式設計

19-1 Java19-1 Java的的 WebWeb 應用程式架構應用程式架構 --Model 1 Type 1Model 1 Type 1

Model 1 Type 1Model 1 Type 1 適合小型適合小型 WebWeb 應用程式的應用程式的開發,這是一種純粹使用開發,這是一種純粹使用 JSPJSP 程式來建立程式來建立展示層、控制層和商業邏輯層的三層架構,展示層、控制層和商業邏輯層的三層架構,如下圖所示:如下圖所示:

Page 5: 第 19 章  Java Servlet 程式設計

19-1 Java19-1 Java的的 WebWeb 應用程式架構應用程式架構 - - Model 1 Type 2Model 1 Type 2

Model 1 Type 2Model 1 Type 2 也適合小型也適合小型 WebWeb 應用程式應用程式的開發,這是使用的開發,這是使用 JSPJSP 程式來建立展示層程式來建立展示層和控制層;和控制層; JavaBeansJavaBeans 建立商業邏輯層,建立商業邏輯層,如下圖所示:如下圖所示:

Page 6: 第 19 章  Java Servlet 程式設計

19-1 Java19-1 Java的的 WebWeb 應用程式架構應用程式架構 - - Model 2Model 2

Model 2Model 2 適用在大型適用在大型 WebWeb 應用程式的開發,使用應用程式的開發,使用JSPJSP 建立展示層建立展示層 ViewView;; ServletServlet 作為控制層來控作為控制層來控制應用程式執行的制應用程式執行的 ControllerController;; JavaBeansJavaBeans 負責負責商業邏輯層的資料存取和處理,即商業邏輯層的資料存取和處理,即 ModelModel ,如下,如下圖所示:圖所示:

Page 7: 第 19 章  Java Servlet 程式設計

19-1 Java19-1 Java的的 WebWeb 應用程式架構應用程式架構 --JavaBeansJavaBeans

JavaBeansJavaBeans 是一種是一種 JavaBeans APIJavaBeans API 的類別的類別檔案,這是一種遵循特定和定義完善規則檔案,這是一種遵循特定和定義完善規則所建立的類別檔案,其目的是建立可重複所建立的類別檔案,其目的是建立可重複使用的軟體元件。使用的軟體元件。JavaBeansJavaBeans 也稱為也稱為 BeansBeans,, BeansBeans 的目的的目的是將建立的軟體元件,使用在「視覺化開是將建立的軟體元件,使用在「視覺化開發工具」(發工具」( Visual Builder Tool, VBTVisual Builder Tool, VBT ),),可以讓開發工具直接將現成的可以讓開發工具直接將現成的 BeanBean 元件新元件新增到其它的增到其它的 JavaJava 應用程式。應用程式。

Page 8: 第 19 章  Java Servlet 程式設計

19-2 Java Servlet19-2 Java Servlet 的基礎的基礎

19-2-1 Servlet19-2-1 Servlet 的基礎的基礎19-2-2 Resin19-2-2 Resin 伺服器的下載和安裝伺服器的下載和安裝19-2-3 19-2-3 啟動和關閉啟動和關閉 ResinResin 伺服器伺服器

Page 9: 第 19 章  Java Servlet 程式設計

19-2-1 Servlet19-2-1 Servlet 的基礎的基礎 -- 說明說明

ServletServlet 程式不同於程式不同於 Java AppletJava Applet 程式是將程式是將類別檔案下載到瀏覽程式的電腦執類別檔案下載到瀏覽程式的電腦執行。行。 ServletServlet 程式可以擴充程式可以擴充 WebWeb 伺服器的伺服器的功能,這是一種在伺服器電腦執行且由伺功能,這是一種在伺服器電腦執行且由伺服器控制下執行的程式檔。服器控制下執行的程式檔。ServletServlet是是 JavaJava 技術的標準擴充,技術的標準擴充, Java Java Servlet APIServlet API是是 Java ServletJava Servlet 程式所需的類程式所需的類別函式庫,一共有別函式庫,一共有 javax.servletjavax.servlet和和javax.servlet.httpjavax.servlet.http 兩個套件,其最主要的功兩個套件,其最主要的功能是處理客戶端的使用者請求。能是處理客戶端的使用者請求。

Page 10: 第 19 章  Java Servlet 程式設計

19-2-1 Servlet19-2-1 Servlet 的基礎的基礎 -- 圖例圖例

Page 11: 第 19 章  Java Servlet 程式設計

19-2-2 Resin19-2-2 Resin 伺服器的下載和安裝伺服器的下載和安裝 --說明說明

Java ServletJava Servlet 程式需要支援程式需要支援 ServletServlet的的 WebWeb伺服器才能夠執行,稱為伺服器才能夠執行,稱為 ServletServlet 容器容器(( Servlet ContainerServlet Container )或)或 ServletServlet 引擎引擎(( Servlet EngineServlet Engine )。)。目前巿面上有多套應用程式或伺服器,可目前巿面上有多套應用程式或伺服器,可以讓以讓 ApacheApache和和 IISIIS等等 WebWeb 伺服器執行伺服器執行ServletServlet 程式,一般來說,支援程式,一般來說,支援 ServletServlet 就一就一定支援定支援 JSPJSP ,稱為,稱為 JSPJSP 容器(容器( JSP JSP ContainerContainer )或)或 JSPJSP 引擎(引擎( JSP EngineJSP Engine )。)。在本章和第在本章和第 2020 章都是使用章都是使用 ResinResin 伺服器來伺服器來開發和測試開發和測試 Java ServletJava Servlet和和 JSPJSP 程式。程式。

Page 12: 第 19 章  Java Servlet 程式設計

19-2-2 Resin19-2-2 Resin 伺服器的下載和安裝伺服器的下載和安裝 --下載下載

ResinResin 伺服器可以在伺服器可以在 Caucho TechnologyCaucho Technology 網站免網站免費下載,在書附光碟提供費下載,在書附光碟提供 resin-3.1.4.zipresin-3.1.4.zip 的的 ZIPZIP格式壓縮檔,其下載網址如下所示:格式壓縮檔,其下載網址如下所示:

http://www.caucho.com/download/http://www.caucho.com/download/

Page 13: 第 19 章  Java Servlet 程式設計

19-2-2 Resin19-2-2 Resin 伺服器的下載和安裝伺服器的下載和安裝 --安裝安裝

安裝安裝 ResinResin 伺服器只需使用伺服器只需使用 WinZIPWinZIP 等工具解開等工具解開下載下載 ZIPZIP 格式壓縮檔格式壓縮檔【【 resin-3.1.4.zipresin-3.1.4.zip 】】到硬碟到硬碟C:C: 即可,預設安裝路徑為:「即可,預設安裝路徑為:「 C:\resin-3.1.4\C:\resin-3.1.4\ 」,」,如下圖所示:如下圖所示:

Page 14: 第 19 章  Java Servlet 程式設計

19-2-2 Resin19-2-2 Resin 伺服器的下載和安裝伺服器的下載和安裝 --安裝安裝 Java ServletJava Servlet 範例的類別檔範例的類別檔

請將書附光碟「請將書附光碟「 Ch19Ch19 」資料夾的「」資料夾的「 ROOTROOT 」子」子資料夾複製至「資料夾複製至「 C:\resin-3.1.4\webappsC:\resin-3.1.4\webapps 」下同」下同名的「名的「 ROOTROOT 」資料夾。其類別檔是位在」資料夾。其類別檔是位在「「 ROOT\WEB-INF\classesROOT\WEB-INF\classes 」資料夾。」資料夾。在「在「 ROOT\WEB-INFROOT\WEB-INF 」資料夾下的」資料夾下的 web.xmlweb.xml 定定義本章執行的義本章執行的 Java ServletJava Servlet ,它是使用,它是使用 <servlet><servlet>標籤定義標籤定義 ServletServlet,, <servlet-mapping><servlet-mapping> 標籤定義標籤定義執行的執行的 URLURL 網址為:網址為: servlet\servlet\ 類別名稱。類別名稱。

Page 15: 第 19 章  Java Servlet 程式設計

19-2-3 19-2-3 啟動和關閉啟動和關閉 ResinResin 伺服器伺服器 --說明說明

ResinResin 伺服器本身就是一套可以在伺服器本身就是一套可以在WindowsWindows 作業系統下獨立執行的作業系統下獨立執行的 WebWeb 伺服伺服器,在解壓縮檔案安裝好器,在解壓縮檔案安裝好 ResinResin 伺服器後,伺服器後,就可以啟動就可以啟動 ResinResin 伺服器,建立伺服器,建立 Java Java ServletServlet 的執行環境。的執行環境。

Page 16: 第 19 章  Java Servlet 程式設計

19-2-3 19-2-3 啟動和關閉啟動和關閉 ResinResin 伺服器伺服器 --啟動啟動

在在 WindowsWindows 啟動啟動 ResinResin 伺服器,請開啟「伺服器,請開啟「 C:\C:\resin-3.1.4resin-3.1.4 」資料夾,按二下」資料夾,按二下【【 httpd.exehttpd.exe 】】啟動啟動ResinResin 伺服器,可以看到「伺服器,可以看到「 ResinResin 」視窗,如下」視窗,如下圖所示:圖所示:

Page 17: 第 19 章  Java Servlet 程式設計

19-2-3 19-2-3 啟動和關閉啟動和關閉 ResinResin 伺服器伺服器 --測試測試

在啟動在啟動 ResinResin 伺服器後,就可以啟動瀏覽程式測伺服器後,就可以啟動瀏覽程式測試伺服器是否成功啟動,請在瀏覽程式的試伺服器是否成功啟動,請在瀏覽程式的【【網網址址】】欄輸入下列欄輸入下列 URLURL 網址,如下所示:網址,如下所示:http://localhost:8080/http://localhost:8080/

Page 18: 第 19 章  Java Servlet 程式設計

19-2-3 19-2-3 啟動和關閉啟動和關閉 ResinResin 伺服器伺服器 --關閉關閉

停止停止 ResinResin的的 WebWeb 伺服器,請在「伺服器,請在「 ResiResinn 」視窗選」視窗選【【 StopStop 】】選項,就可以停止選項,就可以停止WebWeb 伺服器的執行,按伺服器的執行,按【【 QuitQuit 】】鈕可以離鈕可以離開開 ResinResin 伺服器。伺服器。

Page 19: 第 19 章  Java Servlet 程式設計

19-3-1 19-3-1 第一個第一個 Java ServletJava Servlet 程式程式19-3-2 Java Servlet19-3-2 Java Servlet的同步處理的同步處理

19-3 19-3 建立建立 Java ServletJava Servlet 程式程式

Page 20: 第 19 章  Java Servlet 程式設計

19-3-1 19-3-1 第一個第一個 Java ServletJava Servlet 程式程式 --說明說明

Java ServletJava Servlet 程式是實作程式是實作 ServletServlet 介面或繼介面或繼承承 HttpServletHttpServlet 類別的類別檔案,在本章主類別的類別檔案,在本章主要是繼承要是繼承 HttpServletHttpServlet 類別來建立類別來建立 Java Java ServletServlet 程式。程式。Java ServletJava Servlet 的基本架構是繼承自的基本架構是繼承自HttpServletHttpServlet 類別,例如:在類別,例如:在 Java ServletJava Servlet輸出字串的網頁內容。輸出字串的網頁內容。

Page 21: 第 19 章  Java Servlet 程式設計

19-3-1 19-3-1 第一個第一個 Java ServletJava Servlet 程式程式 --程式架構程式架構

import java.io.*;import java.io.*;import javax.servlet.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.http.*;public class Ch19_3_1 extends HttpServletpublic class Ch19_3_1 extends HttpServlet{ public void doGet(HttpServletRequest request, { public void doGet(HttpServletRequest request, HttpServletResponse response)HttpServletResponse response) throws ServletException, IOExceptionthrows ServletException, IOException { response.setContentType({ response.setContentType( "text/html;charset=Big5");"text/html;charset=Big5"); request.setCharacterEncoding("Big5");request.setCharacterEncoding("Big5"); PrintWriter out = response.getWriter();PrintWriter out = response.getWriter(); out.println("<html>");out.println("<html>"); ………… ………… out.println("</body></html>"); ……………out.println("</body></html>"); ……………

Page 22: 第 19 章  Java Servlet 程式設計

19-3-1 19-3-1 第一個第一個 Java ServletJava Servlet 程式程式 --介面物件介面物件

在在 doGet()doGet() 方法需要處理方法需要處理 ServletExceptionServletException的例外處理,傳入的例外處理,傳入 22 個介面物件個介面物件HttpServletRequestHttpServletRequest和和HttpServletResponseHttpServletResponse 的說明如下所示:的說明如下所示: HttpServletRequestHttpServletRequest ::客戶端到伺服端請求的客戶端到伺服端請求的

介面物件,如果有表單欄位送出資料,就是使介面物件,如果有表單欄位送出資料,就是使用此物件讀取。用此物件讀取。

HttpServletResponseHttpServletResponse ::伺服端回應到客戶端伺服端回應到客戶端的介面物件,通常是用來回應輸出結果的的介面物件,通常是用來回應輸出結果的HTMLHTML 文件。文件。

Page 23: 第 19 章  Java Servlet 程式設計

19-3-1 19-3-1 第一個第一個 Java ServletJava Servlet 程式程式 --輸出輸出 HTMLHTML 文件文件

回應客戶端請求就是回應客戶端請求就是 HTMLHTML 文件,所以需要設定文件,所以需要設定輸出的文件類型,如下所示:輸出的文件類型,如下所示:

response.setContentType(response.setContentType(

"text/html;charset=Big5");"text/html;charset=Big5");

request.setCharacterEncoding("Big5");request.setCharacterEncoding("Big5");

程式碼設定輸出和輸入的編碼都是程式碼設定輸出和輸入的編碼都是 Big5Big5 ,回應文,回應文件類型為件類型為 HTMLHTML 文件,參數值是文件,參數值是 MIMEMIME 資料類型。資料類型。接著就可以從接著就可以從 HttpServletResponseHttpServletResponse 物件取得輸物件取得輸出串流,如下所示:出串流,如下所示:

PrintWriter out = response.getWriter();PrintWriter out = response.getWriter();

Page 24: 第 19 章  Java Servlet 程式設計

19-3-1 19-3-1 第一個第一個 Java ServletJava Servlet程式程式 --定義定義 ServletServlet

在在 ResinResin 執行執行 Java ServletJava Servlet 需要在需要在 web.xmlweb.xml 檔案檔案定義定義 <servlet><servlet>和和 <servlet-mapping><servlet-mapping> 標籤,如下標籤,如下所示:所示:

<servlet><servlet> <servlet-name>Ch19_3_1</servlet-name><servlet-name>Ch19_3_1</servlet-name> <servlet-class>Ch19_3_1</servlet-class><servlet-class>Ch19_3_1</servlet-class></servlet></servlet><servlet-mapping><servlet-mapping> <url-pattern>servlet/Ch19_3_1</url-pattern><url-pattern>servlet/Ch19_3_1</url-pattern> <servlet-name>Ch19_3_1</servlet-name><servlet-name>Ch19_3_1</servlet-name></servlet-mapping></servlet-mapping>

Page 25: 第 19 章  Java Servlet 程式設計

19-3-2 Java Servlet19-3-2 Java Servlet 的同步處理的同步處理 -- 說說明明

Java ServletJava Servlet 支援多執行緒,在伺服器載入支援多執行緒,在伺服器載入單一單一 ServletServlet 物件就可以回應多位使用者的物件就可以回應多位使用者的HTTPHTTP 請求,換句話說,請求,換句話說, ServletServlet 程式需要程式需要考量同步問題,以避免考量同步問題,以避免 22 或多位使用者同或多位使用者同時存取實例變數、方法或時存取實例變數、方法或 ServletServlet 造成的資造成的資料存取錯誤。料存取錯誤。

Page 26: 第 19 章  Java Servlet 程式設計

19-3-2 Java Servlet19-3-2 Java Servlet 的同步處理的同步處理 -1-1

同步程式區塊(同步程式區塊( A Block of Synchronized A Block of Synchronized CodeCode ))同步程式區塊可以避免多位使用者同時存同步程式區塊可以避免多位使用者同時存取實例變數,例如:網頁訪客計數的取實例變數,例如:網頁訪客計數的pageCountpageCount 變數,如下所示:變數,如下所示:synchronized(this) synchronized(this) { pageCount++; }{ pageCount++; }

上述程式碼使用上述程式碼使用 synchronizedsynchronized 關鍵字同步關鍵字同步實例變數實例變數 pageCountpageCount 的存取,在同一時間的存取,在同一時間只允許一位使用者將只允許一位使用者將 pageCountpageCount 變數加一。變數加一。

Page 27: 第 19 章  Java Servlet 程式設計

19-3-2 Java Servlet19-3-2 Java Servlet 的同步處理的同步處理 -2-2

同步方法(同步方法( A Synchronized MethodA Synchronized Method ))同步方法是同步一整個方法,例如:同一同步方法是同步一整個方法,例如:同一時間只允許一位使用者新增資料庫的圖書時間只允許一位使用者新增資料庫的圖書記錄資料,所以記錄資料,所以 addBook()addBook() 方法就是一個方法就是一個同步方法,如下所示:同步方法,如下所示:public static synchronized int addBook() public static synchronized int addBook() throws SQLExceptionthrows SQLException{{ ……… ………}}

Page 28: 第 19 章  Java Servlet 程式設計

19-3-2 Java Servlet19-3-2 Java Servlet 的同步處理的同步處理 -3-3

單執行緒的單執行緒的 ServletServlet(( A Servlet of Single Thread A Servlet of Single Thread ModelModel ))ServletServlet 程式只需實作程式只需實作 SingleThreadModelSingleThreadModel 介面,介面,就成為單執行緒的就成為單執行緒的 ServletServlet ,如下所示:,如下所示:

public class Ch19_3_2 extends HttpServletpublic class Ch19_3_2 extends HttpServlet

implements SingleThreadModelimplements SingleThreadModel

{ {

……… ………

}}

Page 29: 第 19 章  Java Servlet 程式設計

19-4 Java Servlet19-4 Java Servlet 的執行過程的執行過程 -- 說明說明

Java ServletJava Servlet 的執行過程是由的執行過程是由 WebWeb 伺服器的伺服器的ServletServlet 容器容器 // 引擎(引擎( Servlet Container/EnginServlet Container/Enginee )所控制,)所控制, ServletServlet 容器載入容器載入 ServletServlet 、執行、執行ServletServlet 接受請求和刪除接受請求和刪除 ServletServlet 的過程,如下圖的過程,如下圖所示:所示:

Page 30: 第 19 章  Java Servlet 程式設計

19-4 Java Servlet19-4 Java Servlet 的執行過程的執行過程 --相關相關方法方法

ServletServlet 的執行過程的相關方法說明,如下表所示:的執行過程的相關方法說明,如下表所示:

方法 說明void init() 如果是第 1次請求或 Servlet尚未載入,就呼叫 init()方法載入

Servlet,除非刪除 Servlet,否則都不會再呼叫此方法void service() 如果 Servlet已經載入,就呼叫 service()方法來處理請求,

service()方法會呼叫其他 doXXX()方法來處理不同的 HTTP請求

void doGet() 處理 HTTP的 GET和 HEAD指令的請求void doPost() 處理 HTTP的 POST指令的請求void doPut() 處理 HTTP的 PUT指令的請求

void doDelete() 處理 HTTP的 DELETE指令的請求void destroy() 當 Servlet閒置一段時間或伺服器關機,就呼叫 destroy()方法

刪除 Servlet

Page 31: 第 19 章  Java Servlet 程式設計