Tomcat
學習目標和內容
1、能夠描述Tomcat的使用場景
2、能夠簡單描述Tomcat的工作原理
3、能夠實現部署安裝Tomcat
4、能夠實現配置Tomcat的service服務和自啟動
5、能夠實現Tomcat的Host的配置
6、能夠實現Nginx反向代理Tomcat
7、能夠實現Nginx負載均衡到Tomcat
一、Tomcat介紹
1、簡介
Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP 規范總是能在Tomcat 中得到體現,Tomcat支持最新的Servlet和JSP規范。因為Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛并得到了部分軟件開發商的認可,成為目前比較流行的Web 應用服務器。
同類軟件:
jboss jetty
weblogic ORACLE 商業用付費 EJB企業支持 重載配置
websphere IBM 商業授權
Resin是CAUCHO公司的產品,是一個非常流行的application server,對servlet和JSP提供了良好的支持,性能也比較優良,resin自身采用JAVA語言開發。
2、工作原理圖示
coyote是tomcat的Connector框架的名字,簡單說就是coyote來處理底層的socket,并將http請求、響應等字節流層面的東西,包裝成Request和Response兩個類(這兩個類是tomcat定義的,而非servlet中的ServletRequest和ServletResponse),供容器使用
1、用戶點擊網頁內容,請求被發送到本機端口8080,被在那里監聽的Coyote HTTP/1.1 Connector獲得。
2、Connector把該請求交給它所在的Service的Engine來處理,并等待Engine的回應。
3、Engine獲得請求localhost/test/index.jsp,匹配所有的虛擬主機Host。
4、Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機),名為localhost的Host獲得請求/test/index.jsp,匹配它所擁有的所有的Context。Host匹配到路徑為/test的Context(如果匹配不到就把該請求交給路徑名為“ ”的Context去處理)。
5、path=“/test”的Context獲得請求/index.jsp,在它的mapping table中尋找出對應的Servlet。Context匹配到URL PATTERN為*.jsp的Servlet,對應于JspServlet類。
6、構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet()或doPost().執行業務邏輯、數據存儲等程序。
7、Context把執行完之后的HttpServletResponse對象返回給Host。
8、Host把HttpServletResponse對象返回給Engine。
9、Engine把HttpServletResponse對象返回Connector。
10、Connector把HttpServletResponse對象返回給客戶Browser。
二、安裝和配置
1、安裝方式介紹
①yum方式安裝 加載epel源,版本目前為tomcat7.0
②二進制方式安裝 直接下載,部署好java環境,即可運行(推薦)
③源碼方式安裝 需要下載Apache Ant進行編譯安裝
2、二進制安裝
①上傳獲取軟件
②部署java環境
shell > tar zxvf jdk-8u192-linux-x64.tar.gz shell > mkdir /usr/local/java shell > mv jdk1.8.0_192 /usr/local/java #tomcat配置環境變量的兩種方式 三種使用其中一種即可 #第一種tomat依賴JAVA_HOME環境變量 shell > echo "export JAVA_HOME=/usr/local/java/" >> /etc/profile #第二種tomcat依賴java環境變量 shell > echo "PATH=/usr/local/java/bin:$PATH" >> /etc/profile #第三中tomcat依賴JRE_HOME變量 shell > echo "export JRE_HOME=/usr/local/java/jre" >> /etc/profile shell > . /etc/profile
如果配置JAVA_HOME路徑配置到jdk下就可以,不需要配置到bin下。
如果配置java的環境環境變量PATH,就指定到bin下。
如果啟動tomcat,遇到如下問題
①沒有安裝jre jdk
②環境變量沒有配置
③啟動的軟件找不到需要的java相關軟件
③部署tomcat
shell > tar xvf apache-tomcat-9.0.11.tar.gz shelll > mv apache-tomcat-9.0.11 /usr/local/tomcat
軟件部署之后的目錄結構
3、目錄介紹
bin 存放啟動和關閉Tomcat的腳本文件
conf 存放Tomcat服務器的各種全局配置?文件,其中最重要的是server.xml和web.xml
lib 存放Tomcat服務器所需的各種JAR文件
logs 存放Tomcat執行時的日志文件
temp 此目錄是tomcat存放的臨時文件
webapps tomcat默認存放應用程序的目錄,好比apache的默認網頁存放路徑是/var/www/html一樣
work 用于存放JSP應用程序在部署時編譯后產生的class文件
項目代碼目錄
docs tomcat文檔
examples tomcat自帶的一個獨立的web應用程序例子
host-manager tomcat的主機管理應用程序
manager tomcat的管理應用程序
ROOT 指tomcat的應用程序的根,如果應用程序部署在ROOT中,則
可直接通過http://ip:port 訪問到
配置文件目錄
catalina.policy 配置tomcat對文件系統中目錄或文件的讀、寫執行等權限,及對一些內存,session等的管理權限
catalina.properties 配置tomcat的classpath等
context.xml tomcat的默認context容器
logging.properties 配置tomcat的日志輸出方式
server.xml tomcat的主配置文件 host配置
tomcat-users.xml tomcat的角色(授權用戶)配置文件
web.xml tomcat的應用程序的部署描述符文件
4、啟動相關說明
tomcat的相關管理命令在$prefix/bin目錄下
經常使用的命令:
catalina.sh 主命令腳本
configtest.sh 檢測配置文件
shutdown.sh 關閉
startup.sh 啟動
version.sh 查看版本
①測試啟動tomcat
shell > /usr/local/tomcat/bin/startup.sh shell > ps aux |grep tomcat shell > netstat -lntp |grep 8080
②查看頁面效果
③測試關閉tomcat
5、配置服務
tomcat提供了方便的啟動命令腳本,但是卻沒有提供服務器中經常管理使用的service腳本。可以自行編寫服務管理腳本
①編輯啟動腳本,生成tomcat.pid
②腳本實現
6、配置開機自啟動服務
根據編寫的service腳本,通過chkconfig管理即可
自行編寫的service腳本,使用chkconfig管理啟動,需要加入chkconfig參數
三、企業中常見使用方式
1、簡單代碼測試
①默認訪問目錄
②編寫測試文件
③查看測試效果
2、基于域名訪問的Host配置
tomcat單實例運行多個tomcat應用的案列
①建立項目目錄并寫入測試文件
②編輯配置文件
shell > /usr/local/tomcat/conf/server.xml
name可以填寫域名
③檢測配置并重啟
shell > service tomcat configtest shell > service tomcat restart
④訪問主機解析域名
⑤測試訪問
Tip:
tomcat支持serverlet和jsp規范
項目源碼:
①jsp jsp=>java代碼=>class字節碼=>加載jvm運行=>解析字符串=>container容器=>connector連接=>瀏覽器
②java代碼
3、服務器狀態查看
默認訪問報錯
①去掉訪問IP限制
②創建用戶和密碼開啟訪問權限
③查看頁面
4、應用管理查看
①測試關閉
②訪問測試
start之后即可重新訪問正常顯示
5、虛擬機Host管理查看
遇到上面類似的錯誤
修改host-manager目錄下的context.xml
6、Nginx前端反向代理
實際業務環境中,用戶是直接通過域名訪問。基于協議一般是http、https等。默認tomcat運行在8080端口。一般會通過前端服務器反向代理到后端tomcat的方式,來實現用戶可以直接通過域名訪問到tomcat的webapp
動靜分離:動態頁面的請求交由后端處理(tomcat+java),靜態資源直接返回
實現配置
配置文件參考:
server{listen ? ? ? 80;server_name tomcat.devops.com;#和tomcat的host配置一致root /usr/local/tomcat/webapps/devops/ROOT;#靜態不需要進行轉發location ~ \.(html|css|js|png|jpg|jpeg)$ {#default_type text/plain;#echo 'html';#alias /;#root /usr/local/tomcat/webapps/devops/ROOT;}#其他識別不是靜態資源的,統統發送到后端tomcatlocation / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host ? ? $host;proxy_set_header X-Real-IP $remote_addr;#default_type text/plain;#echo $host;#echo $remote_addr;#echo $proxy_add_x_forwarded_for;}}
nginx單獨訪問靜態頁面,出現403的問題:
分析:沒有讀權限
解決方案:
當nginx和tomcat網站根目錄一致的情況,注意nginx是否有權限讀到tomcat網站目錄的權限。
一般性解決方案網站目錄文件夾,賦予一個公共用戶www
shell > cd /usr/local/tomcat shell > chown -R www:www webapps
訪問查看:
7、Nginx負載均衡
隨著業務的發展,單實例服務已經不能夠滿足業務使用需要
pv 頁面訪問數量
qps 每秒查詢次數 并發量
DAU 每日活躍用戶數
單實例無法滿足,擴容為多實例
常見的業務運行方式
單實例單應用 一個tomcat一個webapps
單實例多應用 一個tomcat多個webapps host
多實例單應用 多個tomcat同一個webapps
多實例實現方式:
①多臺服務器一個運行一個實例(性能好)
②單臺服務器運行多個實例(監聽不同的端口,性價比高)偽集群
多實例多應用
業務流程圖示
server04 nginx負載均衡
server01 tomcat1
server03 tomcat2
實施步驟:
①復制虛擬機,多實例
兩臺tomcat里項目里的內容要一致
在server03上配置和server01一樣的實現:
1>建立項目文件夾目錄,綁定host主機域名
2>nginx做反向代理
②配置nginx負載均衡
在server04上進行配置
upstream tomcat {#ip_hash;server 192.168.17.102:80;server 192.168.17.101:80;}server {listen 80;server_name tomcat.devops.com;location / {proxy_pass http://tomcat;proxy_set_header Host ? ? $host;proxy_set_header X-Real-IP $remote_addr;}}
四、項目部署
1、項目介紹
ZrLog是使用 Java 開發的博客/CMS程序,具有簡約,易用,組件化,內存占用低等特點。自帶 Markdown 編輯器,讓更多的精力放在寫作上。
GitHub - 94fzb/zrlog: ZrLog是使用 Java 開發的博客/CMS程序,具有簡約,易用,組件化,內存占用低等特點。自帶 Markdown 編輯器,讓更多的精力放在寫作上,而不是花費大量時間在學習程序的使用上。
2、項目部署
①解析域名
注意域名解析需要先解析到單例服務器,不要給負載均衡
②建立項目目錄,上傳項目程序
③綁定域名
④開源項目的初始化過程
需要建立一個數據庫
此項目的數據庫密碼配置文件