tomcat詳細介紹

tomcat是java語言編寫的軟件
JVM是java虛擬機的縮寫
java虛擬機本質就是一個程序,當它在命令行上啓動的時候,就開始執行保存在某字節碼文件中的指令。
java語言的可移植性正是建立在java虛擬機的基礎上。任何平臺只要裝有針對該平臺的java虛擬機,字節碼文件(.class)就可以在該平臺上運行。這就是一次編譯處處運行

關於不同語言的編譯:
c語言(編譯性語言):源碼 不同的CPU架構 需要相同的代碼根據不同的操作系統進行重新編譯
java語言(一次編譯處處運行):jdk包含java虛擬機;java代碼運行在java虛擬機中;不同的操作系統可以使用相同的java代碼 ,只是需要不同的jdk;java虛擬機提供了相同的環境;

tomcat基於java開發的web服務

tomcat和nginx的區別:
nginx僅支持靜態資源,而tomcat則支持java開發的jsp動態資源和靜態資源
nginx適合做前端負載均衡,而tomcat適合做後端應用服務處理
通常情況下,企業會使用nginx+tomcat結合使用,由nginx處理靜態資源,tomcat處理動態資源

nginx+PHP處理動態資源
tomcat單獨就可以處理動態資源

JVM JRE jdk三者的區別:
1、JVM是java虛擬機
2、JRE 是java的運行環境(包含java虛擬機)
3、jdk是java的開發工具(包含JRE(JRE包含java虛擬機))

tomcat快速安裝

1、rpm方式安裝jdk
上傳軟件包到/opt目錄下
鏈接:https://pan.baidu.com/s/1tm1sxTO7bo40S_vcLuZZnw
提取碼:ctk7
鏈接:https://pan.baidu.com/s/1n4g2C2wLlfahFoSFo0GPqA
提取碼:opru

jdk的下載去Oracle官網下載
https://www.oracle.com/cn/java/technologies/javase/javase-downloads.html
tomcat去清華源可以下載或者去tomcat官網
http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/

在這裏插入圖片描述

rpm -ivh  jdk-8u102-linux-x64.rpm 
mkdir   /app/
tar xf  apache-tomcat-8.0.27.tar.gz  -C  /app/
/app/apache-tomcat-8.0.27/bin/startup.sh 

2、tomcat啓動慢解決方案
查看沒優化之前的啓動時間

[root@tomcat02 opt]# grep  'Server startup'  /app/apache-tomcat-8.0.27/logs/catalina.out 
22-Jun-2020 06:38:39.904 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 558 ms

優化方案
解決tomcat啓動時產生session隨機數作爲id導致啓動慢的問題

vi /usr/java/jdk1.8.0_102/jre/lib/security/java.security
117 securerandom.source=file:/dev/urandom

tomcat目錄結構

bin 主要包含啓動關閉tomcat的腳本和依賴文件 
conf tomcat配置文件目錄
lib   tomcat運行需要加載的jar包 類似於PHP的模塊概念
LICENSE 通知信息
logs 在運行過程中產生的日誌文件
NOTICE  通知版本信息
RELEASE-NOTES 版本特性
RUNNING.txt 幫助文件
temp 存放臨時文件 上傳的代碼包解壓時會臨時存放在temp目錄下
webapps 站點目錄
work tomcat運行時產生的緩存文件

核心配置文件
/app/apache-tomcat-8.0.27/conf/server.xml

在這裏插入圖片描述
原理圖解釋:
1、整個tomcat就是一個server
2、connector連接器:支持HTTP https ajp三種協議 不同的協議不同的端口
3、連接器將請求轉發給 engine引擎 引擎處理請求,默認引擎是catalina,匹配host區域站點

用戶訪問tomcat代理(proxy),代理通過請求頭將訪問連接拋給後端連接器,連接器通過service的配置將請求拋給後端引擎,引擎匹配host站點

一個tomcat實例一個server
一個server中包含多個connector,connector的主要功能是接受、響應用戶請求
service的作用:將connector關聯到engine(Catalina引擎中)

<Server port="8005" shutdown="SHUTDOWN"> 區域
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

