Tomcat的安裝和配置文件詳解(一)

下載安裝JDK(Tomcat在啓動前必須安裝JDK及Java的運行與開發環境,由於Tomcat自己就是有Java編寫的,JDK中有Java的API,JVM等Java運行和開發的最小環境)css

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html html

[root@node1 tool]# tar -zxf jdk-8u111-linux-x64.tar.gz -C /usr/local/java/前端

輸出相關的環境變量java

[root@node1 jdk1.8.0_111]# vim /etc/profilenode

export JAVA_HOME=/usr/local/java/jdk1.8.0_111mysql

export JRE_HOME=/usr/local/java/jdk1.8.0_111/jre
linux

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH程序員

export PATH=$JAVA_HOME/bin:$PATHweb

source(讀)如下這個文件sql

[root@node1 java]# source /etc/profile

能夠看到JDK1.8已經安裝

[root@node1 java]# java -version 

java version "1.8.0_111"

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

Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)


下載安裝Tomcat

http://tomcat.apache.org/download-90.cgi


[root@node1 tool]# tar -zxf apache-tomcat-7.0.73.tar.gz -C /usr/local/

[root@node1 tool]# cd /usr/local/

drwxr-xr-x.  2 mysql mysql 4096 Sep 23  2011 src

[root@node1 local]# ln -sv apache-tomcat-7.0.73/ tomcat

[root@node1 local]# cd tomcat/

root@node1 tomcat]# ls bin/

bootstrap.jar       commons-daemon-native.tar.gz    digest.sh         startup.battool-wrapper.s  catalina.bat           configtest.bat             setclasspath.bat        startup.sh            version.bat

catalina.sh            configtest.sh                               setclasspath.sh         tomcat-juli.jar         version.sh


#裏面所有是一些.sh的腳本和.jar的Java歸檔文件;Tomcat就是 用Java寫的因此啓動時會調用一些Java庫,.bat爲Windows的批處理腳本,用於windows啓動時調用,其中catalina.sh爲核心腳本

[root@node1 tomcat]# ls conf

Catalina         catalina.properties  logging.properties  tomcat-users.xml

catalina.policy    context.xml          server.xml          web.xml

#其中server.xml爲主配置文件;

#tomcat-users.xml爲用戶認證文件,Tomcat啓動後會將這個文件讀進內存中完成帳號和密碼的檢測認證,因此這個文件的安全性很重要;#web.xml爲Tomcat默認的應用程序部署描述符,一個web應用程序所謂的部署就是將它放在Tomcat某一個context某一個host可以訪問到的路  徑下,及將web應用程序所依賴的類裝載進JVM的過程;

#context.html默認爲上下文提供的配置文件

#catalina.pro[erties 用來定義應用程序自身屬性的(啓動JVM要定義許多屬性),如所使用的內存大小,所使用的字符串緩衝池的大小,你的server loader加載器是什麼,等等

#Catalina.policy用來定義Tomcat自身的安全和資源受權策略,如定義經過互聯網訪問時,哪些資源用戶能夠訪問哪些資源用戶不能訪問;哪些資源能被裝載,哪些資源不能被裝載等等

#logging.pro[erties 用來定義你的日誌級別,日誌文件的路徑等等


通常來講若是你不定義服務器自身的屬性的話,只需修改.xml的文件



[root@node1 conf]# vim server.xml 

<?xml version='1.0' encoding='utf-8'?>

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

#在Telnet的8005端口發一個shutdown就能夠把Tomcat停掉,建議關掉(危險)


Listener className="org.apache.catalina.startup.VersionLoggerListener" />

  <!-- Security listener. Documentation at /docs/config/listeners.html

  <Listener className="org.apache.catalina.security.SecurityListener" />

  -->

  <!--APR library loader. Documentation at /docs/apr.html -->

  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->

  <Listener className="org.apache.catalina.core.JasperListener" />

  <!-- Prevent memory leaks due to use of particular java/javax APIs-->

  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />


#listener爲一大堆的偵聽器,是程序員或者應用程序在調試時關閉或者啓動某個容器時用的組件

<GlobalNamingResources>

    <!-- Editable user database that can also be used by

         UserDatabaseRealm to authenticate users

    -->

    <Resource name="UserDatabase" auth="Container"

              type="org.apache.catalina.UserDatabase"

              description="User database that can be updated and saved"

              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

              pathname="conf/tomcat-users.xml" />

  </GlobalNamingResources>


#全局命名資源,這裏定義了一個全局命名資源,用來實現用戶的認證


 <Service name="Catalina">

<Connector port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" />


 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

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


