Tomcat安裝與配置以及各組件詳解

一、安裝tomcat

上篇博文中我們學習了java的基礎知識,知道了tomcat是web container,通過java語言開發所以必須運行在JDK上,所以我們先安裝jdk

1、安裝jdk

[root@BAIYU_179 src]# ls
apache-tomcat-8.0.29.tar.gz  jdk-8u65-linux-x64.tar.gz
[root@BAIYU_179 src]# tar xf jdk-8u65-linux-x64.tar.gz -C /usr/local
[root@BAIYU_179 src]# cd /usr/local/jdk1.8.0_65/
[root@BAIYU_179 jdk1.8.0_65]# ls
bin        db       javafx-src.zip  lib      man          release  THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT  include  jre             LICENSE  README.html  src.zip  THIRDPARTYLICENSEREADME.txt

2、添加環境變量

[root@BAIYU_179 jdk1.8.0_65]# vi /etc/profile.d/java.sh
  1 export JAVA_HOME=/usr/local/jdk1.8.0_65
  2 export PATH=$JAVA_HOME/bin:$PATH

3、測試jdk是否安裝成功

[root@BAIYU_179 ~]# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

4、安裝tomcat

[root@BAIYU_179 src]# tar xf apache-tomcat-8.0.29.tar.gz -C /usr/local
[root@BAIYU_179 src]# cd /usr/local
[root@BAIYU_179 local]# ll
總用量 48
drwxr-xr-x  9 root root 4096 11月 26 15:02 apache-tomcat-8.0.29
drwxr-xr-x. 2 root root 4096 9月  23 2011 bin
drwxr-xr-x. 2 root root 4096 9月  23 2011 etc
drwxr-xr-x. 2 root root 4096 9月  23 2011 games
drwxr-xr-x. 2 root root 4096 9月  23 2011 include
drwxr-xr-x  8   10  143 4096 10月  7 08:29 jdk1.8.0_65
drwxr-xr-x. 2 root root 4096 9月  23 2011 lib
drwxr-xr-x. 2 root root 4096 9月  23 2011 lib64
drwxr-xr-x. 2 root root 4096 9月  23 2011 libexec
drwxr-xr-x. 2 root root 4096 9月  23 2011 sbin
drwxr-xr-x. 5 root root 4096 10月 27 16:37 share
drwxr-xr-x. 2 root root 4096 9月  23 2011 src
[root@BAIYU_179 local]# ln -sv apache-tomcat-8.0.29 tomcat
"tomcat" -> "apache-tomcat-8.0.29"
[root@BAIYU_179 local]# cd tomcat/
[root@BAIYU_179 tomcat]# ls
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
[root@BAIYU_179 tomcat]# ls bin/
bootstrap.jar                 daemon.sh         startup.sh
catalina.bat                  digest.bat        tomcat-juli.jar
catalina.sh                   digest.sh         tomcat-native.tar.gz
catalina-tasks.xml            setclasspath.bat  tool-wrapper.bat
commons-daemon.jar            setclasspath.sh   tool-wrapper.sh
commons-daemon-native.tar.gz  shutdown.bat      version.bat
configtest.bat                shutdown.sh       version.sh
configtest.sh                 startup.bat

5、添加環境變量

[root@BAIYU_179 ~]# vi /etc/profile.d/comcat.sh
  1 export CATALINA_HOME=/usr/local/tomcat
  2 export PATH=$CATALINA_HOME/bin:$PATH

6、測試tomcat是否安裝成功

注意:tomcat是項目名稱

         catalina是程序名稱,很多地方都保留了這個名字

