天天看點

輕量級java web伺服器--tomcat

一、tomcat簡介

Tomcat是Apache 軟體基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由于有了Sun 的參與和支援,最新的Servlet 和JSP 規範總是能在Tomcat 中得到展現,Tomcat 5支援最新的Servlet 2.4 和JSP 2.0 規範。因為Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛并得到了部分軟體開發商的認可,成為目前比較流行的Web 應用伺服器。目前最新的版本為8.0。

與傳統桌面應用程式不同,Tomcat中的應用程式是一個WAR(Web Archive)檔案,它是由許多檔案構成的一個壓縮包。包中的檔案按照一定的目錄結構來組織,tomcat會自動檢測和解壓該檔案。JSP檔案第一次執行時,要先由Tomcat将其轉化為Servlet檔案,然後編譯,是以速度慢一些,但後續的執行速度會更快。

Tomcat不是一個完整意義上的Jave EE伺服器,它甚至都沒有提供對哪怕是一個主要Java EE API的實作;但由于遵守apache開源協定,tomcat卻又為衆多的java應用程式伺服器嵌入自己的産品中建構商業的java應用程式伺服器,如JBoss和JOnAS。盡管Tomcat對Jave EE API的實作并不完整,然而很企業也在漸漸抛棄使用傳統的Java EE技術(如EJB)轉而采用一些開源元件來建構複雜的應用。這些開源元件如Structs、Spring和Hibernate,而Tomcat能夠對這些元件實作完美的支援。

二、tomcat的特性

1、免費開源的輕量級的web伺服器

2、tomcat部分是Apache的擴充,它與Apache結合工作時,作為Apache的程序獨立運作

3、tomcat是一個servlet和JSP的web容器,預設模式是servlet容器

4、tomcat運作JSP頁面和servlet,是以,它對靜态頁面的處理能力不如Apache,但是它處理動态頁面能力比較強

5、适用于中小型系統和并發不是很多的場景

三、常見的web容器

商業版:

◇ Sun GlassFish Enterprise Server

◇ Sun Java System Web Server

◇ JBoss Enterprise Application Platform

◇ WebLogic Application Server

◇ Caucho's Resin Server

◇ WebSphere Application Server

◇ NetWeaver

非商業版:

◇ Apache Tomcat

◇ Apache Geronimo

◇ GlassFish

◇ JBoss Application Server

◇ Jetty

◇ Tiny Java Web Server

◇ Eclipse Virgo

四、JAVA web應用程式的體系結構

java webapp通常有一定的組織格式,通常包含一些servlet代碼,jsp代碼,部署描述符及其他類檔案,這些檔案通常會打包成歸檔格式。

webapp體系結構通常包含如下:

/:webapp的根目錄

WEB-INF:webapp的私有目錄,通常web.xml和context.xml放置在此目錄下。

WEB-INF/classes:該目錄下包含的是webapp的私有類檔案其webapp需要的第三方類檔案。

WEB-INF/lib:webapp自帶的jar格式的類檔案。

java程式的歸檔格式,包含以下幾種:

EJB類的歸檔擴充名為.jar

web應用程的歸檔擴充名為.war

資源擴充卡的擴充名為.rar

企業級應用程式的擴充名為.ear

web服務的擴充名為.ear或.war

五、tomcat架構元件

tomcat伺服器時由一系列可配置的元件構造。其中核心元件式catalina servlet容器,它是其他所有tomcat元件的頂層容器。其中tomcat各元件的層次關系如下圖所示:

輕量級java web伺服器--tomcat

server層:對應着server元件。邏輯上表示整個tomcat,一個tomcat執行個體,即整個catalina servlet容器。它處在tomcat頂層。每個JVM中隻有一個tomcat執行個體。一個server層可以包含一個或多個service層。

service層:對應着service元件。一個service層包含一個Engine層以及一個或多個連接配接器(connector)。service元件将一個或多個連接配接器綁定在Engin層。connector元件監聽端口,接受使用者的請求,并把請求轉交給Engin層處理,同時把處理後的結果傳回給用戶端。

