下載安裝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 "%r" %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/目錄下的應用程序,如圖
[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中各個組件的配置