01 . Tomcat簡介及部署

Tomcat簡介

Tomcat背景

tomcat就是經常使用的的中間件之一,tomcat自己是一個容器,專門用來運行java程序,java語言開發的網頁.jsp就應該運行於tomcat中。而tomcat自己的運行也依賴於jdk環境。 tomcat常應用於lnmt環境php

Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其餘一些公司及我的共同開發而成。因爲有了Sun 的參與和支持,最新的Servlet 和JSP 規範老是能在Tomcat 中獲得體現,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 規範。由於Tomcat 技術先進、性能穩定,並且免費,於是深受Java 愛好者的喜好並獲得了部分軟件開發商的承認,成爲目前比較流行的Web 應用服務器。 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。java

Tomcat簡介

Tomcat服務器是一個免費的開放源代碼的Web應用服務器,運行jsp和servlet,使用HTTP與客戶端(一般是瀏覽器)進行通訊。Tomcat是一個小型的輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛應用,是開發和調試JSP程序的首選,由於Tomcat技術先進,性能穩定,成爲目前比較流行的Web應用服務器,Tomcat是應用(java)服務器,他只是一個servlet容器,是apache的擴展,但他是獨立運行的.python

tomcat軟件自己是Java語言編寫的,因此須要jdk的環境才能運行,且java語言編寫的應用程序在啓動時會有一個編譯的過程,因此java語言編寫的應用程序的啓動速度相對於C語言編寫的應用程序會慢一些。linux

# 經常使用的編寫動態頁面的語言: PHP——> LAMP  LNMP
# 藉助於php的應用程序實現對php頁面的解析java(jsp -- java server pages)

# 開源工具<網站服務器>

# WebLogical           > Oracl         重量級商業工具,用於解析大型java項目
# WebSphere            > IBM           重量級商業工具
# resin Python         > CAUCHO        使用Django模塊,編寫動態頁面
# Jboss

JAVA簡介

瞭解java嗎?

java三大平臺,1999年SUN發不了基於java的三個平臺技術標準。nginx

​ JAVASE: java標準平臺,容許開發和部署在桌面,服務器,嵌入式環境和實時環境中使用的JAVA應用程序。好比作一個桌面版QQ。程序員

​ JAVAEE: java企業平臺,可幫助開發和部署可移植,健壯,可伸縮且安全的服務器端java應用程序。EE是基於SE基礎上構建的,提供web服務,組件模型,掛了你和通訊API,能夠用來實現企業級的面向服務體系結構和web等應用程序web

​ JAVAME: java微型平臺,也叫K-JAVA,用來開發和部署能夠只和嵌入式設備(好比手機和打印機等).apache

java是如何跨平臺的?

Java經過產生一種和系統平臺無關的文件,而後再在各個平臺的電腦上撞上模擬器(JVM虛擬機),讓跨平臺的文件運行在模擬器裏面。bootstrap

# 原理:
# 1.編譯以後會生成與平臺無關的字節碼文件
# 2.得以來不一樣平臺的虛擬機(JVM)
# JVM是不跨平臺
JRE,JDK,JVM分別是什麼?
#    JRE:  java運行環境,若是運行java程序,就須要JRE支持,JRE裏面包含JVM
#    JDK:  java開發工具,包含java程序的全部工具,如javac和java等,JDK裏包含JRE。
#    JVM是JAVA語言的運行環境,也是java最具吸引力的特性之一。JVM用於讀取並處理編譯過的與平臺無關的字節碼class文件,從而實現java的移植性。可是JVM是不跨平臺的。
#    JVM是java程序的解釋和執行器.

Tomcat常見的架構:

  1. tomcat自己即解析動態頁面,又解析靜態頁面,適用於訪問量極小的狀況 client tomcat
  2. 靜態頁面的請求由httpd負責;動態頁面,配置apache將請求轉交給tomcat來完成,整合apache和tomcat須要Mod_jk的模塊。這兩款軟件都是apache組織編寫的,因此兼容性較好。
    http://tomcat.apache.org/download-connectors.cgi client HTTPD tomcat
  3. 客戶端訪問的是靜態頁面直接由nginx解析;動態頁面,使用nginx的反向代理功能,代理到後端的tomcat服務器上面,由tomcat來響應客戶端的動態頁面。固然nginx的代理也能夠開啓緩存功能,將後端tomcat服務器上常常訪問的頁面緩存到本地,來提升響應效率。

這裏的nginx即作靜態頁面的響應又完成反向代理的功能 client Nginx代理 tomcat tomcatvim

  1. nginx只是作代理使用,client訪問靜態頁面,代理到後端的httpd,jsp的動態頁面代理到tomcat,實現網站頁面的動靜分離

yum安裝Tomcat

curl -o /etc/yum.repos.d/163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null
yum install java-1.8.0-openjdk
yum install tomcat-webapps tomcat-admin-webapps
systemctl start tomcat
ss -antp |grep java
LISTEN     0      100         :::8009                  :::*          users:(("java",pid=7979,fd=50))
LISTEN     0      100         :::8080                  :::*          users:(("java",pid=7979,fd=49))