連接配接器(connector):負責連接配接用戶端(可以是浏覽器或Web伺服器)請求至Servlet容器内的Web應用程式,通常指的是接收客戶發來請求的位置及伺服器端配置設定的端口。預設端口通常是HTTP協定的8080,管理者也可以根據自己的需要改變此端口。一個引擎可以配置多個連接配接器,但這些連接配接器必須使用不同的端口。預設的連接配接器是基于HTTP/1.1的Coyote。同時,Tomcat也支援AJP、JServ和JK2連接配接器。

Engin層:引擎是指處理請求的Servlet引擎元件,即Catalina Servlet引擎,它檢查每一個請求的HTTP首部資訊以辨識此請求應該發往哪個host或context,并将請求處理後的結果傳回給相應的用戶端。嚴格意義上來說,容器不必非得通過引擎來實作,它也可以是隻是一個容器。如果Tomcat被配置成為獨立伺服器,預設引擎就是已經定義好的引擎。而如果Tomcat被配置為Apache Web伺服器的提供Servlet功能的後端,預設引擎将被忽略,因為Web伺服器自身就能确定将使用者請求發往何處。一個引擎可以包含多個host元件。

host層(主機層):主機元件類似于Apache中的虛拟主機,但在Tomcat中隻支援基于FQDN的“虛拟主機”。一個host可以包含一個或多個context層。

context層(上下文):Context元件是最内層次的元件,它表示Web應用程式本身。配置一個Context最主要的是指定Web應用程式的根目錄,以便Servlet容器能夠将使用者請求發往正确的位置。Context元件也可包含自定義的錯誤頁,以實作在使用者通路發生錯誤時提供友好的提示資訊。

tomcat中的其他嵌套類元件

閥門(Valve):用來攔截請求并在将其轉至目标之前進行某種處理操作,類似于Servlet規範中定義的過濾器。Valve可以定義在任何容器類的元件(Engin、host、context)中。Valve常被用來記錄用戶端請求、用戶端IP位址和伺服器等資訊,這種處理技術通常被稱作請求轉儲(request dumping)。請求轉儲valve記錄請求用戶端請求資料包中的HTTP首部資訊和cookie資訊至檔案中,響應轉儲valve則記錄響應資料包首部資訊和cookie資訊至檔案中。

日志記錄器(Logger):用于記錄元件内部的狀态資訊,可被用于除Context之外的任何容器中。日志記錄的功能可被繼承,是以,一個引擎級别的Logger将會記錄引擎内部所有元件相關的資訊,除非某内部元件定義了自己的Logger元件。

領域(Realm):用于使用者的認證和授權;在配置一個應用程式時,管理者可以為每個資源或資源組定義角色及權限,而這些通路控制功能的生效需要通過Realm來實作。Realm的認證可以基于文本檔案、資料庫表、LDAP服務等來實作。Realm的效用會遍及整個引擎或頂級容器,是以,一個容器内的所有應用程式将共享使用者資源。同時,Realm可以被其所在元件的子元件繼承,也可以被子元件中定義的Realm所覆寫。

六、tomcat的安裝與配置

1、安裝JDK

在安裝tomcat之前,必須先安裝JDK(Java Development Kit),這是sun公司免費提供的Java語言的軟體開發工具包。其中包括了java虛拟機和一些庫類。編寫好的java源程式,編譯後可形成位元組碼,隻要安裝了JDK,就可以利用JVM對這些位元組碼進行解釋執行。

jdk下載下傳網址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

由于我這裡下載下傳的rpm包,所有我就直接使用rpm的形式安裝:

# rpm -ivh jdk-8u45-linux-i586.rpm

安裝完成後,可以使用如下指令檢視該軟體包生成的檔案,由于生産的檔案很多,建議使用more或less來檢視,如:

# rpm -ql jdk1.8.0_45-1.8.0_45-fcs.i586 | less

使用該指令檢視後可以知道jdk的家目錄為/usr/java/jdk1.8.0_45

配置jdk的環境變量

# vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/latest

export PATH=$JAVA_HOME/bin:$PATH

# source /etc/profile.d/java.sh

檢視jdk是否安裝成功:

# java –version

java version "1.8.0_45"

Java(TM) SE Runtime Environment (build 1.8.0_45-b14)

Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode, sharing)

