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服務器是一個免費的開放源代碼的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三大平臺,1999年SUN發不了基於java的三個平臺技術標準。nginx
JAVASE: java標準平臺,容許開發和部署在桌面,服務器,嵌入式環境和實時環境中使用的JAVA應用程序。好比作一個桌面版QQ。程序員
JAVAEE: java企業平臺,可幫助開發和部署可移植,健壯,可伸縮且安全的服務器端java應用程序。EE是基於SE基礎上構建的,提供web服務,組件模型,掛了你和通訊API,能夠用來實現企業級的面向服務體系結構和web等應用程序web
JAVAME: java微型平臺,也叫K-JAVA,用來開發和部署能夠只和嵌入式設備(好比手機和打印機等).apache
Java經過產生一種和系統平臺無關的文件,而後再在各個平臺的電腦上撞上模擬器(JVM虛擬機),讓跨平臺的文件運行在模擬器裏面。bootstrap
# 原理: # 1.編譯以後會生成與平臺無關的字節碼文件 # 2.得以來不一樣平臺的虛擬機(JVM) # JVM是不跨平臺
# JRE: java運行環境,若是運行java程序,就須要JRE支持,JRE裏面包含JVM # JDK: java開發工具,包含java程序的全部工具,如javac和java等,JDK裏包含JRE。 # JVM是JAVA語言的運行環境,也是java最具吸引力的特性之一。JVM用於讀取並處理編譯過的與平臺無關的字節碼class文件,從而實現java的移植性。可是JVM是不跨平臺的。 # JVM是java程序的解釋和執行器.
這裏的nginx即作靜態頁面的響應又完成反向代理的功能 client Nginx代理 tomcat tomcatvim
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))
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))
# 8005: 是tomcat自己的端口,本地管理端口號 # 8080: 主端口號,是tomcat負責創建http鏈接的端口,經過瀏覽器訪問tomcat服務器的web 應用時,使用此端口 # 8009: 是tomcat負責和其餘http服務器創建鏈接的端口,ajp的編輯器
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 服務啓動不起來查看這個日誌文件
# 頂級組件 Server,表明整個Tomcat容器 # 服務類組件 Service,組織Engine和Connector,裏面只能包含一個Engine # 鏈接器組件 Connector,有HTTP、HTTPS、A JP協議的鏈接器 # 容器類 # Engine、Host、Context都是容器類組件,能夠嵌入其它組件,內部配置如何運行應用程序。 # 內嵌類 # 能夠內嵌到其餘組件內,valve、logger、realm、loader、manager等。以logger舉例,在不一樣容器組件內定義。 # 集羣類組件 # listener、cluster
名稱 | 說明 |
---|---|
Server | tomcat的進程示例 |
Connector | 負責客戶端的HTTP/HTTPS/AJP等協議的鏈接,一個Connter只屬於一個Engine |
Service | 用來組織Connter和Engine之間的關係 |
Engine | 響應並處理用戶請求。一個引擎能夠綁定多個Connter。 |
Host | 虛擬主機 |
Context | 應用的上下文,配置路徑映射path=>directory |
將應用程序文件和其依賴的類資源都放到主頁面路徑裏
部署的兩種方式:
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 &
/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的文件主頁面
在實際工做中,當程序員將成千上萬的jsp格式的文件,要一個一個傳輸過來很是的慢,因此須要文件的歸檔)
.war:webapp; (若是從程序員那裏獲得的是.war格式的文件,則直接放在主頁面目錄下就能夠了,系統會自動展開的) .jar:EJB的類打包文件(類庫); .rar:資源適配器類打包文件; .ear:企業級webapp;
/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 "%r" %s %b" />:日誌的格式: %h 客戶端的ip %l 客戶端的用戶名 %u 基於密碼認證的用戶名 %t 訪問的時間 " 雙引號 %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是一個jsp/server容器,三種運行模式,BIO,NIO和APR.HTTP協議; # Tomcat的鏈接器有兩種: HTTP和AJP # AJP:面向數據包的基於TCP/IP的協議,它在Apache和Tomcat的實例之間提供了一個專用通訊通道;
主要有如下特徵:
1.在快速網絡有較好的性能表現,支持數據壓縮傳輸;
2.支持SSL,加密及客戶端證書;
3.支持Tomcat實例集羣;
4.支持在Apache和Tomcat之間的重用;
BIO
NIO
APR