Web Server 可以指軟體、硬體或是軟硬體共同運作下的狀態。以軟體來說,
是一個提供網頁的伺服器程式,能控制用戶端如何訪問託管的檔案。以硬體來說,
就是一台存放網頁伺服器軟體與網站檔案的電腦。在共同運作的狀態中,電腦會
連上網路,透過HTTP 協定,將網頁或資料回應給提出請求的用戶端。市面上常 見 的 HTTP web server 有 Apache 的 Apache HTTP server、微軟的 Internet Information Server(IIS)、Google 的 Google Web Server。一般來說,用戶端要求 的檔案會儲存在 web server 的本地檔案系統裡。Java 在伺服器端的程式為 Java servlet,而常用的 servlet 容器為 Apache Tomcat 與 Jetty web server。本研究提出 的工具,使用的是Eclipse 基金會的 Jetty web server。
2.2.1 Servlet
Servlet[5]全名為 Java servlet,是用 Java 編寫而成的伺服器端程式。大多數
的情況下,是基於 HTTP 協定來實現用戶端的請求與回應,目前最新的版本為
servlet 4.0。servlet 的工作模式如下:
1. 用戶端發送請求到伺服器。
2. 伺服器會啟動並調用相對應的 servlet。
3. Servlet 根據請求,產生回應內容並傳給伺服器。
4. 伺服器將回應內容傳給用戶端。
servlet 通常由伺服器或 servlet 容器來控制其生命週期。除非有特殊設定,
servlet 只會在第一次請求的時候被載入,所以在首次調用一個 servlet 時,需要比 較久的時間。一旦被載入後,就不會從容器中刪除,直到伺服器關閉或重新啟動。
以下介紹servlet 的生命週期[6]:
1. init():進行 servlet 初始化,可以設定一些共用變數。
2. service():處理請求。一般來說,我們不會直接覆寫它,而是覆寫處理請 求的doPost(), doGet(), doPut(), doDelete()等方法。
3. destroy():只會被呼叫一次,用來結束一個 servlet。
4. 在 JVM 關閉時交給垃圾回收器。
2.2.2 Jetty
圖2-3 Jetty 架構圖1
Jetty[3]是一個由 Eclipse 基金會開發與維護的開源專案,可用於商業開發或 其他非商業性的應用。Jetty 可以被嵌入於各項裝置、框架、應用程式之中,相容 性非常高。在嵌入式的Java 應用程式中,提供標準的 web 服務,例如:Jetty 已 經成為Eclipse IDE 的一部分,使用者能在 Eclipse IDE 裡直接使用 Jetty 的功能。
Jetty 以 Java 實作,是一個網頁伺服器也是 servlet 容器,核心的元件由 Connector 與 Handler 組成。Connector 在 Jetty 裡負責接收 TCP 網路連結,解析 請求、產生回應。Handler[4]是 Jetty 裡特殊的資料結構,負責處理請求,主要的 函式為handle。handle 有四個參數:target, baseRequest, request, response。其中,
request 和 response 的型別是基於 servlet API 定義而成,要使用 servlet API 的功 能,必須設定好相對應的Handler。設置 Jetty 伺服器的過程,就是把一個一個的 Handler 加入 Jetty 的 Server 類別裡,讓 Jetty 來管理所有的 Handler。
1 Jetty Architechture, from
http://www.eclipse.org/jetty/documentation/current/architecture.html#_view_from_20_000_feet
Handler 在 Jetty 裡扮演很重要的角色,只要關係到請求與回應的事件,都需 要調用Handler。使用者可以依照自己需求的不同,對 Handler 做不同的配置,例 如:依序呼叫各個 Hadler、巢狀呼叫各個 Handler。以下依照功能的不同,介紹 不同的Handler:
1. Coordinating handlers:將 request 傳送到其他 Handler 的 Handler,例如 HandlerCollection、ContextHandlerCollection。
2. Filtering handlers:在 request 裡設置一些參數後,再傳送到其他 Handler 的Handler,例如 HandlerWrapper, ContextHandler, SessionHandler。
3. Generating handlers:直接產生回應的 Handler,例如 ResourceHandler、
ServletHandler。
圖2-4 Handler 配置示意圖2
2 Jetty Handler Architecture, from
http://www.eclipse.org/jetty/documentation/current/architecture.html#_handlers
2.2.3 Jetty 與 Tomcat 之比較
同樣身為servlet 容器與 HTTP web server,Jetty 與 Tomcat 各有其優缺點。
架構上,因為Jetty 是由 Connector 與 Handler 組成,與 Tomcat 相比相對簡單,
也比Tomcat 更容易擴展。Jetty 也能因應設計者的需求,加載不同的功能。相反 的,Tomcat 則是因為支援了許多功能,對 Java web service 的支援較為完善,而 降低了擴展時的彈性。基於以上的介紹與比較,本研究之系統以 Jetty 作為後端
JSON[21] [22]是一個輕量級的資料交換語言,全名為 JavaScript Object Notation,適合用來儲存由屬性名稱 (name / attribute name) 與屬性值 (value / attribute value) 組成的資料。JSON 用了兩種資料結構,來表示資料的屬性名稱與 屬性值,型式如下: