輕鬆駕馭Tomcat

  • Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP 程序的首選。對於一個初學者來講,能夠這樣認爲,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,因此當你運行tomcat 時,它實際上做爲一個與Apache 獨立的進程單獨運行的。
  • 訣竅是,當配置正確時,Apache 爲HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet。另外,Tomcat和IIS等Web服務器同樣,具備處理HTML頁面的功能,另外它仍是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。不過,Tomcat處理靜態HTML的能力不如Apache服務器。目前Tomcat最新版本爲9.0。

1、Tomcat體系架構

核心組件

server:至關於一個tomcat實例。接收並解析請求信息;完成相關動做後把響應結果返回給計算機。
service:每一個server包含多個service,相互獨立,僅共享JVM以及類庫。用於把鏈接器(connector)與引擎(engine)關連起來,且一個service只能有一個engine,可是能夠有多個connector。由於engine沒法直接接受鏈接器發來的數據。
connector:負責開啓socket並監聽客戶端請求、返回響應數據。多個connector監聽多個端口
engine:負責具體的處理請求,connector僅僅負責監聽,收到數據後交給engine運行。
host:在ngine中能夠包含多個host,每一個host定義了虛擬主機
context:每一個context能夠部署一個web應用。一個host能夠存在多個context。若是部署多個應用須要分別對每一個應用裝載所依賴的庫,這個步驟能夠自動能夠手動。html

2、Tomcat的安裝

tomcat其實就是一個JAVA程序,因此要運行在JAVA虛擬機中。要運行虛擬機就要先安裝JDK。前端

1.JDK的安裝

1.經過YUM安裝
yum install java-1.8.0-openjdk-devel
2.配置環境變量
vim /etc/profile.d/java.sh
 export JAVA_HOME=/usr/java/latest                  # 首先定義JAVA_HOME的環境變量
 export PATH=$JAVA_HOME/bin:$PATH                   # 而後向後追加便可

###2.Tomcat的安裝
首先要從Tomcat的官網下載Tomcat,而後上傳至服務器解壓。 https://tomcat.apache.orgjava

1.將下載的軟件包解壓
tar xf apache-tomcat-VERSION.tar.gz  -C /usr/local/
cd /usr/local

2.建立軟鏈接,或者將解壓的tomcat直接更名爲tomcat也能達到一樣的效果
ln -sv apache-tomcat-VERSION  tomcat

3.添加環境變量
vim /etc/profile.d/tomcat.sh 
    export CATALINA_BASE=/usr/local/tomcat
    export PATH=$CATALINA_BASE/bin:$PATH    

4.建立tomcat須要的用戶
useradd tomcat

5.將安裝包的路徑下的全部屬組都改成tomcat
chown -R root.tomcat /usr/local/tomcat                      # 設定全部者爲root,所屬組爲tomcat
chown -R tomcat /usr/local/tomcat/{logs,temp,work,webapps}  # 僅將須要有寫權限文件全部者改成tomcat
chmod g+r /usr/local/tomcat/conf                            # 默認沒有權限,會致使啓動失敗

5.切換到tomcat用戶最後啓動服務便可
su - tomcat 
catalina.sh start                                   # 啓動tomcat。catalina.sh命令須要先添加環境變量

3、Tomcat服務的配置文件結構

bin:   腳本、以及Tomcat自身所攜帶的工具包
conf:  Tomcat服務的配置文件目錄;
lib:   庫文件,Java類庫,jar;
logs:  日誌文件目錄;
temp:  臨時文件目錄;
webapps:webapp的默認目錄;至關於頁面的根目錄。部署的應用都應該在IC目錄下
work:  工做目錄,存放編譯後的字節碼文件;

4、部署測試頁面

建立一個測試頁面,將下面的步驟所有作完後,經過瀏覽器訪問http://IP:8080/test 便可訪問到測試的頁面node

1.建立文件夾,classes、lib、WEB-INF爲一個標準應用應該有的目錄,這裏建立僅僅爲了與標準看齊
mkidr  -pv  /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF}    

2.建立一個測試頁面用於檢驗Tomcat服務是否能正常提供服務
vim /usr/local/tomcat/webapps/test/index.jsp                        # 建立jsp測試頁面
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
    <head>
        <title>Test Page</title>
    /head>
<body>
    <% out.println("hello world");
    %>
</body>
</html

3.重啓服務
systemctl restart tomcat                        

