04--Tomcat

前言:本章整理tomcat的知識點,tomcat知識點相較nginx比較少,但是也是運維必會的軟件,這里結合實際項目整理一下。

1、tomcat簡介

Tomcat 服務器是一個免費的開放源代碼的Web?應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。對于一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當公司運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行的。

1.1、tomcat主目錄介紹

[root@localhost ~]# tree /usr/local/tomcat/ -L 1
/usr/local/tomcat/
├── bin              #存放tomcat管理腳本
├── conf             # tomcat 配置文件存放目錄
├── lib              # web應用調用的jar包存放路徑
├── LICENSE
├── logs             # tomcat 日志存放目錄,catalina.out 為主要輸出日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp             # 存放臨時文件
├── webapps         # web程序存放目錄
└── work             # 存放編譯產生的.java 與 .class文件

1.2、webapps目錄介紹

[root@localhost ~]# tree /usr/local/tomcat/webapps/ -L 1
├── docs            # tomcat 幫助文檔
├── examples       # web應用示例
├── host-manager  # 主機管理
├── manager         # 管理
└── ROOT             # 默認網站的主目錄(主頁)

?1.3、Tomcat配置文件目錄介紹

[root@localhost ~]# tree /usr/local/tomcat/conf/ -L 1
/usr/local/tomcat/conf/
├── Catalina
├── catalina.policy
├── catalina.properties
├── context.xml
├── logging.properties
├── server.xml         #tomcat 主配置文件
├── tomcat-users.xml   # tomcat 管理用戶配置文件
└── web.xml

有幾個常見的問題,在這里列出:

(1)講述一下Tomcat8005、8009、8080三個端口的含義?

8005:關閉時使用

8009:為AJP端口,即容器使用,如Apache能通過AJP協議訪問Tomcat的8009端口

8080:一般應用使用

(2)tomcat服務于java語言,Java語言具有跨平臺特性,JAVA 如何做到跨平臺

同一個JAVA程序(JAVA字節碼的集合),通過JAVA虛擬機(JVM)運行于各大主流操作系統平臺比如Windows、CentOS、Ubuntu等。程序以虛擬機為中介,來實現跨平臺。

(3)什么是JAVA虛擬機

所謂虛擬機,就是一臺虛擬的計算機。他是一款軟件,用來執行一系列虛擬計算機指令。大體上,虛擬機可以分為系統虛擬機和程序虛擬機。大名鼎鼎的VisualBox、VMware就屬于系統虛擬機。他們完全是對物理計算機的仿真。提供了一個可以運行完整操作系統的軟件平臺。 程序虛擬機的典型代表就是Java虛擬機,它專門為執行單個計算機程序而設計,在Java虛擬機中執行的指令我們稱為Java字節碼指令。無論是系統虛擬機還是程序虛擬機,在上面運行的軟件都唄限制于虛擬機提供的資源中。

2、tomcat部署

tomcat下載地址http://tomcat.apache.org/

jdk下載地址:Java 存檔下載 — Java SE 8 | Oracle 中國

2.1、java環境部署

[root@localhost ~]# tar xf jdk-8u151-linux-x64.tar.gz -C /usr/local
[root@localhost ~]# ls /usr/local/
bin  etc  games  include  jdk1.8.0_151  lib  lib64  libexec  sbin  share  src
[root@localhost ~]# ln -s /usr/local/jdk1.8.0_151/ /usr/local/java
[root@localhost ~]# echo 'JAVA_HOME=/usr/local/java' >> /etc/profile
[root@localhost ~]# echo 'PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
[root@localhost ~]# echo 'export JAVA_HOME PATH' >> /etc/profile
[root@localhost ~]# tail -3 /etc/profile
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
[root@localhost ~]# source /etc/profile
[root@localhost ~]# env | grep JAVA
JAVA_HOME=/usr/local/java
[root@localhost ~]# java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

2.2、tomcat安裝

[root@localhost ~]# tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local/
[root@localhost ~]# ln -s /usr/local/apache-tomcat-7.0.42/ /usr/local/tomcat
[root@localhost ~]# echo 'CATALINA_HOME=/usr/local/tomcat' >> /etc/profile
[root@localhost ~]# echo 'export CATALINA_HOME' >> /etc/profile
[root@localhost ~]# source /etc/profile

2.3、關閉防火墻

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0[root@localhost ~]# vi /etc/selinux/config 
[root@localhost ~]# cat /etc/selinux/config SELINUX=disabled

2.4、啟動tomcat

[root@localhost ~]# bash /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar[root@localhost ~]# netstat -tnlp |grep java
tcp6       0      0 :::8009                 :::*                    LISTEN      9889/java           
tcp6       0      0 :::8080                 :::*                    LISTEN      9889/java           
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      9889/java 