tar包安裝Tomcat

1.安裝JDK環境

# CentOS7安裝Java,有tar包和rpm包兩種
        1>. rpm -ivh jdk-8u121-linux-x64.rpm
        2>. tar xvf jdk-8u151-linux-x64.tar.gz -C /usr/local/
cd /usr/local/
mv jdk1.8.0_151/ jdk
tail -2 /etc/profile
JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile

2.安裝Tomcat

wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gz
tar xvf apache-tomcat-8.5.47.tar.gz -C /usr/local/
ln -s /usr/local/apache-tomcat-8.5.47/ /usr/local/tomcat
tail -1 /etc/profile
export CATALINA_HOME=/usr/local/tomcat

source /etc/profile
env |grep -i home
CATALINA_HOME=/usr/local/tomcat
HOME=/root

# 查看熵池的大小: 
cat /proc/sys/kernel/random/entropy_avail 180
增長熵池大小,解決Tomcat在CentOS 7巨慢的問題

# 安裝rng服務,增大熵池
yum -y install rng-tools
systemctl start rngd && systemctl enable rngd
# 啓動服務訪問Tomcat頁面快一百倍..

3.啓動Tomcat

/usr/local/tomcat/bin/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/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
ss -antp |grep java
LISTEN     0      100          *:8009                     *:*                   users:(("java",pid=857,fd=58))
LISTEN     0      100          *:8080                     *:*                   users:(("java",pid=857,fd=53))
LISTEN     0      1      127.0.0.1:8005                     *:*                   users:(("java",pid=857,fd=73))
Tomcat三個端口
# 8005:    是tomcat自己的端口,本地管理端口號  
# 8080:    主端口號,是tomcat負責創建http鏈接的端口,經過瀏覽器訪問tomcat服務器的web 應用時,使用此端口  
# 8009:    是tomcat負責和其餘http服務器創建鏈接的端口,ajp的編輯器
Tomcat啓動腳本
vim /etc/init.d/tomcat
#!/bin/bash
#chkconfig: 2345 96 14
export JAVA_HOME=/usr/java/jdk1.8.0_121
export CATALINA_HOME=/usr/local/tomcat
exec $CATALINA_HOME/bin/catalina.sh $*

# $*將腳本自己自帶的參數所有傳遞過來,就是catalina.sh --help看到的全部的參數start stop等

chmod +x /etc/init.d/tomcat
chkconfig --add tomcat
chkconfig tomcat on
service tomcat start
systemctl status tomcat
tail -f catalina.out 服務啓動不起來查看這個日誌文件

Tomcat組件分類及內部組成

組件分類
# 頂級組件
Server,表明整個Tomcat容器

# 服務類組件
Service,組織Engine和Connector,裏面只能包含一個Engine

# 鏈接器組件
Connector,有HTTP、HTTPS、A JP協議的鏈接器


# 容器類
# Engine、Host、Context都是容器類組件,能夠嵌入其它組件,內部配置如何運行應用程序。

# 內嵌類
# 能夠內嵌到其餘組件內,valve、logger、realm、loader、manager等。以logger舉例,在不一樣容器組件內定義。

# 集羣類組件
# listener、cluster
Tomcat內部組成

名稱 說明
Server tomcat的進程示例
Connector 負責客戶端的HTTP/HTTPS/AJP等協議的鏈接,一個Connter只屬於一個Engine
Service 用來組織Connter和Engine之間的關係
Engine 響應並處理用戶請求。一個引擎能夠綁定多個Connter。
Host 虛擬主機
Context 應用的上下文,配置路徑映射path=>directory

部署(deploy)webapp的相關操做

將應用程序文件和其依賴的類資源都放到主頁面路徑裏
部署的兩種方式:
1.自動部署: auto deploy
2.手動部署:

# 冷部署:  把webapp複製到指定的位置,然後才啓動tomcat;
# 熱部署:  在不中止tomcat的前提下進行部署: (支持熱部署)須要依賴如下工具

# 部署工具: manager,ant腳本,tcd(tomcat   client  deployer)等
# undeploy: 拆除(反部署),中止webapp,並從tomcat實例上卸載webapp;

Jar包介紹

#不少時候開發會給咱們一個jar包,讓咱們進行運行,命令以下
nohup java  -jar  jar包名稱.jar  > user.out &

Tomcat目錄介紹

/usr/local/tomcat/bin            
# 工具,腳本及啓動時用到的類(二進制程序startup.sh shutdown.sh catalina.sh)

/usr/local/tomcat/conf    
# 配置文件 server.xml

/usr/local/tomcat/lib            
# 庫文件,存放jar包,用來鏈接後端不一樣的應用程序,至關於httpd的模塊文件

/usr/local/tomcat/logs           
# 日誌文件目錄

/usr/local/tomcat/webapps        
# 默認的應用程序目錄