資源區域

 <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

連接器區域

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

host區域 類似於nginx中的站點區域

tomcat部署zrlog博客項目
配置文件修改

129       <Host name="zrlog.oldboyedu.com"  appBase="/code"
130             unpackWARs="true" autoDeploy="true">
131         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/var/log"
132                prefix="zrlog_access_log" suffix=".txt"
133                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
134       </Host>

配置文件解釋

129       <Host name="域名"  appBase="站點目錄"
130             unpackWARs="是否自動解壓war包" autoDeploy="true">
131         <Valve className="日誌級別格式" directory="日誌目錄"
132                prefix="日誌名字" suffix=".txt"
133                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
134       </Host>

創建站點目錄

mkdir  /code

放入war包

scp  10.0.0.12:/root/ROOT.war  .

重啓tomcat服務

/app/apache-tomcat-8.0.27/bin/shutdown.sh 
 /app/apache-tomcat-8.0.27/bin/startup.sh

修改本地win的host文件,添加域名解析

訪問

zrlog.oldboyedu.com:8080

在這裏插入圖片描述

安裝數據庫 並創庫授權

mysql_secure_installation
mysql  -uroot  -p000000
create  database  zrlog;

界面操作:
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

tomcat配置basic認證

效果圖如下:當然了 這個是tomcat默認自帶的
訪問的是http://10.0.0.11:8080/host-manager

在這裏插入圖片描述
點擊取消 獲得設置用戶名和密碼的信息

在這裏插入圖片描述
編輯文件 設置密碼

vim /app/apache-tomcat-8.0.27/conf/tomcat-users.xml 
 39 <role rolename="admin-gui"/>
 40 <user username="tomcat" password="123456" roles="admin-gui"/>

重啓tomcat服務

/app/apache-tomcat-8.0.27/bin/shutdown.sh 
/app/apache-tomcat-8.0.27/bin/startup.sh 

輸入用戶名tomcat 密碼123456

在這裏插入圖片描述

設置zrlog的basic認證