[root@BAIYU_179 ~]# catalina.sh -h   
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_65
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Usage: catalina.sh ( commands ... )
commands:
  debug             Start Catalina in a debugger
  debug -security   Debug Catalina with a security manager
  jpda start        Start Catalina under JPDA debugger
  run               Start Catalina in the current window
  run -security     Start in the current window with security manager
  start             Start Catalina in a separate window
  start -security   Start in a separate window with security manager
  stop              Stop Catalina, waiting up to 5 seconds for the process to end
  stop n            Stop Catalina, waiting up to n seconds for the process to end
  stop -force       Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running
  stop n -force     Stop Catalina, wait up to n seconds and then use kill -KILL if still running
  configtest        Run a basic syntax check on server.xml - check exit code for result
  version           What version of tomcat are you running?
Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined
[root@BAIYU_179 ~]# catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_65
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@BAIYU_179 ~]# netstat -nlptu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN      13387/java          
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1078/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1166/master         
tcp        0      0 127.0.0.1:8005              0.0.0.0:*                   LISTEN      13387/java          
tcp        0      0 0.0.0.0:8009                0.0.0.0:*                   LISTEN      13387/java

二、Tomcat的目錄結構

1、Tomcat的目錄結構

[root@BAIYU_179 tomcat]# ls
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work

bin:腳本及啓動時用到的類

lib:類庫

conf:配置文件

logs:日誌文件

webapps:應用程序默認部署目錄

work:工作目錄

temp:臨時目錄

2、配置文件

[root@BAIYU_179 tomcat]# ls conf
Catalina         catalina.properties  logging.properties  tomcat-users.xml  web.xml
catalina.policy  context.xml          server.xml          tomcat-users.xsd

server.xml:主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主組件的相關配置信息;

context.xml:每個webapp都可以有專用的配置文件,這些配置文件通常位於webapp應用程序目錄下的WEB-INF目錄中,用於定義會話管理器、JBC等,conf/contest.xml是爲所有host的默認配置信息

web.xml:每個webapp部署之後才能被訪問,此文件則用於爲所有的webapp提供默認部署相關配置

遵循Servlet規範標準的配置文件,用於配置servlet,併爲所有的Web應用程序提供包括MIME映射等默認配置信息;

tomcat-users.xml:用戶認證的帳號和密碼配置文件,Realm認證時用到的相關角色、用戶和密碼等信息;Tomcat自帶的manager默認情況下會用到此文件;在Tomcat中添加/刪除用戶,爲用戶指定角色等將通過編輯此文件實現;

catalina.policy:當使用-security選項啓動tomcat實例時會讀取此配置文件來實現安全運行策略,Java相關的安全策略配置文件,在系統資源級別上提供訪問控制的能力;

catalina.properties:Java屬性的定義文件,用於設定類加載器路徑等,以及一些JVM相關的調優參數

Tomcat內部package的定義及訪問相關的控制,也包括對通過類裝載器裝載的內容的控制;Tomcat在啓動時會事先讀取此文件的相關設置;

logging.properties:日誌相關的配置信息

3、webapp的組織結構

tomcat自帶有兩個webapp(應用程序):

Manager:管理tomcat自身的應用

 Host_manage:管理tomcat的虛擬主機

[root@BAIYU_179 tomcat]# ls webapps/             #網站根目錄
docs  examples  host-manager  manager  ROOT      #子應用程序
[root@BAIYU_179 tomcat]# ls webapps/host-manager/      
p_w_picpaths  index.jsp  manager.xml  META-INF  WEB-INF

有特定組織形式、層次型目錄結構:主要包含了servlet代碼文件,JSP頁面文件、類文件、部署描述文件等信息(創建一個app必須要有這些文件,文件可以爲空但一定要有)

/:webapp的根目錄

index.jsp:wepapp主頁

WEB-INF:當前webapp的私有資源目錄,通常存放當前webapp自用的web.xml和context.xml

classes:此webapp的私有類 (tomcat自帶的2個webapp沒有私有類,沒有該目錄)

lib:此webapp的私有類,被打包爲jar格式的類(tomcat自帶的2個webapp沒有私有類,沒有該目錄)

META-INF:私有資源目錄(可選的)

手動添加測試應用程序:

1)創建特定目錄結構:

[root@BAIYU_179 webapps]# pwd
/usr/local/tomcat/webapps     
[root@BAIYU_179 webapps]# mkdir -pv testapp/{WEB-INF,lib,classes,META-INF}
mkdir: 已創建目錄 "testapp"
mkdir: 已創建目錄 "testapp/WEB-INF"
mkdir: 已創建目錄 "testapp/lib"
mkdir: 已創建目錄 "testapp/classes"
mkdir: 已創建目錄 "testapp/META-INF"

2)創建/usr/local/tomcat/webapps/testapp/index.jsp

[root@BAIYU_179 webapps]# cd testapp/
[root@BAIYU_179 testapp]# vi index.jsp     #測試只有這個主頁文件也可以訪問的呀?
  1 <%@ page language="java" %>
  2 <%@ page import="java.util.*" %>
  3 <html>
  4   <head>
  5     <title>JSP test page.</title>
  6   </head>
  7   <body>
  8     <% out.println("Hello,world!"); %>
  9   </body>
 10 </html>

wKiom1ZWzNujdmcbAAAzSnG9olI360.jpg

4、日誌文件

[root@BAIYU_179 tomcat]# ls logs/
catalina.2015-11-26.log      localhost.2015-11-26.log
catalina.out                 localhost_access_log.2015-11-26.txt
host-manager.2015-11-26.log  manager.2015-11-26.log

localhost_access_log.2015-11-26.txt    訪問日誌

localhost.2015-11-26.log 錯誤和其它日誌

manager.2015-11-26.log 管理日誌

catalina.2015-11-26.log Tomcat啓動或關閉日誌文件

5、添加主機虛擬主機

 1)創建新增的虛擬主機站點文件和目錄

[root@BAIYU_179 tomcat]# mkdir -p /webapps/magedu/ROOT/{WEB-INF,classess,lib,META-INF}
[root@BAIYU_179 tomcat]# vi /webapps/magedu/index.jsp
  1  <%@ page language="java" %>
  2    <%@ page import="java.util.*" %>
  3    <html>
  4      <head>
  5        <title>JSP test page.</title>
  6      </head>
  7      <body>
  8        <% out.println("Hello,magedu!"); %>
  9      </body>
 10   </html>

2)修改主配置文件

[root@BAIYU_179 tomcat]# vi conf/server.xml 
<Host name="www.magedu.com"  appBase="/webapps/magedu"  #添加一個Host段,定義一個虛擬主機
142             unpackWARs="true" autoDeploy="true">              
143         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="
    logs"                                               #定義日誌
144                prefix="magedu_access_log" suffix=".txt"
145                pattern="%h %l %u %t &quot;%r&quot; %s %b" />  
146       </host>


注意:如果自定義host及webapp路徑,需要在Host指定的路徑下創建ROOT來存放默認的站點文件;

三、Tomcat 配置文件詳解

Tomcat的配置文件默認存放在$CATALINA_HOME/conf目錄中,下面我們對常用的配置文件進行詳解。

1.server.xml

Tomcat以面向對象的方式運行,它可以在運行時動態加載配置文件中定義的對象結構,這有點類似於apache的httpd模塊的調用方式。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等。

下面簡單介紹幾個常用組件:

(1).Server組件

<Server port=”8005” shutdown=”SHUTDOWN”>

這會讓Tomcat啓動一個server實例(即一個JVM),它監聽在8005端口以接收shutdown命令。各Server的定義不能使用同一個端口,這意味着如果在同一個物理機上啓動了多個Server實例,必須配置它們使用不同的端口。這個端口的定義用於爲管理員提供一個關閉此實例的便捷途徑,因此,管理員可以直接telnet至此端口使用SHUTDOWN命令關閉此實例。不過,基於安全角度的考慮,這通常不允許遠程進行,只監聽在127.0.0.1。