使用瀏覽器訪問

2.5、關閉tomcat

[root@localhost ~]# bash /usr/local/tomcat/bin/shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

3、搭建簡易電商網站

繼續上面的環境

3.1、安裝mysql

[root@localhost ~]# yum install -y mariadb-server mariadb
[root@localhost ~]# systemctl start mariadb[root@localhost ~]# mysqladmin -u root password 123 'Liumuquan@123'create database jspgou character set = utf8;
Query OK, 1 row affected, 1 warning (0.01 sec)

3.2、部署電商平臺

[root@localhost ~]# unzip jspgouV6-ROOT.zip
[root@localhost ~]# vim ROOT/WEB-INF/config/jdbc.properties
# 修改后臺數據庫連接參數,如下圖

3.3、將自帶的數據庫導入mysql

[root@localhost ~]# mysql -uroot -pLiumuquan@123 -D jspgou < DB/jspgou.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.

?這里會有一個問題

自帶的數據庫,datatime字段默認值無效

可以通過如下辦法排錯

# 進入數據庫mysql> show session variables like '%sql_mode%';
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)#將sql_mode復制出來,刪除其中NO_ZERO_IN_DATE,NO_ZERO_DATE兩個字段#退出數據庫
vim my.cnf
添加
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION重啟數據庫重新導入

3.4、網站代碼部署

[root@localhost ~]# \cp -r ROOT /usr/local/tomcat/webapps/\cp用ROOt替換webapps下的ROOT

3.5、啟動網站

[root@localhost ~]# bash /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

使用瀏覽器訪問

這個位置給看文檔的說一下,系統環境為centos7,這個網站直接部署在centos9上會出現無法連接數據庫的問題。

4、tomcat多實例

Tomcat多實例是指在同一臺服務器上運行多個獨立的Tomcat服務器實例。每個Tomcat實例都有自己的配置、日志、應用程序和端口號,它們彼此獨立,互不影響。這種部署方式通常用于在同一臺服務器上運行多個獨立的Web應用程序,每個應用程序使用獨立的Tomcat實例來提供服務。

繼續使用上面的環境,演示如下:

4.1、關閉網站

[root@localhost ~]# bash /usr/local/tomcat/bin/shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

4.2、準備多實例主目錄

[root@localhost ~]# mkdir /usr/local/tomcat/instance{1..3}
[root@localhost ~]# ls /usr/local/tomcat/
bin   instance1  instance3  LICENSE  NOTICE         RUNNING.txt  webapps
conf  instance2  lib        logs     RELEASE-NOTES  temp         work

4.3、制作實例工作目錄

[root@localhost ~]# cp -r /usr/local/tomcat/{conf,logs,temp,work} /usr/local/tomcat/instance1
[root@localhost ~]# cp -r /usr/local/tomcat/{conf,logs,temp,work} /usr/local/tomcat/instance2
[root@localhost ~]# cp -r /usr/local/tomcat/{conf,logs,temp,work} /usr/local/tomcat/instance3

4.4、修改端口

[root@localhost ~]# vi /usr/local/tomcat/instance1/conf/server.xml

修改這個文件三處地方,分別是服務端口,程序工作端口,網站目錄

#服務端口 8080 替換成 8081<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" />#程序工作端口:8005替換成 8091<Server port="8091" shutdown="SHUTDOWN">#網站目錄:webapps 替換成另一個目錄
appBase="/webapps"
#拷貝修改好的文件到其余兩個實例,這里是為了偷懶不改主目錄,實際中不同的實例主目錄也不同[root@localhost ~]# cp /usr/local/tomcat/instance1/conf/server.xml  /usr/local/tomcat/instance2/conf/
cp:是否覆蓋"/usr/local/tomcat/instance2/conf/server.xml"? yes編輯拷過去的文件
服務端口 8081替換成 8082
程序工作端口:8091替換成 8092[root@localhost ~]# cp /usr/local/tomcat/instance1/conf/server.xml  /usr/local/tomcat/instance3/conf/
cp:是否覆蓋"/usr/local/tomcat/instance3/conf/server.xml"? yes編輯拷過去的文件
服務端口 8081替換成 8083
程序工作端口:8091替換成 8093

4.5、編寫啟動腳本

[root@localhost ~]# vi /usr/local/tomcat/instance1/ins1.sh
#!/bin/bash
#instance1
. /etc/init.d/functions
export CATALINA_BASE="/usr/local/tomcat/instance1"case "$1" in
start)$CATALINA_HOME/bin/startup.sh;;
stop)$CATALINA_HOME/bin/shutdown.sh;;
restart)$CATALINA_HOME/bin/shutdown.shsleep 5$CATALINA_HOME/bin/startup.sh;;
esac
export JAVA_OPTS='-Xms64m -Xmx128m'#2,3的腳本只需要修改export CATALINA_BASE="/usr/local/tomcat/instance?"#記得對啟動腳本進行賦權[root@localhost ~]# chmod +x /usr/local/tomcat/instance1/ins1.sh
[root@localhost ~]# chmod +x /usr/local/tomcat/instance2/ins2.sh
[root@localhost ~]# chmod +x /usr/local/tomcat/instance3/ins3.sh