出現如下資訊則表示jdk安裝成功。

2、安裝tomcat

下載下傳tomcat可以到tomcat的官網上去下載下傳,根據自己的平台和版本選擇相應的軟體版本。tomcat的官網位址為:http://tomcat.apache.org/。在這裡我使用的tomcat為tomcat7.0的版本。

# tar xf apache-tomcat-7.0.62.tar.gz -C /usr/local/

# cd /usr/local/

# ln -sv apache-tomcat-7.0.62 tomcat7

tomcat的啟動和關閉

tomcat的二進制腳本檔案為/usr/local/tomcat7/bin/catalina.sh。

配置tomcat的環境變量

# vim /etc/profile.d/tomcat.sh

export CATALINA_HOME=/usr/local/tomcat7

export PATH=$CATALINA_HOME/bin:$PATH

# source /etc/profile.d/tomcat.sh

啟動tomcat

#/usr/local/tomcat7/bin/catalina.sh  start

關閉tomcat

# /usr/local/tomcat7/bin/catalina.sh stop

如果要使用service的方式來啟動tomcat,可以在/etc/init.d/下面添加如下腳本

# vim /etc/init.d/tomcat

#!/bin/sh

# Tomcat init script for Linux.

#

# chkconfig: 2345 96 14

# description: The Apache Tomcat servlet/JSP container.

JAVA_OPTS='-Xms64m -Xmx128m'

JAVA_HOME=/usr/java/latest

CATALINA_HOME=/usr/local/tomcat7

export JAVA_HOME CATALINA_HOME

case $1 in

start)

        exec $CATALINA_HOME/bin/catalina.sh start

        ;;

stop)

        exec $CATALINA_HOME/bin/catalina.sh stop

restart)

        $CATALINA_HOME/bin/catalina.sh stop

        sleep 1

        $CATALINA_HOME/bin/catalina.sh start

configtest)

        exec $CATALINA_HOME/bin/catalina.sh configtest

*)

        echo "Usage:service `basename $0` {start|stop|restart|configtest}"

esac

# chmod +x /etc/init.d/tomcat

# chkconfig --add tomcat

# service tomcat start

# service tomcat stop

檢視tomcat是否啟動

# netstat -tunlp | grep java

tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      2251/java          

tcp        0      0 :::8009                     :::*                        LISTEN      2251/java          

tcp        0      0 :::8080                     :::*                        LISTEN      2251/java   

注意:tomcat預設監聽在8080端口。

值得注意的是,在tomcat啟動完成之後,過了一會後,tomcat又停止工作了。在tomcat的日志檔案找到了如下提示資訊:

INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/i386:/lib:/usr/lib

根據官網的提示,需要安裝apr庫、openssl庫和tomcat的apr  JNI。

# yum -y install openssl-devel apr-devel

然後在安裝tomcat的apr JNI,不過該軟體包可以在tomcat中找到,預設位于$CATALINA_HOME/bin目錄下。

# cd /usr/local/tomcat7/bin/

# tar xf tomcat-native.tar.gz

# cd tomcat-native-1.1.33-src/jni/native

# ./configure --with-apr=/usr --with-ssl --with-apxs

# make && make install

預設apr庫安裝在/usr/local/apr/lib,是以,還需要将這些庫導入到系統中。

# echo "/usr/local/apr/lib" > /etc/ld.so.conf.d/apr.conf

# ldconfig 

這個APR是什麼作用呢?Tomcat 可以用 Apache Portable Runtime 來提供更強性能,提升Web靜态頁面的處理能力,不再需要專門的Web Server來處理靜态頁面了。

至此,tomcat伺服器已經安裝完成,可以通過浏覽器來通路其預設頁面。如:

輸入http://192.168.0.200:8080/,顯示結果如下:

輕量級java web伺服器--tomcat

這是tomcat的預設首頁,對應檔案是tomcat安裝目錄下的webapps/ROOT/index.jsp。

3、tomcat的目錄結構

在安裝tomcat後,生成了幾個目錄結構,分别是:

bin:這個目錄一般存放的是一些二進制程式,tomcat啟動腳本cataline.sh就在這個目錄中。

conf:這是一個配置檔案目錄,裡面有許多配置檔案,配置檔案的格式一般是以.xml格式結尾的。

lib:這裡面存放的是以.jar結尾的檔案

logs:這是日志目錄。用于存放tomcat的日志

temp:這是存放臨時檔案的目錄

webapps:這個目錄很重要。這是tomcat的應用目錄或者叫做web伺服器的根目錄。把檔案放在這個目錄下就可以通過tomcat伺服器來進行通路。

work:存放JSP經過tomcat編譯後的servlet檔案。tomcat的工作目錄。

4、tomcat的配置檔案

剛剛說過tomcat的配置檔案目錄為/usr/local/tomcat7/conf,這裡面有許多以.xml格式結尾的檔案,如:

server.xml:這是tomcat的主配置檔案,包含service、connector、Engin、Real、Value、Hosts等元件的相關配置資訊

web.xml:遵循servlet規範的标準配置檔案,用于為tomcat上的所有執行個體提供部署描述符和提供包含MIME映射等預設配置資訊。也為webapp提供基本的servlet定義。

tomcat-user.xml:存放Realm認證時用到的相關角色、使用者和密碼等資訊;tomcat自帶的manager預設情況下會用到此檔案;在tomcat中添加、删除使用者、為使用者指定角色等都可以通過編輯此檔案來實作。

catalina.policy:如果在指令行中使用-security選項來啟動tomcat,則會讀取該配置檔案。該檔案主要定義了java相關的安全政策,如定義java類權限及通路核心代碼庫的權限。

catalina.properties:用于 定義java類的屬性。如設定類加載器的路徑、安全包清單及一些關于調整性能的參數等資訊。tomcat6在啟動時會讀取該檔案的相關設定。

logging.properties:此檔案可用于用來定義日志記錄器的元件及他們的相關配置資訊,還可以指定日志檔案的存儲位置及其日志級别。

context.xml:所有host的預設配置資訊,用于定義webapp的根目錄。

6、server.xml配置檔案簡介

server.xml檔案中可定義的元素非常多,包括Server, Service, Connector, Engine, Cluster, Host, Alias, Context, Realm, Valve, Manager, Listener, Resources, Resource, ResourceEnvRef, ResourceLink, WatchedResource, GlobalNameingResources, Store, Transaction, Channel, Membership, Transport, Member, ClusterListener等。在這裡我們隻對其常用的元件進行基本介紹,關于更多的參數的意思可以參考tomcat的官方文檔。

                  元件

                                       參數及其意思

                Server

一個server就是一個tomcat執行個體

port:接收shutdown指令的端口,預設僅允許通過本機通路,預設為8005;各個sever的端口号不能一樣;

shutdown:發送此server用于實作關閉tomcat執行個體的指令字元串。預設為SHUTDOWN;

className: 用于實作此Server容器的完全限定類的名稱,預設為org.apache.catalina.core.StandardServer;

               Service

将多個connector和Engine綁定起來

Name:指定service的名稱,預設為catalina;

className:用于實作service的類名,一般都是org.apache.catalina.core.StandardService。

              Connector

接受用戶端的請求,并将請求交給Engine處理。

address:指定連接配接器的監聽位址,預設為所有位址,即為0.0.0.0;

maxThreads:支援的最大并發連接配接數,預設為200;

port:連接配接器監聽的端口,該端口用來接受使用者的請求的,預設為8080;

protocol:連接配接器協定。預設為HTTP/1.1,定義AJP協定時通常為AJP/1.3。關于連接配接器在下文進行介紹;

redirectport:如果連接配接器使用的協定是http,當收到用戶端發來的https請求時,則轉發至此定義的端口上。

connectionTimeout:等待用戶端發送請求的逾時時間,機關為毫秒,預設為60000,即一分鐘;

enableLookup:是否通過request.getRemoteHost()進行DNS查詢以擷取用戶端的主機名;預設為true;

acceptCount:設定等待隊列的最大長度。通常在tomcat所有處理線程比較繁忙的情況下,新發來的請求将被放置到等待隊列中。

               Engine

用于分析http請求首部,并将請求發送到指定的host上進行處理。一個server内部隻能有一個Engine。