vim /code/ROOT/WEB-INF/web.xml
 28 <security-constraint>
 29   <web-resource-collection>
 30     <web-resource-name>test</web-resource-name>
 31     <!--匹配所有請求-->
 32     <url-pattern>/admin/login/*</url-pattern>
 33   </web-resource-collection>
 34   <auth-constraint>
 35     <!-- 只允許basicrole角色的用戶訪問 -->
 36     <role-name>test100</role-name>
 37   </auth-constraint>
 38 </security-constraint>
 39 <login-config>
 40   <!--值可以是BASIC/DIGEST/CLIENT_CERT/FORM-->
 41   <auth-method>BASIC</auth-method>
 42   <!--認證提示信息-->
 43   <realm-name>Default</realm-name>
 44 </login-config>

配置test100的角色

vim /app/apache-tomcat-8.0.27/conf/tomcat-users.xml
 39 <role rolename="admin-gui"/>
 40 <role rolename="test100"/>
 41 <user username="tomcat" password="123456" roles="admin-gui,test100"/>
 42 </tomcat-users>

重啓tomcat服務

  167  /app/apache-tomcat-8.0.27/bin/shutdown.sh 
  168  /app/apache-tomcat-8.0.27/bin/startup.sh

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
nginx+tomcat架構

在這裏插入圖片描述

數據庫遷移
1、nginx負載安裝數據庫

yum install -y  mariadb-server

2、遷移數據庫
tomcat01節點上 關閉tomcat並備份數據

  173  /app/apache-tomcat-8.0.27/bin/shutdown.sh 
  174  mysqldump -uroot  -p000000  -B zrlog >zrlog.sql
  scp  zrlog.sql   10.0.0.3:/root
  systemctl stop  mariad

3、導入數據
nginx負載節點上 導入數據

mysql  -uroot -p000000 <zrlog.sql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| zrlog              |
+--------------------+
授權允許網段訪問
 grant all on *.* to root@'10.0.0.%' identified by "000000";

4、tomcat01節點 啓動tomcat並訪問測試

/app/apache-tomcat-8.0.27/bin/startup.sh

在這裏插入圖片描述

tomcat02部署
tomcat02刪除站點數據

rm -rf /app/apache-tomcat-8.0.27/
 rm -rf /code/*
 啓動tomcat
 /app/apache-tomcat-8.0.27/bin/startup.sh 

tomcat01數據複製到tomcat02

 scp -r   /app/apache-tomcat-8.0.27  10.0.0.12:/app
 scp  -r /code/*  10.0.0.12:/code/

在這裏插入圖片描述

修改站點目錄信息 作爲區分tomcat01 和tomcat02的標識

vim /code/ROOT/include/templates/default/header.jsp
 61                             <span class="slogan">tomcat02</span>


vim /code/ROOT/include/templates/default/header.jsp
61                             <span class="slogan">tomcat01</span>

在這裏插入圖片描述

nginx節點安裝nginx 配置負載均衡

vim zrlog.conf

upstream java {
server 10.0.0.11:8080;
server 10.0.0.12:8080;
}
server {
listen 80;
server_name zrlog.oldboyedu.com;
root html;
index index.html index.htm;
location / {
  proxy_pass http://java;
  proxy_set_header Host $http_host;
 }
}


 systemctl start  nginx
 systemctl enable  nginx

nginx+tomcat架構實現https

1、上傳證書

創建目錄 存放證書

mkdir  /opt/cert/

2、修改nginx的zrlog.conf的配置文件

[root@lb01 cert]# cat  /etc/nginx/conf.d/zrlog.conf 
upstream java {
server 10.0.0.11:8080;
server 10.0.0.12:8080;
}
server {
  listen 443 ssl;
  ssl_certificate /opt/cert/Nginx/1_blog.oldqiang.com_bundle.crt;
  ssl_certificate_key /opt/cert/Nginx/2_blog.oldqiang.com.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  ssl_prefer_server_ciphers on;
  root html;
  index  index.html index.htm;
  location / {
  proxy_pass  http://java/;
  proxy_set_header Host $http_host;
 }
}
 server {
 listen 80;
 server_name blog.oldqiang.com;
 location / { 
 location / {
 return 302 https://blog.oldqiang.com$request_uri;
  }
 }
}

3、修改win本地host解析

10.0.0.3  blog.oldqiang.com

4、修改tomcat配置文件中的域名信息和nginx中一致

vim /app/apache-tomcat-8.0.27/conf/server.xml
129       <Host name="blog.oldqiang.com"  appBase="/code"
  211  /app/apache-tomcat-8.0.27/bin/shutdown.sh 
  212  /app/apache-tomcat-8.0.27/bin/startup.sh 

在這裏插入圖片描述

使用maven編譯java項目

1、安裝maven

rpm -ivh jdk-8u102-linux-x64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

tar xf apache-maven-3.6.0-bin.tar.gz
mv apache-maven-3.6.0 /usr/local/
ln -s /usr/local/apache-maven-3.6.0 /usr/local/maven
vim /etc/profile
export M2_HOME=/usr/local/maven
export PATH=${M2_HOME}/bin:$PATH
source /etc/profile

[root@tomcat01 ~]# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 1.8.0_102, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_102/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"

2、上傳java源碼 進行編譯

java代碼使用maven編譯:jar包 war包 可能會是兩種包之中的一個
注意:maven進行編譯的時候,一定要在源碼目錄下 其他目錄下找不到pom文件 會報錯

mvn  package

執行編譯後 會下載一些依賴 這些下載源是在國外
3、修改maven爲國內源

vim /usr/local/maven/conf/settings.xml
160 <mirror>
161 <id>alimaven</id>
162 <name>aliyun maven</name>
163 <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
164 <mirrorOf>central</mirrorOf>165 </mirror>
166 <mirror>167 <id>alimaven</id>
168 <mirrorOf>central</mirrorOf>169 <name>aliyun maven</name>
170 <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
171 </mirror>

不需要重啓 再次進行編譯即可

mvn  package

在這裏插入圖片描述

會在目錄下生成一個target目錄 在這個目錄下會有war包
將war包放入tomcat的站點目錄下即可部署完成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章