1 JDK
1.1 JDK和JRE的關(guān)系
JRE: 包含JVM和JAVA庫(kù)
JDK: 包含JRE和開(kāi)發(fā)工具
單純的運(yùn)行java程序, 只需JRE
開(kāi)發(fā)人員需要安裝JDK
1.2 JDK版本
Oracle JDK: JDK8, JDK11 長(zhǎng)期支持版本
OpenJDK: 1.8.0, 1.11.0
1.3 OpenJDK 安裝
- CentOS 8 利用 yum 安裝OpenJDK

圖片.png
[16:01:04 root@jdk ~]#yum -y install java-11-openjdk.x86_64
[16:04:24 root@jdk ~]#java --version
openjdk 11.0.9.1 2020-11-04 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.9.1+1-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.9.1+1-LTS, mixed mode, sharing)
- java編譯器, javac的安裝
jdk-devel包提供javac, 因此如果需要編譯java程序, 還需要安裝devel包
[16:12:10 root@jdk ~]#yum -y install java-11-openjdk-devel.x86_64
[16:12:29 root@jdk ~]#javac --version
javac 11.0.9.1
- java編譯演示
# java代碼
[16:15:54 root@jdk ~]#ll
total 8
-rw-r--r-- 1 root root 114 Mar 21 16:14 HelloWorld.java
[16:15:12 root@jdk ~]#vim HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
# javac 編譯
[16:14:50 root@jdk ~]#javac HelloWorld.java
# 編譯后生成.class文件, 也就是字節(jié)碼
[16:15:54 root@jdk ~]#ll
total 8
-rw-r--r-- 1 root root 426 Mar 21 16:14 HelloWorld.class
-rw-r--r-- 1 root root 114 Mar 21 16:14 HelloWorld.java
# 運(yùn)行代碼
[16:15:56 root@jdk ~]#java HelloWorld
Hello World!
1.4 OracleJDK安裝
- 需要在Oracle官網(wǎng)注冊(cè)
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
- 還原之前的虛擬機(jī), yum安裝OracleJDK的rpm包
[16:32:10 root@jdk ~]#ll
total 110348
-rw-r--r-- 1 root root 112994496 Oct 24 21:59 jdk-8u271-linux-x64.rpm
[16:32:11 root@jdk ~]#yum -y install jdk-8u271-linux-x64.rpm
# OracleJDK的rpm包直接提供javac工具
[16:33:24 root@jdk ~]#java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
[16:33:40 root@jdk ~]#javac -version
javac 1.8.0_271
- 初始化環(huán)境變量, 為了支持Tomcat
# 將/usr/java/default目錄, 作為JAVA_HOME, 因?yàn)閥um安裝的oraclejdk, java的所有文件都是在這個(gè)default目錄中
[16:33:43 root@jdk ~]#ll /usr/java/default/
total 25784
drwxr-xr-x 2 root root 4096 Mar 21 16:32 bin
-rw-r--r-- 1 root root 3244 Sep 17 2020 COPYRIGHT
drwxr-xr-x 3 root root 132 Mar 21 16:32 include
-rw-r--r-- 1 root root 5220228 Sep 10 2020 javafx-src.zip
-rw-r--r-- 1 root root 195 Sep 17 2020 jmc.txt
drwxr-xr-x 6 root root 198 Mar 21 16:32 jre
drwxr-xr-x 4 root root 31 Mar 21 16:32 legal
drwxr-xr-x 4 root root 223 Mar 21 16:32 lib
-rw-r--r-- 1 root root 44 Sep 17 2020 LICENSE
drwxr-xr-x 4 root root 47 Mar 21 16:32 man
-rw-r--r-- 1 root root 159 Sep 17 2020 README.html
-rw-r--r-- 1 root root 424 Sep 17 2020 release
-rw-r--r-- 1 root root 21147082 Sep 17 2020 src.zip
-rw-r--r-- 1 root root 190 Sep 10 2020 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rw-r--r-- 1 root root 190 Sep 17 2020 THIRDPARTYLICENSEREADME.txt
# 將$JAVA_HOME/bin加入到PATH變量
[16:35:54 root@jdk ~]#vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
[16:38:25 root@jdk ~]#. /etc/profile.d/jdk.sh
# 非必選項(xiàng)
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
- 再準(zhǔn)備一個(gè)虛擬機(jī), 進(jìn)行OracleJDK的二進(jìn)制安裝
[16:47:11 root@jdk ~]#ls
jdk-8u271-linux-x64.tar.gz
[16:47:12 root@jdk ~]#tar xf jdk-8u271-linux-x64.tar.gz -C /usr/local
[16:52:36 root@jdk ~]#cd /usr/local
[16:52:38 root@jdk /usr/local]#ls
bin etc games include jdk1.8.0_271 lib lib64 libexec sbin share src
[16:52:39 root@jdk /usr/local]#ln -s jdk1.8.0_271/ jdk
[16:52:50 root@jdk /usr/local]#ll
total 0
drwxr-xr-x. 2 root root 6 May 11 2019 bin
drwxr-xr-x. 2 root root 6 May 11 2019 etc
drwxr-xr-x. 2 root root 6 May 11 2019 games
drwxr-xr-x. 2 root root 6 May 11 2019 include
lrwxrwxrwx 1 root root 13 Mar 21 16:52 jdk -> jdk1.8.0_271/
drwxr-xr-x 8 10143 10143 273 Sep 17 2020 jdk1.8.0_271
drwxr-xr-x. 2 root root 6 May 11 2019 lib
drwxr-xr-x. 2 root root 6 May 11 2019 lib64
drwxr-xr-x. 2 root root 6 May 11 2019 libexec
drwxr-xr-x. 2 root root 6 May 11 2019 sbin
drwxr-xr-x. 5 root root 49 Oct 29 21:17 share
drwxr-xr-x. 2 root root 6 May 11 2019 src
# 初始化環(huán)境變量
[16:53:40 root@jdk /usr/local]#vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib
[16:55:24 root@jdk /usr/local]#. /etc/profile.d/jdk.sh
[16:56:26 root@jdk /usr/local]#java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
[16:56:37 root@jdk /usr/local]#javac -version
javac 1.8.0_271
[16:56:41 root@jdk /usr/local]#which java
/usr/local/jdk/bin/java
2. Tomcat 單機(jī)部署
2.1 安裝 Oracle JDK
- RPM安裝(8u271)
從Oracle官網(wǎng)登錄, 下載RPM包, 直接yum安裝
[18:02:57 root@201 ~]#ls -lh jdk-8u271-linux-x64.rpm
-rw-r--r-- 1 root root 108M Oct 24 21:59 jdk-8u271-linux-x64.rpm
[18:05:00 root@201 ~]#yum -y install jdk-8u271-linux-x64.rpm
[18:05:33 root@201 ~]#java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
[18:45:14 root@201 ~]#which java
/usr/bin/java
[18:45:17 root@201 ~]#ll /usr/bin/java
lrwxrwxrwx 1 root root 22 Nov 1 18:45 /usr/bin/java -> /etc/alternatives/java
[18:45:37 root@201 ~]#ll /etc/alternatives/java
lrwxrwxrwx 1 root root 37 Nov 1 18:45 /etc/alternatives/java -> /usr/java/jdk1.8.0_271-amd64/bin/java
[18:45:43 root@201 ~]#ll /usr/java/jdk1.8.0_271-amd64/bin/java
-rwxr-xr-x 1 root root 8712 Sep 17 01:11 /usr/java/jdk1.8.0_271-amd64/bin/java
設(shè)置環(huán)境變量
yum安裝的oracle-jdk, JAVA的工作目錄為/usr/java/default, 里面存放了所有JAVA相關(guān)的文件
JAVA的二進(jìn)制程序都是保存在/usr/java/default/bin目錄下, 因此要把該目錄添加到環(huán)境變量
[18:45:52 root@201 ~]#vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
[18:47:40 root@201 ~]#. /etc/profile.d/jdk.sh
[18:47:46 root@201 ~]#echo $PATH
/usr/java/default/bin:/data/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
- 二進(jìn)制安裝(8u271)
[18:56:49 root@202 ~]#ls -h jdk-8u271-linux-x64.tar.gz -l
-rw-r--r-- 1 root root 137M Oct 24 22:32 jdk-8u271-linux-x64.tar.gz
[18:56:52 root@202 ~]#tar xvf jdk-8u271-linux-x64.tar.gz -C /usr/local
[18:57:05 root@202 ~]#cd /usr/local
[18:57:10 root@202 /usr/local]#ls
bin etc games include jdk1.8.0_271 lib lib64 libexec sbin share src
[18:57:10 root@202 /usr/local]#ln -s jdk1.8.0_271 jdk
[18:57:32 root@202 /usr/local]#ls
bin etc games include jdk jdk1.8.0_271 lib lib64 libexec sbin share src
[18:57:32 root@202 /usr/local]#ll jdk
lrwxrwxrwx 1 root root 12 Nov 1 18:57 jdk -> jdk1.8.0_271
設(shè)置環(huán)境變量
[18:57:56 root@202 /usr/local]#vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
[18:59:10 root@202 /usr/local]#. /etc/profile.d/jdk.sh
[18:59:27 root@202 /usr/local]#echo $PATH
/data/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/jdk/bin
[18:59:30 root@202 /usr/local]#java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
[18:59:44 root@202 /usr/local]#which java
/usr/local/jdk/bin/java
2.2 安裝 Tomcat
Tomcat自身就是一個(gè)JAVA程序, 運(yùn)行在JAVA環(huán)境中, 然后在Tomcat里運(yùn)行JAVA程序, 類似容器.
CentOS 7 自帶的Tomcat為 7.0版本, 不推薦使用.
目前比較主流的是8.5.x版本. 但是CentOS8上還沒(méi)有Tomcat包, 因此, 可以在官網(wǎng)下載二進(jìn)制包, 通過(guò)二進(jìn)制安裝Tomcat
2.2.1 二進(jìn)制安裝Tomcat
解壓縮, 創(chuàng)建軟連接
[19:15:07 root@202 ~]#ls
anaconda-ks.cfg apache-tomcat-8.5.59.tar.gz jdk-8u271-linux-x64.tar.gz
[19:20:04 root@202 ~]#tar -xvf apache-tomcat-8.5.59.tar.gz -C /usr/local
[19:21:04 root@202 ~]#cd /usr/local
[19:29:49 root@202 /usr/local]#ls
apache-tomcat-8.5.59 bin etc games include jdk jdk1.8.0_271 lib lib64 libexec sbin share src
[19:39:50 root@202 /usr/local]#ln -s apache-tomcat-8.5.59 tomcat
[19:20:03 root@202 /usr/local]#ls
apache-tomcat-8.5.59 bin etc games include jdk jdk1.8.0_271 lib lib64 libexec sbin share src tomcat
指定PATH變量
[19:21:08 root@202 /usr/local]#echo "PATH=/usr/local/tomcat/bin:$PATH" > /etc/profile.d/tomcat.sh
[19:21:41 root@202 /usr/local]#. /etc/profile.d/tomcat.sh
[19:21:46 root@202 /usr/local]#echo $PATH
/usr/local/tomcat/bin:/data/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/jdk/bin:/root/bin
catalina.sh 腳本
[19:21:51 root@202 /usr/local]#catalina.sh
Using CATALINA_BASE: /usr/local/tomcat #變量會(huì)自動(dòng)創(chuàng)建
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
...
stop Stop Catalina, waiting up to 5 seconds for the process to end #默認(rèn)關(guān)閉Tomcat需要等待5秒, 5秒之后開(kāi)始釋放資源, 因此, 關(guān)閉Tomcat后, 建議稍等幾秒再開(kāi)啟, 防止數(shù)據(jù)丟失或者異常關(guān)閉,導(dǎo)致下次無(wú)法啟動(dòng)Tomcat
stop n Stop Catalina, waiting up to n seconds for the process to end #也可以手動(dòng)指定
[17:20:55 root@202 /usr/local]#catalina.sh version
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/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Server version: Apache Tomcat/8.5.59
Server built: Oct 6 2020 16:57:18 UTC
Server number: 8.5.59.0
OS Name: Linux
OS Version: 4.18.0-193.el8.x86_64
Architecture: amd64
JVM Version: 1.8.0_271-b09
JVM Vendor: Oracle Corporation
startup.sh 腳本
- 用來(lái)啟動(dòng)Tomcat, 內(nèi)部會(huì)調(diào)用catalina.sh
[19:22:35 root@202 /usr/local]#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/jdk
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
- shutdown.sh: 用來(lái)關(guān)閉Tomcat
監(jiān)聽(tīng)端口
[19:24:59 root@202 /usr/local]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
查看Tomcat是以root身份運(yùn)行的一個(gè)java程序, 來(lái)調(diào)用Tomcat信息
[19:25:35 root@202 /usr/local]#ps aux | grep tomcat
root 1372 3.2 10.1 2152924 81988 pts/0 Sl 19:24 0:04 /usr/local/jdk/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 1419 0.0 0.1 12108 1044 pts/0 R+ 19:26 0:00 grep --color=auto tomcat
創(chuàng)建Service文件
- Service文件可以從yum安裝的版本里面拷貝
#創(chuàng)建tomcat用戶
[19:31:11 root@202 ~]#useradd -r -s /sbin/nologin tomcat
#準(zhǔn)備service文件中的環(huán)境變量
[19:31:26 root@202 ~]#vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/usr/local/jdk # 如果是yum安裝的openjdk或者oraclejdk, 那么JAVA_HOME為/usr/java/default
#JRE_HOME=/usr/local/jdk/jre
#兩個(gè)變量至少設(shè)置一項(xiàng)才能啟動(dòng) tomcat
#修改工作目錄權(quán)限, $CATALINA_BASE
[19:37:30 root@202 ~]#chown -R tomcat.tomcat /usr/local/tomcat/ #要補(bǔ)全目錄才能遞歸修改
#創(chuàng)建service文件
[19:38:11 root@202 ~]#vim /lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
[Unit]
Description=Tomcat
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
加載daemon, 先用shutdown.sh關(guān)閉Tomcat, 5秒后用systemctl啟動(dòng)tomcat
[19:42:23 root@202 ~]#systemctl daemon-reload
[17:34:02 root@202 /usr/local]#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/jdk/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
[19:42:34 root@202 ~]#systemctl enable --now tomcat
Created symlink /etc/systemd/system/multi-user.target.wants/tomcat.service → /usr/lib/systemd/system/tomcat.service.
[19:42:45 root@202 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
注意:
Tomcat的核心分為3個(gè)部分:
- Web容器: 處理靜態(tài)頁(yè)面;
- JSP容器: 把jsp頁(yè)面翻譯成一般的 servlet
- catalina: 是一個(gè) servlet 容器, 用于處理 servlet
2.2.2 一鍵部署JDK和Tomcat安裝腳本
#!/bin/bash
. /etc/init.d/functions
DIR=`pwd`
JDK_FILE="jdk-8u271-linux-x64.tar.gz"
TOMCAT_FILE="apache-tomcat-8.5.59.tar.gz"
JDK_DIR="/usr/local"
TOMCAT_DIR="/usr/local"
install_jdk(){
if ! [ -f "$DIR/$JDK_FILE" ]; then
action "$JDK_FILE 文件不存在" false
exit;
elif [ -d $JDK_DIR/jdk ]; then
action "JDK 已經(jīng)安裝" false
exit;
else
[ -d "$JDK_DIR" ] || mkdir -pv $JDK_DIR
fi
tar xvf $DIR/$JDK_FILE -C $JDK_DIR
cd $JDK_DIR && ln -s jdk1.8* jdk
cat > /etc/profile.d/jdk.sh <<EOF
export JAVA_HOME=$JDK_DIR/jdk
export JRE_HOME=\$JAVA_HOME/jre
export CLASSPATH=\$JAVA_HOME/lib/:\$JRE_HOME/lib
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
. /etc/profile.d/jdk.sh
java -version && action "JDK 安裝完成" || { action "JDK 安裝失敗" false ; exit; }
}
install_tomcat(){
if ! [ -f "$DIR/$TOMCAT_FILE" ];then
action "$TOMCAT_FILE 文件不存在" false
exit;
elif [ -d $TOMCAT_DIR/tomcat ];then
action "TOMCAT 已經(jīng)安裝" false
exit;
else
[ -d "$TOMCAT_DIR" ] || mkdir -pv $TOMCAT_DIR
fi
tar xf $DIR/$TOMCAT_FILE -C $TOMCAT_DIR
cd $TOMCAT_DIR && ln -s apache-tomcat-* tomcat
echo "PATH=$TOMCAT_DIR/tomcat/bin:"'$PATH' > /etc/profile.d/tomcat.sh
id tomcat &> /dev/null || useradd -r -s /sbin/nologin tomcat
cat > $TOMCAT_DIR/tomcat/conf/tomcat.conf <<EOF
JAVA_HOME=$JDK_DIR/jdk
EOF
chown -R tomcat.tomcat ${TOMCAT_DIR}/tomcat/
cat > /lib/systemd/system/tomcat.service <<EOF
[Unit]
Description=Tomcat
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=$TOMCAT_DIR/tomcat/conf/tomcat.conf
ExecStart=$TOMCAT_DIR/tomcat/bin/startup.sh
ExecStop=$TOMCAT_DIR/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now tomcat.service
systemctl is-active tomcat.service &> /dev/null && action "TOMCAT 安裝完成" || { action "TOMCAT 安裝失敗" false; exit; }
}
install_jdk
install_tomcat