#service 定義服務,這裏定義的第一個服務就是Catalina,這個服務中定義了一個鏈接器,其端口爲8080,因此他能夠從8080端口接受用戶的請求,其協議爲HTTP/1.1

#而Catalina服務中的另外一個鏈接器的端口爲8009,因此也能夠從8009端口接受用戶的請求,但其協議爲AJP/1.3(這是一種以二進制格式從前端Apache傳輸用戶請求至8009端口的協議,比用http協議效率要高)


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

#定義了一個叫作Catalina的引擎,其默認主機爲本機


 <Realm className="org.apache.catalina.realm.LockOutRealm">

 <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

               resourceName="UserDatabase"/>

      </Realm>


 <Host name="localhost"  appBase="webapps"

            unpackWARs="true" autoDeploy="true">

#定義了一個Realm(領域)用於用戶的認證和受權,但默認爲容許全部用戶訪問


<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="localhost_access_log." suffix=".txt"

               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

#定義了有個Value(閥門),用來記錄客戶端請求、客戶端IP地址和服務器等信息,說明日誌放在logs目錄下(安裝目錄),其中每一個日誌都以localhost_access_log.開頭中間爲日期,以.txt結尾,pattern定義了日誌的格式

      </Host>

    </Engine>

  </Service>

</Server>



輸出環境變量,明確說明Catalina在什麼位置(即Tomcat實例運行所在的目錄),用來定義你的Catalina工做的路徑。須要注意的是在同一個物理服務器上能夠同時啓用多個Tomcat實例(但須要使用不一樣的端口)

[root@node1 tomcat]# vim /etc/profile.d/tomcat.sh 

export CATALINA_HOME=/usr/local/tomcat

export PATH=$PATH:$CATALINA_HOME/bin

source(讀)一下這個文件

[root@node1 tomcat]# . /etc/profile.d/tomcat.sh 


測試一下,爲Catalina傳遞一個參數version,其實就是執行了/usr/locar/tomcat/bin/version.sh腳本

[root@node1 tomcat]# catalina.sh version

Using CATALINA_BASE:   /usr/local/tomcat

Using CATALINA_HOME:   /usr/local/tomcat

Using CATALINA_TMPDIR: /usr/local/tomcat/temp

Using JRE_HOME:     /usr/local/java/jdk1.8.0_111/jre #你安裝的jre目錄(jdk裝後生成的)

Using CLASSPATH:   /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

Server version: Apache Tomcat/7.0.73

Server built:   Nov 7 2016 21:27:23 UTC

Server number:  7.0.73.0

OS Name:       Linux

OS Version:     2.6.32-573.el6.x86_64 #Linux內核版本

Architecture:    amd64

JVM Version:    1.8.0_111-b14 #JVM的版本

JVM Vendor:     Oracle Corporation


啓動Tomcat

[root@node1 tomcat]# 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/java/jdk1.8.0_111/jre

Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

Tomcat started.

[root@node1 tomcat]# jps

2118 Jps

1927 Bootstrap


其中8080端口爲http,8009爲ajp

[root@node1 ~]# netstat -tnlp |grep java

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

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

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



tomcat的庫文件,有一大堆的jar文件。如jasper.jar、servlet-api.jar、jsp-api.jar等。是Tomcat實現許多重要功能必須依賴的類庫

[root@node1 tomcat]# ls lib/

annotations-api.jar  ecj-4.4.2.jar  servlet-api.jar      tomcat-i18n-es.jar  

catalina-ant.jar    el-api.jar    tomcat7-websocket.jar  tomcat-i18n-fr.jar

catalina-ha.jar     jasper-el.jar  tomcat-api.jar       tomcat-i18n-ja.jar

catalina.jar       jasper.jar    tomcat-coyote.jar     tomcat-jdbc.jar

catalina-tribes.jar  jsp-api.jar   tomcat-dbcp.jar       tomcat-util.jar



[root@node1 tomcat]# ll logs/

 1 23:32 catalina.2017-01-01.log 

 2 11:16 catalina.out #啓動時Catalina本身輸出的日誌

 1 23:25 host-manager.2017-01-01.log #主機管理日誌

 1 23:32 localhost.2017-01-01.log #主機的日誌文件

 1 23:25 localhost_access_log.2017-01-01.txt #主機的訪問日誌文件

 2 11:15 localhost_access_log.2017-01-02.txt #通常日誌天天滾動一次

 1 23:25 manager.2017-01-01.log

 