Server的相關屬性:

  • port: 接收shutdown指令的端口,默認僅允許通過本機訪問,默認爲8005;

  • shutdown:發往此Server用於實現關閉tomcat實例的命令字符串,默認爲SHUTDOWN;

  • className: 用於實現此Server容器的完全限定類的名稱,默認爲org.apache.catalina.core.StandardServer;

(2).Service組件

     Service主要用於關聯一個引擎和與此引擎相關的連接器,每個連接器通過一個特定的端口和協議接收入站請求交將其轉發至關聯的引擎進行處理。因此,Service要包含一個引擎、一個或多個連接器。

如: 
<Service name=”Catalina”>

這定義了一個名爲Catalina的Service,此名字也會在產生相關的日誌信息時記錄在日誌文件當中。

Service相關的屬性:

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

  • name:此服務的名稱,默認爲Catalina;

(3).Connector組件

進入Tomcat的請求可以根據Tomcat的工作模式分爲如下兩類:

  • Tomcat作爲應用程序服務器:請求來自於前端的web服務器,這可能是Apache, IIS, Nginx等;

  • Tomcat作爲獨立服務器:請求來自於web瀏覽器;

Tomcat應該考慮工作情形併爲相應情形下的請求分別定義好需要的連接器才能正確接收來自於客戶端的請求。一個引擎可以有一個或多個連接器,以適應多種請求方式。

定義連接器可以使用多種屬性,有些屬性也只適用於某特定的連接器類型。一般說來,常見於server.xml中的連接器類型通常有4種:

  • HTTP連接器

  • SSL連接器

  • AJP 1.3連接器

  • proxy連接器

如上面示例server.xml中定義的HTTP連接器:

<Connector port="8080" protocol="HTTP/1.1"
  maxThreads="150" connectionTimeout="20000"
  redirectPort="8443"/>


定義連接器時可以配置的屬性非常多,但通常定義HTTP連接器時必須定義的屬性只有“port”,定義AJP連接器時必須定義的屬性只有"protocol",因爲默認的協議爲HTTP。

以下爲常用屬性的說明:

  • address:指定連接器監聽的地址,默認爲所有地址,即0.0.0.0;

  • maxThreads:支持的最大併發連接數,默認爲200;

  • port:監聽的端口,默認爲8080;

  • protocol:連接器使用的協議,默認爲HTTP/1.1,定義AJP協議時通常爲AJP/1.3;

  • redirectPort:如果某連接器支持的協議是HTTP,當接收客戶端發來的HTTPS請求時,則轉發至此屬性定義的端口;

  • connectionTimeout:等待客戶端發送請求的超時時間,單位爲毫秒,默認爲60000,即1分鐘;

  • enableLookups:是否通過request.getRemoteHost()進行DNS查詢以獲取客戶端的主機名;默認爲true;

  • acceptCount:設置等待隊列的最大長度;通常在tomcat所有處理線程均處於繁忙狀態時,新發來的請求將被放置於等待隊列中;

下面是一個定義了多個屬性的SSL連接器: 

<Connector port="8443"
 maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
 enableLookups="false" acceptCount="100" debug="0" scheme="https" secure="true"
 clientAuth="false" sslProtocol="TLS" />

(4).Engine組件

      Engine是Servlet處理器的一個實例,即servlet引擎,默認爲定義在server.xml中的Catalina。Engine需要defaultHost屬性來爲其定義一個接收所有發往非明確定義虛擬主機的請求的host組件。

如: 

<Engine name="Catalina" defaultHost="localhost">

常用的屬性定義:

  • defaultHost:Tomcat支持基於FQDN的虛擬主機,這些虛擬主機可以通過在Engine容器中定義多個不同的Host組件來實現;但如果此引擎的連接器收到一個發往非非明確定義虛擬主機的請求時則需要將此請求發往一個默認的虛擬主機進行處理,因此,在Engine中定義的多個虛擬主機的主機名稱中至少要有一個跟defaultHost定義的主機名稱同名;

  • name:Engine組件的名稱,用於日誌和錯誤信息記錄時區別不同的引擎;