defaulthost: Tomcat支援基于FQDN的虛拟主機,這些虛拟主機可以通過在Engine容器中定義多個不同的Host元件來實作;但如果此引擎的連接配接器收到一個發往非非明确定義虛拟主機的請求時,則需要将此請求發送給一個預設的虛拟主機進行處理,是以,在Engine中定義的多個虛拟主機的主機名稱中至少要有一個跟defaultHost定義的主機名稱同名;

name:Engine元件的名稱,用于日志和錯誤資訊記錄時差別不同的引擎;

               Host:

位于Engine容器中,用于接收請求并進行相應處理的主機或虛拟主機

appBase:webapp的根目錄。即存放非歸檔的web應用程式的目錄或歸檔後的WAR檔案的目錄路徑;可以使用基于$CATALINA_HOME(tomcat的家目錄)的相對路徑;

autoDeploy: 在Tomcat處于運作狀态時放置于appBase目錄中的應用程式檔案是否自動進行deploy(部署);預設為true;

unpackWars: 在啟用此webapps時是否對WAR格式的歸檔檔案先進行展開;預設為true;

name:定義主機名稱。預設為localhost;

             Context:

一個Context定義用于辨別tomcat執行個體中的一個Web應用程式, 每一個context定義也可以使用一個單獨的XML檔案進行配置

docBase: 文檔的根目錄或者是context的根目錄;也可以使用相對路徑,起始路徑為此Context所屬Host中appBase定義的路徑;切記,docBase的路徑名不能與相應的Host中appBase中定義的路徑名有包含關系,比如,如果appBase為deploy,而docBase絕不能為deploy-bbs類的名字;

path:相對于Web應用程式根路徑而言的URI;如果為空“”,則表示為此webapp的根路徑;如果context定義在一個單獨的xml檔案中,此屬性不需要定義;

reloadable:是否允許重新加載此context相關的Web應用程式的類;預設為false;這個屬性非常重要,如果為true,則tomcat會自動檢測應用程式的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動裝載新的應用程式,我們可以在不重新開機tomcat的情況下改變應用程式;

              Realm:

用來定義一個安全上下文,它是用來提供使用者認證和授權,并為其分别角色的

className: 指定Realm使用的類名,這是定義Realm時必須提供的屬性,此類必須實作org.apache.catalina.Realm接口。可以使用的類名有如下幾個:

1、JAASRealm:基于Java Authintication and Authorization Service實作使用者認證;

2、JDBCRealm:通過JDBC通路某關系型資料庫表實作使用者認證;

3、JNDIRealm:基于JNDI使用目錄服務實作認證資訊的擷取;

4、MemoryRealm:查找tomcat-user.xml檔案實作使用者資訊的擷取;

5、UserDatabaseRealm:基于UserDatabase檔案(通常是tomcat-user.xml)實作使用者認證,它實作是一個完全可更新和持久有效的MemoryRealm,是以能夠跟标準的MemoryRealm相容;它通過JNDI實作;

              Valve

類似于過濾器,它可以工作于Engine和Host/Context之間、Host和Context之間以及Context和Web應用程式的某資源之間。一個容器内可以建立多個Valve,而且Valve定義的次序也決定了它們生效的次序。

className:指定實作value的類名。Tomcat6以上版本實作了多種不同的Valve,這些類名有:

1、AccessLogValve:通路日志Valve

2、ExtendedAccessValve:擴充功能的通路日志Valve

3、JDBCAccessLogValve:通過JDBC将通路日志資訊發送到資料庫中;

4、RequestDumperValve:請求轉儲Valve;

5、RemoteAddrValve:基于遠端位址的通路控制;

6、RemoteHostValve:基于遠端主機名稱的通路控制;

7、SemaphoreValve:用于控制Tomcat主機上任何容器上的并發通路數量;

8、JvmRouteBinderValve:在配置多個Tomcat為以Apache通過mod_proxy或mod_jk作為前端的叢集架構中,當期望停止某節點時,可以通過此Valve将用記請求定向至備用節點;使用此Valve,必須使用JvmRouteSessionIDBinderListener;

9、ReplicationValve:專用于Tomcat叢集架構中,可以在某個請求的session資訊發生更改時觸發session資料在各節點間進行複制;

