12_企業架構之Tomcat部署使用

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、項目部署

①解析域名

注意域名解析需要先解析到單例服務器,不要給負載均衡

②建立項目目錄,上傳項目程序

③綁定域名

④開源項目的初始化過程

需要建立一個數據庫

此項目的數據庫密碼配置文件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/206770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206770.shtml
英文地址,請注明出處:http://en.pswp.cn/news/206770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Abaqus許可證配置文件問題

在使用Abaqus工程設計和仿真軟件時,您可能會遇到許可證配置文件問題。這些問題可能會影響軟件的正常運行和工作效率。為了幫助您解決這些問題,我們特別撰寫了這篇文章,以提供全面、有效的解決方案。 一、Abaqus許可證配置文件問題及原因 許…

力扣labuladong一刷day32天二叉樹

力扣labuladong一刷day32天二叉樹 一、297. 二叉樹的序列化與反序列化 題目鏈接:https://leetcode.cn/problems/serialize-and-deserialize-binary-tree/ 思路:關于序列化與反序列化,題目不要求序列化的方式,只要求樹經過序列化…

linux的定時任務Corntab

安裝crontab # yum安裝crontab yum install -y crontab# 開機自啟crond服務并現在啟動 systemctl enable --now crondcron系統任務調度 系統任務調度: 系統周期性所要執行的工作,比如寫緩存數據到硬盤、日志清理等。 在/etc/crontab文件,這…

機器學習之全面了解回歸學習器

我們將和大家一起探討機器學習與數據科學的主題。 本文主要討論大家針對回歸學習器提出的問題。我將概要介紹,然后探討以下五個問題: 1. 能否將回歸學習器用于時序數據? 2. 該如何縮短訓練時間? 3. 該如何解釋不同模型的結果和…

No suitable driver found for jdbc:mysql://localhost:3306(2023/12/7更新)

有兩種情況: 壓根沒安裝下載了但沒設為庫或方法不對 大多數為第一種情況: 一. 下載jdbc 打開網址選擇一個版本進行下載 https://nowjava.com/jar/version/mysql/mysql-connector-java.html 二.安裝jdbc 在項目里建一個lib文件夾 在把之前下載的jar文…

優化 SQL 日志記錄的方法

為什么 SQL 日志記錄是必不可少的 SQL 日志記錄在數據庫安全和審計中起著至關重要的作用,它涉及跟蹤在數據庫上執行的所有 SQL 語句,從而實現審計、故障排除和取證分析。SQL 日志記錄可以提供有關數據庫如何訪問和使用的寶貴見解,使其成為確…

JNPF低代碼平臺詳解 -- 系統架構

目錄 一、技術介紹 技術架構 二、設計原理 三、界面展示 1.代碼生成器 2.工作流程 3.門戶設計 4.大屏設計 5.報表設計 6.第三方登錄 7.多租戶實現 8.分布式調度 9.消息中心 四、功能框架 JNPF低代碼是一款新奇、實用、高效的企業級軟件開發工具,支持企…

Qt/C++音視頻開發58-逐幀播放/上一幀下一幀/切換播放進度/實時解碼

一、前言 逐幀播放是近期增加的功能,之前也一直思考過這個功能該如何實現,對于mdk/qtav等內核組件,可以直接用該組件提供的接口實現即可,而對于ffmpeg,需要自己處理,如果有緩存的數據的話,可以…

Rust的eBFP框架Aya(一) - Linux內核網絡基礎

前言 在我的Rust入門及實戰系列文章中已經說明, Rust是一門內存安全的高性能編程語言,從它的這些優秀特性來看,就是一門專為系統開發而誕生的語言。至于很多使用Rust來進行web開發的行為,不能說它們不好,只能說是殺雞…

2017下半年軟工(橋接模式)

題目——橋接模式(抽象調用實現部分) package org.example.橋接模式;/*** 橋接模式的核心思想是將抽象部分與它的實現部分分離,使它們可以獨立變化,就是說你在實現部分:WinImp、LinuxImp基礎上還能加上RedHatImp&#…

03-微服務架構構建之微服務拆分

文章目錄 前言一、微服務拆分的原則二、微服務拆分的時機三、微服務拆分的方法總結 前言 微服務架構是將一個單體應用程序拆分為一個個獨立且保持松耦合的服務的一種架構方式,每個服務有著獨立的數據庫并且能獨立運行部署。微服務架構的構建過程中,第一…

偷竊別人的密碼

在工作中都用到virtual machine吧,同事之間還互相借用機器,或者不借用但憑借自己的域賬號能登錄任意機器,而且每個域賬號都有sudo權限? 那你要小心了! 因為我可以輕易記錄下每個ssh登錄到我機器,或者我在…

uniapp 輸入框輸入時,會將內容頂上去的解決方案

// 設置頁面最小高度 export const setPageMinHeight () > {return {position: relative,min-height: uni.getSystemInfoSync().windowHeight px} }頁面使用: import {setPageMinHeight} from "/utils/uniUtil";data() {return {minHeight: setPag…

Unity 狀態系統

狀態系統 原理食用方法Demo 原理 #mermaid-svg-lUbxJ8eMP3KqrEhY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lUbxJ8eMP3KqrEhY .error-icon{fill:#552222;}#mermaid-svg-lUbxJ8eMP3KqrEhY .error-text{fill:#55…

官方officevisio在線安裝包

在線安裝包,在線就是要有網絡環境,你能搜到這篇博客,就初步具備網絡環境 visio在線安裝包.zip官方版下載丨最新版下載丨綠色版下載丨APP下載-123云盤 在線安裝包如下,雙擊執行安裝即可,可供選擇的64/32位 軟件的激活與…

netty使用

支持協議 TCP/UDPHTTP/HTTPSWebSocketSPDY/HTTP2MQTT/CoAP 服務端 常用類 ServerBootstrap 服務端配置類 //設置線程組、parentGroup處理連接、childGroup處理I/O group(EventLoopGroup parentGroup, EventLoopGroup childGroup) //Channel通過何種方式獲取新的連接(NioSe…

【擴散模型】ControlNet從原理到實戰

ControlNet從原理到實戰 ControlNet原理ControlNet應用于大型預訓練擴散模型ControlNet訓練過程ControlNet示例1 ControlNet與Canny Edge2. ControlNet與Depth3. ControlNet與M-LSD Lines4. ControlNet與HED Boundary ControlNet實戰Canny Edge實戰Open Pose 小結參考資料 Cont…

Linux系統上RabbitMQ安裝教程

一、安裝前環境準備 Linux:CentOS 7.9 RabbitMQ Erlang 1、系統內須有C等基本工具 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc xz socat2、下載安裝包 1)首先&a…

[linux] kaggle 數據集用linux下載

你可以通過以下步驟獲取Kaggle的下載鏈接并在Linux中進行下載: 首先,確保你已經安裝了Python和Kaggle API。如果沒有安裝,你可以通過以下命令安裝: pip install kaggle 接著,你需要在Kaggle網站上獲取API Token。登錄…

時間相關類

內容 JDK7時間相關類JDK8時間相關類 第一章 Date類 1.1 Date概述 java.util.Date類 表示特定的瞬間,精確到毫秒。 繼續查閱Date類的描述,發現Date擁有多個構造函數,只是部分已經過時,我們重點看以下兩個構造函數 public Dat…