注,Engine容器中可以包含Realm、Host、Listener和Valve子容器。

(5).Host組件

位於Engine容器中用於接收請求並進行相應處理的主機或虛擬主機,如前面默認配置文件中定義: 

<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>

常用屬性說明:

  • appBase:此Host的webapps目錄,即存放非歸檔的web應用程序的目錄或歸檔後的WAR文件的目錄路徑;可以使用基於$CATALINA_HOME的相對路徑;

  • autoDeploy:在Tomcat處於運行狀態時放置於appBase目錄中的應用程序文件是否自動進行deploy;默認爲true;

  • unpackWars:在啓用此webapps時是否對WAR格式的歸檔文件先進行展開;默認爲true;

下面是虛擬主機定義示例:

<Engine name="Catalina" defaultHost="localhost">
 <Host name="localhost" appBase="webapps">
 <Context path="" docBase="ROOT"/>
 <Context path="/bbs" docBase="/web/bss"
  reloadable="true" crossContext="true"/>
 </Host>
  
 <Host name="mail.test.com" appBase="/web/mail">
 <Context path="" docBase="ROOT"/>
 </Host>
</Engine>

主機別名定義:

如果一個主機有兩個或兩個以上的主機名,額外的名稱均可以以別名的形式進行定義,

如下:

<Host name="www.test.com" appBase="webapps" unpackWARs="true">
 <Alias>test.com</Alias>
</Host>

(6).Context組件

Context在某些意義上類似於apache中的路徑別名,一個Context定義用於標識tomcat實例中的一個Web應用程序;如下面的定義:

<Context path="" docBase="/web/webapps"/>
 
 
<!-- buzzin webapp -->
<Context path="/bbs"
 docBase="/web/threads/bbs"
 reloadable="true">
</Context>
 
 
<!-- chat server -->
 <Context path="/chat" docBase="/web/chat"/>
 
  
 <!-- darian web -->
<Context path="/darian" docBase="darian"/>

在Tomcat中,每一個context定義也可以使用一個單獨的XML文件進行,其文件的目錄爲$CATALINA_HOME/conf/<engine name>/<host name>。可以用於Context中的XML元素有Loader,Manager,Realm,Resources和WatchedResource。

常用的屬性定義有:

  • docBase:Web應用程序的存放位置;也可以使用相對路徑,起始路徑爲此Context所屬Host中appBase定義的路徑;切記,docBase的路徑名不能與相應的Host中appBase中定義的路徑名有包含關係,比如,如果appBase爲deploy,而docBase絕不能爲deploy-bbs類的名字;

  • path: 訪問路徑,相對於Web服務器根路徑而言的URI;如果爲空“”,則表示爲此webapp的根路徑;如果context定義在一個單獨的xml文件中,此屬性不需要定義;

  • reloadable:是否允許重新加載此context相關的Web應用程序的類;默認爲false;

注意:這裏有兩點很容易混淆

1、appBase和docbase

<Host name="www.xxj.com"  appBase="/test"
132             unpackWARs="true" autoDeploy="true">
133 <Context path="" docBase="/test/anyfish" reloadable="true"/>
134 <Context path="/sb" docBase="/test/sb" reloadable="true"/>
135 <Context path="/mage" docBase="/webapps/magedu" reloadable="true"/>
136         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="
    logs"
137                prefix="localhost_access_log" suffix=".txt"
138                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
139 
140       </Host>

appbase 表示此虛擬主機下所有java應用的目錄,該指令指定目錄下的所有目錄都會當作一個應用

例如上面/test路徑下的所有目錄都作爲一個應用

docbase 表示一個應用的路徑