4.6、填充網站目錄

[root@localhost ~]# mkdir /webapps
[root@localhost ~]# cp -r /usr/local/tomcat/webapps/ROOT/ /webapps/

4.7、啟動

[root@localhost ~]# /usr/local/tomcat/instance1/ins1.sh start
Using CATALINA_BASE:   /usr/local/tomcat/instance1
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/instance1/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost ~]# /usr/local/tomcat/instance2/ins2.sh start
Using CATALINA_BASE:   /usr/local/tomcat/instance2
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/instance2/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost ~]# /usr/local/tomcat/instance3/ins3.sh start
Using CATALINA_BASE:   /usr/local/tomcat/instance3
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/instance3/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

使用瀏覽器訪問不同端口

?

?

?tomcat其實很多地方與nginx相同,只是一些細節有差別,概念類的可以去翻看nginx的三篇文章

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

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

相關文章

強烈安利10款手機App!

AI視頻生成&#xff1a;小說文案智能分鏡智能識別角色和場景批量Ai繪圖自動配音添加音樂一鍵合成視頻https://aitools.jurilu.com/ 1.聽書神器——昊昊聽書 昊昊聽書app是一款專門為用戶提供有聲讀物的應用程序。它不僅提供了各種類型的有聲書籍&#xff0c;還有各種知名的電…

pw命令1

1、查看集群狀態命令 gs_om -t status --detail 2、備節點升主&#xff08;本例子升2節點為主&#xff09; date && time cm_ctl switchover -n 2 -D /database/panweidb/data 3、cm_ctl是全局的&#xff0c;在一個節點運行 cm_ctl stop && cm_ctl start 就重…

鑄鐵機械5G智能工廠工業物聯數字孿生平臺,推進制造業數字化轉型

鑄鐵機械5G智能工廠工業物聯數字孿生平臺&#xff0c;推進制造業數字化轉型。工業物聯數字孿生平臺以5G技術為基礎&#xff0c;通過工業物聯網連接鑄鐵機械生產過程中的各個環節&#xff0c;運用數字孿生技術構建虛擬工廠&#xff0c;實現生產過程的實時監測、模擬與優化&#…

垃圾回收算法

垃圾回收基于“對象不再使用”的原則&#xff0c;自動檢測并回收不再被引用的對象。JVM通過跟蹤對象的引用關系來判斷對象是否仍在使用中。當一個對象沒有任何引用指向它時&#xff0c;垃圾回收器就會將其標記為可回收對象。 垃圾回收的工作機制 標記-清除&#xff08;Mark-S…

ros與硬件的交互

&#xff08;一&#xff09; 與usb相機的交互 第一個鏈接是 先從usb中拿到圖像&#xff0c;然后再發布和訂閱 【C】ROS&#xff1a;cv_bridge包使用與圖像轉換示例_cvbridge-CSDN博客 第二個鏈接是使用方法 ROS學習筆記--cv_bridge_cvbridge-CSDN博客 第三個鏈接是&#xff0c;…

C語言的printf輸出問題

看到這段代碼的時候&#xff0c;想到這個printf輸出的值是多少? 若您想到的答案是1-2&#xff0c;真的是這樣嗎&#xff1f; #include <stdio.h>int main(int argc, char *argv[]) {int i 1;printf("%d-%d\r\n", i, i);return 0; }先了解一個知識點&#xf…

2024.6.05總結1102

今天刷到一個視頻&#xff0c;話題非常沉重&#xff0c;看完后感覺整個人特別壓抑。 這個話題是&#xff1a;“高考能改變一個人的命運嗎&#xff1f;”在這個視頻中&#xff0c;主持人采訪了很多個人&#xff0c;但很多人的觀點是今時不同往日&#xff0c;想要靠高考改變命運很…

I.MX6ULL UART 串口通信實驗

系列文章目錄 I.MX6ULL UART 串口通信實驗 I.MX6ULL UART 串口通信實驗 系列文章目錄一、前言二、I.MX6U 串口簡介2.1 UART 簡介2.2 I.MX6U UART 簡介 三、硬件原理分析四、實驗程序編寫五、編譯下載驗證5.1編寫 Makefile 和鏈接腳本5.2 編譯下載 一、前言 不管是單片機開發還…

解鎖用Mermaid繪制圖表的神奇力量