[root@node1 tomcat]# ll 


 1 23:23 temp     #臨時文件的目錄

 2 11:54 webapps   #應用程序目錄如:docs、examples、ROOT等

 1 23:25 work     #工做目錄,在這個目錄下每個Engine都有本身的獨立目錄;而在Engine下,               #每個Host也有本身的獨立目錄,而在Host下每個應用程序也有本身的獨立               #目錄

[root@node1 tomcat]# ls work/

Catalina                               #Engine

[root@node1 tomcat]# ls work/Catalina/

localhost                              #Host

[root@node1 tomcat]# ls work/Catalina/localhost/

_  docs  examples  host-manager  manager       #應用程序


[root@node1 tomcat]# cd work/Catalina/localhost/

[root@node1 localhost]# cd _

[root@node1 _]# ll #能夠看到什麼都沒有

total 0

瀏覽器訪問一下192.168.139.2:8080

對應/usr/local/apache-tomcat-7.0.73/webapps/ROOT/目錄下的應用程序,如圖

wKiom1hp5YOjZOxCAAGw6sRk5e0636.png

[root@node1 _]# ll

total 4

drwxr-xr-x. 3 root root 4096 Jan  2 13:29 org

#多了一個org文件。。能夠看到你訪問了一個應用程序後,會將index.jsp在這裏轉換爲index_jsp.java再轉換爲index_jsp.class。因此第一個用戶訪問JSP資源時會很慢,但第二個用戶來訪問相同資源時(只要資源未修改),會直接使用編譯好的.class,因此第二個用戶訪問會比第一個快的多,這也是JSP編譯的頁面訪問快的緣由,只要你的資源未修改JSP就是快

[root@node1 _]# ls org/apache/jsp/

index_jsp.class  index_jsp.java



#能夠看到有一堆的靜態頁面(.png圖片)只有主頁index.jsp爲動態的

[root@node1 tomcat]# ls webapps/ROOT/

asf-logo.png     bg-middle.png  bg-upper.png  index.jsp      tomcat.gif tomcat.svg

asf-logo-wide.gif  bg-nav-item.png  build.xml    RELEASE-NOTES.txt  tomcat.png     

bg-button.png     bg-nav.png    favicon.ico   tomcat.css      

WEB-INF

 

注:須要注意的是每一個應用程序都有 WEB-INF路徑,有時還有META-INF文件,這兩個路徑下用來放私有資源,是用戶經過Web訪問URL不能訪問到的,除了這兩個路徑下的資源均可以用web訪問URL訪問到


爲Tomcat提供init腳本


[root@node1 java]# vim /etc/rc.d/init.d/tomcat


#!/bin/sh

# Tomcat init script for Linux.

#

# chkconfig: 2345 96 14

# description: The Apache Tomcat servlet/JSP container.

export JAVA_OPTS='-Xms64m -Xmx128m' #定義啓動時堆內存最小64M,最大128M

JAVA_HOME=/usr/local/java/jdk1.8.0_111 #Java的路徑

CATALINA_HOME=/usr/local/apache-tomcat-7.0.73 #Tomcat的路徑

export JAVA_HOME CATALINA_HOME #將Java和tomcat的路徑輸出爲環境變量

exec $CATALINA_HOME/bin/catalina.sh $* #執行這個腳本


[root@node1 java]# chkconfig --add tomcat  #加執行權限

[root@node1 java]# chkconfig --list tomcat #加入系統服務列表

tomcat         0:off 1:off 2:on 3:on 4:on 5:on 6:off

[root@node1 java]# service tomcat stop 

Using CATALINA_BASE:   /usr/local/apache-tomcat-7.0.73

Using CATALINA_HOME:   /usr/local/apache-tomcat-7.0.73

Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.73/temp

Using JRE_HOME:        /usr/local/java/jdk1.8.0_111

Using CLASSPATH:       /usr/local/apache-tomcat-7.0.73/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.73/bin/tomcat-juli.jar

[root@node1 java]# service tomcat start

Using CATALINA_BASE:   /usr/local/apache-tomcat-7.0.73

Using CATALINA_HOME:   /usr/local/apache-tomcat-7.0.73

Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.73/temp

Using JRE_HOME:        /usr/local/java/jdk1.8.0_111

Using CLASSPATH:       /usr/local/apache-tomcat-7.0.73/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.73/bin/tomcat-juli.jar

Tomcat started.


注:這個腳本不支持restart,但還支持如下許多參數(就是執行了catalina.sh腳本)

[root@node1 java]# service tomcat -help

 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?


在下一篇博客中將詳細介紹Tomcat的核心配置文件server.xml中各個組件的配置

相關文章
相關標籤/搜索