區別: appbase設置與否其實關係不大,經測試可以設置爲空,可以不設置,不設置時,默認會使用/usr/local/tomcat/webapps,此時能訪問到/usr/local/tomcat/webapps目錄下的資源,所有建議還是要設置。

            docbase可以使用絕對路徑,也可以使用相對路徑,使用相對路徑,根是docbase指定的目錄,

        appBase指定目錄下的ROOT目錄,訪問時的url可以要該目錄名

tomcat在找到host後然後繼續找到context下docbase路徑下的JSP文件,然後構造對象執行完,將值返回。

那麼appbase的作用是什麼呢?

因爲jsp不像php直接將代碼拷貝網站目錄下就完事了,它往往是編譯成一個war結尾的壓縮包,然後將這個包放到網頁目錄下,這個appbase的作用就在這裏,這個目錄下的war包能自動解壓自動部署,當然如果你只是把包放到appbase下,就算解壓了,但是你沒有配置docbase,依舊是不能從網頁上訪問的。

2、host和context區別

host表示一個虛擬主機  context表示虛擬主機下一個jsp的應用

sever.xml中每建立一個虛擬主機。都會在/usr/local/tomcat/conf/Catalina/新生成一個目錄,

例如:

[root@BAIYU_179 Catalina]# ls /usr/local/tomcat/conf/Catalina/
localhost  www.anyfish.com  www.b.com  www.magedu.com  www.xxj.com

每個目錄其實就表示一個虛擬主機,在這個目錄下你可以建每個JSP應用的配置文件

也就是說你剛纔在server.xml中配置的context這部分,可以放到這個裏面自建,

例如在www.xxj.com目錄下建立:

[root@BAIYU_179 Catalina]# vi www.xxj.com/a.xml
  1 <Context path="/a" reloadable="true" docBase="/webapps/a" />

再創建站點文件和目錄:

[root@BAIYU_179 Catalina]# cd /webapps
[root@BAIYU_179 webapps]# ls
b.com  magedu  sb
[root@BAIYU_179 webapps]# mkdir a
[root@BAIYU_179 webapps]# mv magedu/* a
[root@BAIYU_179 webapps]# vi a/index.jsp
  1  <%@ page language="java" %>
  2    <%@ page import="java.util.*" %>
  3    <html>
  4      <head>
  5        <title>JSP test page.</title>
  6      </head>
  7      <body>
  8        <% out.println("aaaaaaaa!"); %>
  9      </body>
 10   </html>

再從瀏覽器訪問http://www.xxj.com:8080/a

wKiom1ZYKcvgaVrlAABTbh7wMCk065.png

(7).Realm組件 
一個Realm表示一個安全上下文,它是一個授權訪問某個給定Context的用戶列表和某用戶所允許切換的角色相關定義的列表。因此,Realm就像是一個用戶和組相關的數據庫。定義Realm時惟一必須要提供的屬性是classname,它是Realm的多個不同實現,用於表示此Realm認證的用戶及角色等認證信息的存放位置。

  • JAASRealm:基於Java Authintication and Authorization Service實現用戶認證;

  • JDBCRealm:通過JDBC訪問某關係型數據庫表實現用戶認證;

  • JNDIRealm:基於JNDI使用目錄服務實現認證信息的獲取;

  • MemoryRealm:查找tomcat-user.xml文件實現用戶信息的獲取;

  • UserDatabaseRealm:基於UserDatabase文件(通常是tomcat-user.xml)實現用戶認證,它實現是一個完全可更新和持久有效的MemoryRealm,因此能夠跟標準的MemoryRealm兼容;它通過JNDI實現;

四、部署appweb

1、webapp歸檔格式

.war:web應用程序

.jar:EJB的類

.rar:資源適配器

.ear:企業級應用程序

2、部署(deployment)web的相關操作

deploy:部署,將webapp的源文件放置於目標目錄、配置tomcat服務器能夠基於context定義的路徑來訪問此appweb,並將其持有類通過class loader裝載至tomcat實現

redeploy:重新部署