在這個快節奏、信息爆炸的時代&#xff0c;我們迫切需要一種簡單、高效且美觀的方式來表達復雜的思想和流程。 幸運的是&#xff0c;Mermaid就是這樣一種工具。無論你是開發者、項目經理還是設計師&#xff0c;Mermaid都能幫助你輕松繪制各種類型的圖表&#xff0c;讓你的文檔…

充電樁軟硬件,賺錢新招數!-慧哥充電樁開源系統

慧哥充電樁開源平臺V2.5.2_----- SpringCloud 汽車 電動自行車 云快充1.5、云快充1.6 https://liwenhui.blog.csdn.net/article/details/134773779?spm1001.2014.3001.5502 充電樁軟件和硬件一體化的盈利方向可以清晰地歸納為以下幾個主要方面&#xff1a; 充電服務收費&…

代碼隨想錄算法訓練營第五十天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

代碼隨想錄算法訓練營第五十天 198.打家劫舍 題目鏈接&#xff1a;198.打家劫舍 確定dp數組以及下標的含義&#xff1a;dp[i]&#xff1a;考慮下標i&#xff08;包括i&#xff09;以內的房屋&#xff0c;最多可以偷竊的金額為dp[i]。確定遞推公式&#xff1a;max(dp[i - 1],…

開個新專欄,叫吾日三醒吾身,這個我打算得到了感悟就更新

打算開個新專欄&#xff0c;還有4年就30歲了。人生如夢啊&#xff0c;過的真快&#xff0c;家里的寶寶也還有2個月就出生了&#xff0c;都快要當父親啦&#xff0c;感覺這輩子還沒做啥很牛的事情。所以就立個flag吧。 自考還沒考過&#xff0c;就3門了&#xff0c;考了3年了&a…

阻性負載和感性負載的區別

1.阻性負載&#xff1a; 阻性負載是指電路中只包含電阻元件的情況。這種負載會使得電流與電壓之間呈現出線性關系&#xff0c;即滿足歐姆定律。 當負載電流負載電壓沒有相位差時負載為阻性(如負載為白熾燈、電爐)。 2.感性負載&#xff1a; 感性負載指的是電路中含有電感元…

SVN在Linux服務器下部署過程

svn server 基于 ubuntu22.04 的 svn server 安裝 refer&#xff1a;https://developer.aliyun.com/article/1431862#:~:text%E5%A6%82%E4%BD%95%E5%9C%A8Ubuntu%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AESVN%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%B9%B6%E5%AE%9E%E7%8E%B0%E6%97%A0%E5…

ARM功耗管理之功耗狀態及功耗模式

安全之安全(security)博客目錄導讀 目錄 一、功耗狀態定義 ?編輯二、功耗模式定義 三、功耗狀態和功耗模式區別<

6月05日,每日信息差

第一、特斯拉在碳博會上展示了其全品類的可持續能源解決方案&#xff0c;包括首次在國內展出的超大型電化學商用儲能系統 Megapack 和家庭儲能系統 Powerwall。此外&#xff0c;特斯拉還展示了電動汽車三電系統的解構和電池回收技術產品 第二、2024 年第一季度&#xff0c;全球…

用增之Appsflyer(一)

目錄 簡介 一、Appsflyer開發 指南 二、SDK集成 注意點: 代碼部分: Step 1:代碼倉庫配置 Step 2:添加依賴項 Step 3:添加權限 Step 4:添加混淆 Step 5:facebook兼容 Step 6:java代碼部分 1、初始化 一、AppsFlyerConversionListener

免費開源圖片轉文字識別軟件:Umi-OCR

目錄 1.介紹 2.項目亮點 3.項目功能&#xff08;已實現&#xff09; 4.功能體驗 5.項目集成&#xff08;調用接口&#xff09; 6.項目地址 1.介紹 Umi-OCR&#xff1a;免費&#xff0c;開源&#xff0c;可批量的離線OCR軟件&#xff0c;目前適用于 Windows7 x64 及以上。…

自動化辦公02 用openpyxl庫操作excel.xlsx文件(新版本)

目錄 一、文件讀操作 二、文件寫操作 三、修改單元格樣式 openpyxl 是一個處理Excel表格的第三方庫。openpyxl 庫可以處理Excel2010以后的電子表格格式&#xff0c;包括&#xff1a;xlsx/xlsm/xltx/xltm。 openpyxl教程 一、文件讀操作 工作簿(workbook): excel文件 工作表…

word自帶公式編輯器技巧

1.實現多行公式換行且對齊 1.1 準備階段&#xff08;默認Unicode模式&#xff09; 進入公式編輯模式&#xff0c;輸入\eqarray&#xff0c;緊接著按下空格鍵輸入空格&#xff0c;如下 1.2 實現換行和對齊 將要編輯的公式輸入到括號內 &&#xff1a;實現位置對齊 &…