關於 Servlet 容器

来源:互联网 发布:阅读软件破解版 编辑:程序博客网 时间:2024/04/29 15:07
Servlet容器(Container)是一個Java撰寫而成的程式,負責管理JSP/Servlet運行過程中所需要的各種資源,並負責與 Web伺服器進行溝通,管理JSP/Servlet中所有物件的產生與消滅。

例如當使用者請求來到Web伺服器時,Servlet容器會將請求、回應等訊息包裝為各種Java物件(像是HttpRequest、 HttpResponse、Cookies等),物件中包括了客戶端的相關訊息,像是請求參數,session、cookie等訊息,當您使用 JSP/Servlet的物件,例如HttpResponse發送訊息時, Servlet容器將之轉換為HTTP訊息,然後由伺服器將訊息發回客戶端。

以JSP來說,容器負責將JSP轉換為Servlet程式碼,然後編譯Servlet程式碼,將之載入執行環境並執行,容器也提供了許多資源,除了基本的 Servlet載入與執行之外,例如Web環境設定、使用者認證、session追蹤等等,JSP/Servlet事實上與容器之間的依賴日漸深厚,要想真正發揮JSP/Servlet的功能,正確的設計出良好架構與功能的Web應用程式,瞭解容器的特性是不可少的。

Servlet容器的實作必須符合JSP/Servlet的規範,這個規範是由Sun Microsystems Inc.基於整合與平衡Web Server、開發工具、各家廠商等所產生出來的,目前有許多實作出來的容器,這邊介紹
TomcatApache Jakarta Project 下的一個產品,所使用的版本是 5.5.4,可以支援JSP 2.0與Servlet 2.4。

在安裝好Tomcat之後,Web應用程式應該放在安裝目錄的webapps下,以Tomcat 5.5.4為例的話,(如果完整安裝)在webapps下有幾個預設好的Web應用程式範例,例如jsp-examples、servlets-examples下各有許多JSP與 Servlet的範例程式。

Tomcat附帶有一個簡單的HTTP伺服器程式,在Tomcat的安裝目錄下有一個ROOT目錄,它是Tomcat HTTP伺服器的預設根目錄,當您使用http://localhost:8080/連接時,將會執行ROOT/index.jsp這個JSP網頁並顯示 Tomcat的預設首頁。

您的Web應用程式主要都是放置在Tomcat目錄下的webapps目錄,安裝完畢後這個目錄下會有ROOT目錄,如果只是想單純練習 JSP的語法的話,基本上您可以將JSP放置在ROOT目錄下,不過並不建議這麼作,您可以自行在webapps下建立一個專用的練習目錄,並建立WEB - INF目錄,撰寫好web.xml,這是在Servlet容器下建立一個基本Web應用程式該有的步驟。

您要在webapps下建立一個Web應用程式目錄(例如myjsp),並在其下建立WEB-INF目錄,接下來在WEB-INF下先編輯 web.xml,web.xml告訴Servlet容器這個Web應用程式的一些基本資訊,像是所要執行的Servlet程式,所以設定的初始資訊等等,一個Web應用程式的檔案架構如下:
Web應用程式檔案架構

在WEB-INF下的classes將放置編譯好的Java類別檔案(*.class)檔案,在JSP 2.0/Servlet 2.4中規定類別必須設定package加以管理。lib目錄都放置打包好的jar檔案,這幾個目錄是必須的

其它的目錄不是必須的,通常在WEB-INF的pages是可以由使用者發出請求直接存取到的網頁或資源,而設定在WEB-INF的pages則放置一些必須透過權限控管才可以存取的網頁或資源,src目錄則通常放置一些尚未編譯的Java原始檔案。

web.xml必須放置在WEB-INF目錄下,對於一個基本的JSP程式,您可以如下編輯web.xml:
容器的一個基本配置,它是
  • web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<description>
My JSP/Servlet Examples.
</description>
<display-name>JSP/Servlet Examples</display-name>

</web-app>

(上面的web.xml示例在xsi那行是不分行的,為了網頁排版關係,我們才將之分行,如果您是用複製的方式,記得將分行消除,或者複製 ROOT/WEB-INF/目錄下的web.xml進行修改。)

web.xml是一個XML文件,首先是<web-app>標籤,為了能使用JSP2.0、Servlet2.4的功能,必須採如上< web-app>開始標籤的內容設定,這是Servlet2.4開始採的XML Schema,<description>是用來描述站台,而<display-name>用於設定站台名稱。

存取JSP網頁或資源時,是從目錄名稱開始存取,例如若命名為myjsp,而該目錄下有個helloworld.jsp,則存取它時必須使用:
http://localhost:8080/myjsp/helloworld.jsp

關於容器的配置,日後還會提供一些必要的設定說明,這邊先瞭解個大概,您也可以參考一些Servlet容器配置的相關書籍,這是另一個議題,這邊不多作描述。