undeploy:反部署,停止webapp,並從tomcat實例拆除其部分文件和部署名

stop:停止

start:啓動處於停止狀態的webapp

3、部署的方式

冷部署:在tomcat啓動之前進行部署

熱部署:在不停止tomcat的前提下進行部署,使用部署工具進行:manager,ant腳本,tcd(tomcat client deployer)

五、tomcat自帶圖形管理接口

  • manager 管理應用程序的部署及監控

  • host-manager 虛擬主機的管理

我們先來看一下默認的圖形配置界面,

test3

注,大家注意看右上角,我用紅色方框標記出來的,大家可以看有三個按鈕,分別爲

  • Server Status 主要用來查看服務器的狀態

  • Manager App 主要用來管理應用程序的部署及監控

  • Host Manager 主要用來管理虛擬主機

下面我們就來具休的配置一下,大家可以看到,你點擊任何一個按鈕都要輸入用戶名和密碼的,在我們配置之前我們先來說一下,Tomcat的Manager功能,

Manager的四個管理角色:

  • manager-gui - allows access to the HTML GUI and the status pages

  • manager-script - allows access to the text interface and the status pages

  • manager-jmx - allows access to the JMX proxy and the status pages

  • manager-status - allows access to the status pages only

下面我們就來啓用manager功能:

1、用戶授權

注:先添加角色再添加用戶和密碼

[root@BAIYU_179 tomcat]# ls conf/
Catalina             context.xml         server.xml.orig        tomcat-users.xsd
catalina.policy      logging.properties  tomcat-users.xml       web.xml
catalina.properties  server.xml          tomcat-users.xml.orig
[root@BAIYU_179 tomcat]# vi conf/tomcat-users.xml
#在<tomcat-users段中添加這2行:
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>

重啓tomcat,再從瀏覽器訪問

2、Server Status

點擊Server Status按鈕,輸入用戶名和密碼,我這裏全部設置是tomcat

test5

然後,會出現以下界面,顯示全部服務器運行狀態:

manager

1)可以看到內存池的分佈狀態:

堆內存被分爲3個部分:一等區,存活區,老年帶

非堆內存:code cache,持久帶

2)連接器狀態

ajp連接器

http連接器

3、Manager App

下面是應用程序部署管理界面:

manager2

可以在這個界面點擊按鈕安裝應用的啓動,停止,部署,反部署,熱部署和相關的設置

4、Host Manager

下面是虛擬主機管理頁面,

host-manager

注,我們一般在生產環境中用的最多是應用程序部署界面,可以進行熱佈署應用程序,很方便。

六、反向代理方式使用Tomcat服務器

在實際生產環境中tomcat更多應用於後端動態web服務器,前端通過nginx或apache代理

1、Nginx + Tomcat

client-->nginx-->reverse proxy-->tomcat(http connector)

 1)安裝nginx

這裏爲了省事就直接使用Yum安裝nginx了

[root@BAIYU_179 ~]# yum install nginx -y

 2)修改nginx配置文件添加代理至後端tomcat,並添加.jsp格式的主頁

[root@BAIYU_179 ~]# cd /etc/nginx/conf.d/
[root@BAIYU_179 conf.d]# ls
default.conf  ssl.conf  virtual.conf
[root@BAIYU_179 conf.d]# vi default.conf 
 location / {                                    #此時所有的請求都被代理至後端的tomcat
 16       #  root   /usr/share/nginx/html;
 17        proxy_pass http://192.168.100.179:8080;
 18         index  index.jsp index.html index.htm;
 19     }
  
 [root@BAIYU_179 conf.d]# service nginx reload
重新載入 nginx:[確定]

再從瀏覽器訪問:

wKiom1ZZQCLQAiKGAACzLTRBEZo154.png

 3)nginx與tomcat動靜分離