10、SingleSignOn:将兩個或多個需要對使用者進行認證的webapp在認證使用者時連接配接在一起,即一次認證即可通路所有連接配接在一起的webapp;

11、ClusterSingleSingOn:對SingleSignOn的擴充,專用于Tomcat叢集當中,需要結合ClusterSingleSignOnListener進行工作;

allow:定義允許通路的IP位址清單,以逗号分開,支援正規表達式,是以,點号“.”用于IP位址時需要轉義;僅定義allow項時,非明确allow的位址均被deny;

deny:定義禁止通路的IP位址清單,以逗号分開的,支援正規表達式;使用方式同allow;

               Logger

表示日志,調試和錯誤資訊;

className:指定logger使用的類名,此類必須實作org.apache.catalina.Logger 接口;

prefix:指定log檔案的字首

suffix:指定log檔案的字尾

timestamp:如果為true,則log檔案後面會加上時間。

如:localhost_log.2001-10-04.txt;

7、web.xml檔案

web.xml基于Java Servlet規範,可被用于每一個Java servlet容器,通常有兩個存放位置,$CATALINA_HOME/conf和每個Web應用程式(通常是WEB-INF/web.xml)。Tomcat在deploy一個應用程式時(包括重新開機或重新載入),它首先讀取conf/web.xml,而後讀取WEB-INF/web.xml檔案。

8、配置manager來管理應用程式的部署及監控

tomcat的管理工具具有如下功能:

(1)、遠端Deploy新應用程式

(2)、清理空閑會話

(3)、在不重新開機的情況下可以undeploy(取消部署)應用程式

(4)、可以分析記憶體洩漏

(5)、可以檢視伺服器狀态和JVM狀态資訊

啟動manager功能,需要編輯配置檔案tomcat-user.xml。在這裡我的配置檔案為/usr/local/tomcat7/conf/tomcat-user.xml。根據自己的需要可以添加如下行資訊:

<role rolename="manager-gui"/>

<role rolename="manager-script"/>

<user username="tomcat" password="tomcat" roles="manager-gui,manager-script"/>

其中role行是用來定義角色的,manager有4個管理角色:

a、manager-gui:允許通路HTML gui頁面和狀态頁面

b、manager-script:允許通路文本界面和狀态頁面

c、manager-jmx:允許通路JMX代理和狀态頁面

d、manager-status:僅允許通路狀态頁面

<user…/>這一行是定義通路時需要提供的使用者、密碼及使用哪種角色來通路。

注意:添加完成之後,還需要重新開機tomcat伺服器。

測試通路,在浏覽器中輸入http://192.168.0.200:8080/manager,輸入tomcat-user.xml中定義的使用者和密碼後,顯示的結果如下所示:

tomcat的管理平台,自上而下共分為5個部分,分别為:

1、Message

這一行是消息欄,表示tomcat管理平台情況,其值OK表示tomcat運作正常。

2、Manager

下面有4個連結選項,分别是List Application(web應用管理清單)、HTML Manager Help(基于html來管理的web應用幫助資訊)、Manager Help(如何管理其他web應用幫助資訊)、Server Status(tomcat的伺服器狀态資訊)。系統預設連接配接是第一個。

(3)、Application

管理tomcat伺服器的所有web應用,每一個web應用都有5個屬性,分别是:

      path:該web應用程式的存放位置,即docBase值;

      Display Name:标記此web應用的一個名稱,供GUI工具使用,對應于web.xml檔案中的display-name屬性;

      Running:此web應用是否處于運作狀态;

      Sessions: Session連接配接數目;

      Command:分為2行,上面一行提供若幹個指令,用于tomcat處于運作狀态時,如何管理這些web應用。其中Undeploy表示解除安裝web應用,并且删除webapps/目錄下對應的檔案;

(4)、Deploy應用程式

用來釋出web應用的,有2種方式:

第一種方式是在Deploy directory or WAR file located on server這一個欄中填寫該web應用的相關資訊,包括web應用的URI,XML配置檔案路徑、WAR檔案或者該web應用相對于webapps目錄的檔案路徑。然後再點選“Deploy”按鈕即可。就可以釋出該web應用,釋出後再Application列中可以看到該web應用資訊。這種方式隻能釋出位于webapps/目錄下的web應用。