4.部署完成後在webapp目錄自動生成一些目錄
cd  /usr/share/tomcat/work/Catalina             # 部署完成後自動生成的test目錄下的文件
[root@localhost Catalina]# tree .
.
└── localhost                                   # 默認主機站點
    ├── _
    ├── docs
    ├── examples
    ├── host-manager
    ├── manager
    ├── sample
    └── test                                    # webpp應用名稱。自動生成如下目錄
        └── org
            └── apache
                └── jsp
                    ├── index_jsp.class
                    └── index_jsp.java

5、Tomcat的至 配置文件

1.service組件

前面講到connecotr負責接收用戶請求,而engine負責接處理用戶請求。可是connecotr並不能與engine直接通訊。因此service就是負責將connector與engine鏈接起來的組件nginx

<Service name="Catalina">

2.connector組件

connector負責接收客戶端發來的請求,常見的鏈接有三種:http、https、ajp
進入tomcat的請求可分爲兩類:web

(1) standalone : 請求來自於客戶端瀏覽器;apache

(2) 由其它的web server反代:來自前端的反代服務器,經過反帶服務器發來的又有如下幾種;vim

  • nginx --> http connector --> tomcat
  • httpd(proxy_http_module) --> http connector --> tomcat
  • httpd(proxy_ajp_module) --> ajp connector --> tomcat
  • httpd(mod_jk) --> ajp connector --> tomcat
    示例
<Connector port="8080"              # 默認有兩個connector一個監聽http一個監聽ajp
    protocol="HTTP/1.1"             # 若是是http能夠無需指明協議。AJP的話Protocol="AJP/1.3"
    connectionTimeout="20000"       # 超時時長,毫秒即20s
    redirectPort="8443"             # 若是請求的爲SSL請求就將請求轉發至8443端口
    address:                       # 監聽的IP地址;默認爲本機全部可用地址;不寫就監聽本地全部IP
    maxThreads:                    # 最大併發鏈接數,默認爲200;
    enableLookups:                 # 是否啓用DNS查詢功能;將IP地址解析爲域名。關閉提高性能
    acceptCount:                   # 等待隊列的最大長度;
    secure:                        # =true的表示使用SSL通訊
    sslProtocol:                   # 設定使用哪一個SSL協議,一般在tomcat上不建議使用SSL,速度太慢
/>

3.Engine組件

Engine組件負責處理髮來的請求。
Engine是Servlet實例,即servlet引擎,其內部能夠一個或多個host組件來定義站點; 一般須要經過defaultHost來定義默認的虛擬主機。
示例瀏覽器

<Engine name="Catalina" defaultHost="localhost">
name=Catalina                   # 引擎的名稱
defaultHost="localhost"         # 默認的響應主機站點。若是找不到合適,或者域名不匹配選擇默認host
jvmRoute=                       # Tomcat作集羣時的調度標誌,相似於HAproxy的會話標識。
                                # 在基於cookie綁定時會用到
...
<Engine>

4.Host組件

Host組件位於engine內部用於接收請求並進行相應處理的主機或虛擬主機tomcat

<Host    name="localhost"          # 設定爲主機名便可
          appBase="webapps"         # webapps的默認存放路徑(相對路徑,能夠用絕對路徑)。至關站點根
          unpackWARs="true"         # true爲自動展開WAR文件
          autoDeploy="true">        # 是否開啓自動部署功能。
                                    #unpackWARS、autoDeploy定義了WebAPP爲WAR格式且在根下時自動部署
</Host>

5.Context組件

包含在Host標籤裏。
若是在一個主機上部署多個app的話,Context就能夠用來定義不一樣app對應的路徑。

<Context path="/PATH"                   # 網頁的RUL
docBase="/PATH/TO/SOMEDIR"              # 真實路徑。
reloadable=""/>                         # 若是爲true說明能夠從新裝載

6.valve組件

Valve存在多種類型:
定義訪問日誌:org.apache.catalina.valves.AccessLogValve
定義訪問控制:org.apache.catalina.valves.RemoteAddrValve

<Valve className="org.apache.catalina.valves.AccessLogValve"       # 定義記錄日誌要訪問的類
                    directory="logs"                               # 日誌文件的目錄路徑,默認在/var/log/tomcat下
                    prefix="node1_test_access_"                    # 日誌文件的前綴
                    suffix=".log"                                  # 日誌文件的後綴
                    pattern="%h %l %u %t &quot;%r&quot; %s %b" />  # 記錄日誌的格式
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
相關文章
相關標籤/搜索