前言:本章整理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的三篇文章