/usr/local/tomcat/work                        
# 工做目錄,存放編譯後的字節碼文件

/usr/local/tomcat/temp           
# 臨時文件目錄

/etc/tomcat                                          
#  主配置配置文件目錄:  /etc/tomcat/

/etc/tomcat/server.xml                        
#  主配置文件

/usr/share/tomcat/webapps/              
# 兩個路徑是連接的,裏面目錄都同樣

/var/lib/tomcat/webapps/                   
# 這兩個目錄下文件和/usr/share/tomcat/webapps/下是同步的

[http://39.108.140.0:8080](http://39.108.140.0:8080/)                     # 打開瀏覽器系統默認會顯示/var/lib/tomcat/webapps/ROOT/index.jsp的文件主頁面

webapp歸檔格式:

在實際工做中,當程序員將成千上萬的jsp格式的文件,要一個一個傳輸過來很是的慢,因此須要文件的歸檔)

.war:webapp; 
	(若是從程序員那裏獲得的是.war格式的文件,則直接放在主頁面目錄下就能夠了,系統會自動展開的)
        .jar:EJB的類打包文件(類庫);
        .rar:資源適配器類打包文件;
        .ear:企業級webapp;

Tomcat核心文件

/usr/local/tomcat/conf/server.xml
<Server>                    -----------> Tomcat實例
  <Service>                    -----------> 定義網站服務
    <Connector />            -----------> 定義對外提供服務的端口
    <Engine>                -----------> Tomcat虛擬主機運行的環境
        <Host>                -----------> Tomcat虛擬主機
            <Context  />    -----------> 某應用程序的數據文件存放目錄
        </Host>
    </Engine>
  </Service>
</Server>


# Server: tomcat的一個實例,實際部署tomcat多實例時,每個實例都須要準備配置文件
# Service: 用於定義tomcat的項目名稱,通常無需修改
# Connector: 鏈接器,根據須要能夠有多個,8080端口在這裏定義的
# Engine:引擎用於定義客戶端訪問時,使用哪一個虛擬主機響應
# Host:配置tomcat的虛擬主機
# Context:
# 應用程序的數據文件存放的目錄名字爲ROOT的時候是不須要寫的,可是若是不是ROOT的名字就必需要寫context的配置
        /web/app/ROOT 不須要context
        /web/app/test 須要context
Listener className:tomcat在實現時調用的內部代碼的類,調用類來實現某些功能
8009端口:AJP協議用的,是tomcat和apache結合使用的,如今用的很少了,可註釋掉
pattern="%h %l %u %t &quot;%r&quot; %s %b" />:日誌的格式:
        %h 客戶端的ip
        %l 客戶端的用戶名
        %u 基於密碼認證的用戶名
        %t 訪問的時間
        &quot 雙引號
        %r http請求報文裏面第一行內容 uri地址和http協議的版本
        %s 狀態碼
        %b http報文大小
Tomcat前面有負載均衡的時候獲取用戶真實IP地址
在tomcat配置文件/conf/server.xml下配置
className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="localhost_access_log." suffix=".txt"
    pattern="%{X-Forwarded-For}i %h %l %u %t %r %s %b" />
systemctl restart tomcat

Tomcat三種運行模式

# Tomcat是一個jsp/server容器,三種運行模式,BIO,NIO和APR.HTTP協議;
# Tomcat的鏈接器有兩種: HTTP和AJP
# AJP:面向數據包的基於TCP/IP的協議,它在Apache和Tomcat的實例之間提供了一個專用通訊通道;

主要有如下特徵:
1.在快速網絡有較好的性能表現,支持數據壓縮傳輸;
2.支持SSL,加密及客戶端證書;
3.支持Tomcat實例集羣;
4.支持在Apache和Tomcat之間的重用;

BIO

  • 使用傳統的javaI/O操做,基於java的http/1.1鏈接器,Tomcat7如下版本默認以BIO模式運行的。當中性能最低;
    一個線程處理一個請求,缺點:併發量很高時,線程數較多,浪費資源;

NIO

  • 是javaSE1.4及後續版本提供的一種新的I/O操做方式,基於緩衝區,並能提供非阻塞I/O操做的Java API,他擁有比傳統I/O操做更好的併發運行性能;
  • 利用java的異步請求IO處理,能夠經過少許的線程處理大量的請求;8默認NIO;

APR

  • Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態連接庫來處理問阿金讀取或網絡傳輸操做,大大提升Tomcat對靜態文件處理性能,高併發應用首選模式;
  • APR是原生C語言編寫的非阻塞I/O,利用了操做系統的網絡鏈接功能,鏈接很快,須要先安裝APR和Native,若直接啓動就支持APR,能大幅度提高性能;
    須要如下三個組件支持:
    APR library, 自帶的Tomcat-native, OpenSSL libraries;
  • 根據工做分爲: 做爲獨立服務器和應用程序服務器;
相關文章
相關標籤/搜索