第二種方式是在WAR file to deploy這一欄中點選“浏覽”按鈕,在彈出的會話框中選中要釋出的WAR檔案,然後再點選“Deploy”按鈕,即可釋出web應用。釋出後的web應用可以在Application列中看到。這種釋出方式可以釋出位于任意目錄下的web應用。

(5)、Server status

顯示tomcat伺服器的狀态資訊

點選"server status"按鈕就可以顯示伺服器的狀态資訊,以及jvm的記憶體等資訊。

9、配置host-manager來管理虛拟主機的應用及其監控

啟用host-manager功能基于html的方式來管理虛拟主機,需要在tomcat-user.xml檔案中添加如下資訊:

  <role rolename="admin-gui" />

  <user username="webuser" password="webuser" roles="admin-gui" />

然後重新開機tomcat伺服器,在浏覽器中輸入如下資訊:

http://192.168.0.200:8080/host-manager/,顯示結果如下:

輕量級java web伺服器--tomcat

10、tomcat虛拟主機的實作

在tomcat的主配置檔案server.xml中,一個Host元件就是一個虛拟主機,是以,要想實作tomcat的虛拟主機,需要在server.xml檔案,添加相應host元件。在server.xml中有一個預設的虛拟主機,其主機名為localhost。如果需要實作tomcat的虛拟主機,需要在server.xml檔案中,且在Engine容器中添加如下資訊:

<Host     name='www.xsl.com' appBase="webapps"  unpackWARs="true" autoDeploy="true">

        <Context docBase="web1" path="a" />

</Host>

<Host     name='ftp.xsl.com' appBase="webapps"  unpackWARs="true" autoDeploy="true">

        <Context docBase="web2" path="b" />

 </Host>

然後再webapps目錄中建立如下目錄和檔案

# mkdir web1/a   –pv

# mkdir web2/b   –pv

# echo “hi,a” >  web1/a/a.html   這裡添加測試的内容即可

# echo "hi,b" >  web2/b/b.html

在浏覽器中進行測試:

注意:在測試前,需要對主機名進行位址解析,在這裡我們可以在本地的hosts檔案中添加相應的資訊即可。

輸入http://www.xsl.com:8080/web1/a/a.html,顯示結果如下

輕量級java web伺服器--tomcat

輸入http://ftp.xsl.com:8080/web2/b/b.html,顯示結果如下

輕量級java web伺服器--tomcat

七、java web應用程式的部署

java webapp的部署指的是将webapp及其依賴的類檔案加載到tomcat執行個體上運作,以便接受使用者的請求,想外提供服務。webapp的部署分為2種:

1、靜态部署。

靜态部署很簡單,就将這個應用程式複制到$CATALINA_BASE(webapp的根目錄,在host容器中指的就是appBase指定的目錄)目錄下,然後重新開機tomcat執行個體即可。如果應用程式是打包的話,複制完成之後,還需要重新開機tomcat執行個體,如果應用程式部署是非打包的話,直接複制到$CATALINA_BASE目錄下即可,不需要重新開機tomcat執行個體。

2、動态部署

動态部署指的是在不打斷tomcat服務的情況下部署某個webapp。這種部署方式可以使用tomcat的manager來完成,也可以使用專業的用戶端釋出器(TCD:Tomcat Client Deployer)來完成。

部署某個webapp時,通常涉及到如下操作指令:

Deploy: 向tomcat執行個體提供某應用程式源檔案,并讓伺服器将類加載進類加器中;這樣,應用程式才可以為使用者所使用;

Redeploy:用于更新deployment後的某應用程式或應用程式的部分内容;當redeploy整個應用程式時,目前應用程式的所有子產品都必須要redeploy成功,否則整個webapp将會停止 ;

Stop: 解除安裝目前應用程式的所有類,并停止向使用者提供服務;不過,其仍然會保留所有已deploy的檔案及名稱,并可用于後續的redeployment或starting;

Start: 重新裝載目前應用的類至類加載器,并開啟服務;

Undeploy: 停止某已經deploy的應用程式,并移除deploy産生的檔案和名稱;