[root@BAIYU_179 conf.d]# vi default.conf 
location / {
 16         root   /usr/share/nginx/html;
 17        #proxy_pass http://192.168.100.179:8080;
 18         index  index.jsp index.html index.htm;
 19     }
 20     location ~* \.(jsp|do) {
 21           proxy_pass http://192.168.100.179:8080;
 22     }

注意:此時訪問只有後端帶.jsp的url纔會被代理至後端的tomcat,其它內容都有nginx提供

wKiom1ZZQ_6zIOddAAB1SEaUGgw627.png

此時發現圖片內容無法顯示,因爲我們做了動靜分離圖片應該由nginx提供,但nginx目錄下沒有圖片,所以這裏顯示不出來,所以,做動靜分離時注意,資源的存放目錄

2、Apache + Tomcat

clien-->httpd-->reverse proxy-->tomcat(http connector,ajp connector)

兩種連接器:

http connector(默認):

ajp connector:二進制格式,帶寬利用率、效率更高

httpd做反向代理時需要mod_proxy模塊,並關閉正向代理

mod_proxy_http

mod_proxy_ajp

 1)安裝httpd

[root@BAIYU_179 conf.d]# service nginx stop
停止 nginx:[確定]
[root@BAIYU_179 conf.d]# yum install httpd   #yum安裝的Httpd默認安裝了上面所提到的3個模塊

2)http connector示例

修改httpd的配置文件

[root@BAIYU_179 ~]# cd /etc/httpd/
[root@BAIYU_179 httpd]# ls
conf  conf.d  logs  modules  run
[root@BAIYU_179 conf.d]# vi http-tomcat.conf   #添加此文件
  1 NameVirtuaLHost *:80       #啓用基於名稱的虛擬主機
  2 <VirtuaLHost *:80>          
  3     ServerName         
  4     ProxyVia on            #自動添加Via首部
  5     ProxyRequests off      #關閉正向代理
  6     ProxypreserveHost ON   #代理支持基於主機名的虛擬主機
  7     <Proxy *>              #代理服務授權
  8        Order deny,allow
  9        allow from all
 10    </Proxy>
 11    ProxyPass /status !     #給路徑不反向代理
 12    ProxyPass /            #代理 
 13    ProxyPa***everse /    #響應時路徑映射 
 14    <Location />            #授權,非必須
 15        Order deny,allow
 16        allow from all
 17   </Location>
 18 </virtuaLHOST>
  
 [root@BAIYU_179 conf.d]# service httpd configtest
httpd: apr_sockaddr_info_get() failed for BAIYU_179
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
[root@BAIYU_179 conf.d]# service httpd start
正在啓動 httpd:httpd: apr_sockaddr_info_get() failed for BAIYU_179
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[確定]
[root@BAIYU_179 conf.d]# service httpd reload
重新載入 httpd:

注意:apache+tomcat時,一般apache只做代理不提供靜態web服務,在前面在加一個nginx做代理和靜態web

 3)ajp connector示例

[root@BAIYU_179 conf.d]# ls
http-tomcat.conf  http-tomcat.conf.orig  README  welcome.conf
[root@BAIYU_179 conf.d]# cp http-tomcat.conf http-tomcat.bak
[root@BAIYU_179 conf.d]# mv http-tomcat.conf ajp-tomcat.conf
[root@BAIYU_179 conf.d]# vi  ajp-tomcat.conf 
  1 NameVirtuaLHost *:80
  2 <VirtuaLHost *:80>
  3     ServerName www.a.com
  4     ProxyVia on
  5     ProxyRequests off
  6     ProxypreserveHost ON
  7     <Proxy *>
  8        Order deny,allow
  9        allow from all
 10    </Proxy>
 11    ProxyPass /status !
 12    ProxyPass / ajp://192.168.100.179:8009/          #只要修改協議和端口即可
 13    ProxyPa***everse / ajp://1792.168.100.179:8009/
 14    <Location />
 15        Order deny,allow
 16        allow from all
 17   </Location>
 18 </virtuaLHOST>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章