Tomcat-web服務器介紹以及安裝部署

一、Tomcat簡介

Tomcat是Apache軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun和其他一些公司及個人共同開發而成。

Tomcat服務器是一個免費的開放源代碼的Web應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP程序的首選。

Tomcat和Nginx、Apache(httpd)、lighttpd等Web服務器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。不過,Tomcat處理靜態HTML的能力不如Nginx/Apache服務器。

Tomcat官網: Apache Tomcat? - Welcome!

二、安裝部署Tomcat

1、安裝jdk運行環境

[root@openEuler-1 ~]# ls
anaconda-ks.cfg  jdk-8u261-linux-x64.rpm
[root@openEuler-1 ~]# yum install jdk-8u261-linux-x64.rpm
[root@openEuler-1 ~]# java -version
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)

2、安裝tomcat

# 官網下載
[root@openEuler-1 ~]# wget -c https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.87/bin/apache-tomcat-9.0.87.tar.gz# 解壓并創建軟鏈接
[root@openEuler-1 ~]# tar -xf apache-tomcat-9.0.87.tar.gz -C /usr/local/
[root@openEuler-1 ~]# ln -sv /usr/local/apache-tomcat-9.0.87/ /usr/local/tomcat

3、編寫tomcat啟動腳本

# 供參考腳本
[root@openEuler-1 ~]# vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
Environment=CATALINA_HOME=/usr/local/tomcat
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
ExecReload=/bin/kill -s HUP $MAINPID
User=tomcat
Group=tomcat
PrivateTmp=true[Install]
WantedBy=multi-user.target# 創建用戶,賦予權限
[root@openEuler-1 ~]# groupadd -r -g 53 tomcat
[root@openEuler-1 ~]# useradd -r -u 53 -g 53 -c "Apache Tomcat" -d /usr/local/tomcat/ -s /sbin/nologin tomcat
[root@openEuler-1 ~]# chown -R tomcat.tomcat /usr/local/tomcat/*# 重啟加載并啟動服務
[root@openEuler-1 ~]# systemctl daemon-reload
[root@openEuler-1 ~]# systemctl start tomcat
[root@openEuler-1 ~]# systemctl status tomcat
● tomcat.service - Apache Tomcat ServerLoaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled)Active: active (running) since Mon 2025-03-03 12:46:30 CST; 6s agoProcess: 5512 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
...

4、測試

測試靜態頁面:

[root@openEuler-1 ~]# echo  "tomcat-test~~~~"  >  /usr/local/tomcat/webapps/ROOT/test01.html

測試jsp頁面:

[root@openEuler-1 ~]# vim /usr/local/tomcat/webapps/ROOT/test02.jsp
<html>
<body>
<center>
Now time is: <%=new java.util.Date()%>
</center>
</body>
</html>

?三、配置虛擬主機

1、部署

[root@openEuler-1 ~]# cd /usr/local/tomcat/conf/
[root@openEuler-1 conf]# cp server.xml{,.bak}
#增加虛擬主機配置:
[root@openEuler-1 conf]# vim server.xml
...<Host name="www.a.com"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Context docBase="/web/a" path="" reloadable="flase" /><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /></Host><Host name="www.b.com"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Context docBase="/web/b" path="" reloadable="flase" /><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /></Host>
...# 準備虛擬主機目錄文件
[root@openEuler-1 conf]# mkdir -p /web/{a,b}
[root@openEuler-1 conf]# vim /web/a/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head><title>JSP a page</title></head><body><% out.println("Welocome to test site,http://www.a.com");%></body>
</html>
[root@openEuler-1 conf]# vim /web/b/index.jsp
<html><head><title>JSP a page</title></head><body><% out.println("Welocome to test site,http://www.b.com");%></body>
</html>
[root@openEuler-1 conf]# systemctl restart tomcat

2、測試

在windows主機上配置主機解析后測試:

四、Tomcat目錄結構

1、tomcat主目錄介紹

# cd /usr/local/tomcat/
# tree -L 1
.
├── bin           #存放tomcat管理腳本
├── conf          # tomcat 配置文件存放目錄
├── lib           # web應用調用的jar包存放路徑
├── LICENSE
├── logs          # tomcat 日志存放目錄,catalina.out 為主要輸出日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp          # 存放臨時文件
├── webapps       # web程序存放目錄
└── work          # 存放編譯產生的.java 與 .class文件# cd /usr/local/tomcat/webapps
# tree -L 1
.
├── docs            # tomcat 幫助文檔
├── examples        # web應用實例
├── host-manager    # 主機管理
├── manager         # 管理
└── ROOT            # 默認站點根目錄

2、Tomcat配置文件目錄介紹

# cd /usr/local/tomcat/conf
# tree -L 1
.
├── Catalina
├── catalina.policy
├── catalina.properties
├── context.xml
├── logging.properties
├── logs
├── server.xml           # tomcat 主配置文件
├── server.xml.bak
├── server.xml.bak2
├── tomcat-users.xml     # tomcat 管理用戶配置文件
├── tomcat-users.xsd
└── web.xml

五、tomcat管理

Tomcat管理功能用于對Tomcat自身以及部署在Tomcat上的應用進行管理的web應用。在默認情況下是處于禁用狀態的。如果需要開啟這個功能,就需要配置管理用戶。

注意:不要在生產環境使用。

1、配置tomcat-users.xml文件

# vim /usr/local/tomcat/conf/tomcat-users.xml
...
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-jmx"/>
<role rolename="manager-script"/>
<role rolename="manager-status"/>
<user username="tomcat" password="tomcat" roles="admin-gui,manager-gui,manager-jmx,manager-script,manager-status,admin-script"/>
</tomcat-users> 
...

2、允許方式Manager App

# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml 
<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="^.*$" />     # 允許所有主機<!-- allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" / -->

3、允許訪問Host Manager

# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml <Valve className="org.apache.catalina.valves.RemoteAddrValve" 	allow="^.*$" /><!-- allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" / -->

4、訪問管理頁面

六、Tomcat配置文件

server.xml組件類別:

  • 頂級組件:位于整個配置的頂層,如server。
  • 容器類組件:可以包含其它組件的組件,如service、engine、host、context。
  • 連接器組件:連接用戶請求至tomcat,如connector。
  • 被嵌套類組件:位于一個容器當中,不能包含其他組件,如Valve、logger。

server.xml組件介紹

  • engine:核心容器組件,catalina引擎,負責通過connector接收用戶請求,并處理請求,將請求轉至對應的虛擬主機host。
  • host:類似于httpd中的虛擬主機,一般而言支持基于FQDN的虛擬主機。
  • context:定義一個應用程序,是一個最內層的容器類組件(不能再嵌套)。配置context的主要目的指定對應對的webapp的根目錄,類似于httpd的alias,其還能為webapp指定額外?? ?的屬性,如部署方式等。
  • connector:接收用戶請求,類似于httpd的listen配置監聽端口的。
  • service(服務):將connector關聯至engine,因此一個service內部可以有多個connector,但只能有一個引擎engine。service內部有兩個connector,一個?? ?engine。因此,一般情?? ?況下一個server內部只有一個service,一個service內部只有一個engine,但一個service內部可以有多個connector。
  • server:表示一個運行于JVM中的tomcat實例。
  • Valve:閥門,攔截請求并在將其轉至對應的webapp前進行某種處理操作,可以用于任何容器中,比如記錄日志(access log valve)、基于IP做訪問控制(remote address filter valve)。
  • logger:日志記錄器,用于記錄組件內部的狀態信息,可以用于除context外的任何容器中。
  • realm:可以用于任意容器類的組件中,關聯一個用戶認證庫,實現認證和授權。可以關聯的認證庫有兩種:UserDatabaseRealm、MemoryRealm和JDBCRealm。
  • UserDatabaseRealm:使用JNDI自定義的用戶認證庫。
  • MemoryRealm:認證信息定義在tomcat-users.xml中。
  • JDBCRealm:認證信息定義在數據庫中,并通過JDBC連接至數據庫中查找認證用戶。
<server><service><connector /><engine><host><context></context></host><host><context></context></host></engine></service>
</server>

1、Connector參數說明

參數參數說明
connector接收用戶請求,類似于httpd的listen配置監聽端口.
port指定服務器端要創建的端口號,并在這個端口監聽來自客戶端的請求。
address指定連接器監聽的地址,默認為所有地址(即0.0.0.0)
protocol連接器使用的協議,支持HTTP和AJP。AJP(Apache Jserv Protocol)專用于tomcat與apache建立通信的, 在httpd反向代理用戶請求至tomcat時使用(可見Nginx反向代理時不可用AJP協議)。
minProcessors服務器啟動時創建的處理請求的線程數
maxProcessors最大可以創建的處理請求的線程數
enableLookups如果為true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名,若為false則不進行DNS查詢,而是返回其ip地址
redirectPort指定服務器正在處理http請求時收到了一個SSL傳輸請求后重定向的端口號
acceptCount指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理
connectionTimeout指定超時的時間數(以毫秒為單位)

2、host參數說明

參數參數說明
host表示一個虛擬主機
name指定主機名
appBase應用程序基本目錄,即存放應用程序的目錄.一般為appBase="webapps" ,相對于CATALINA_HOME而言的,也可以寫絕對路徑。
unpackWARs如果為true,則tomcat會自動將WAR文件解壓,否則不解壓,直接從WAR文件中運行應用程序
autoDeploy在tomcat啟動時,是否自動部署。
xmlValidation是否啟動xml的校驗功能,一般xmlValidation="false"。
xmlNamespaceAware檢測名稱空間,一般xmlNamespaceAware="false"。

3、context參數說明

參數參數說明
Context表示一個web應用程序,通常為WAR文件
docBase應用程序的路徑或者是WAR文件存放的路徑,也可以使用相對路徑,起始路徑為此Context所屬Host中appBase定義的路徑。
path表示此web應用程序的url的前綴,這樣請求的url為http://localhost:8080/path/
reloadable這個屬性非常重要,如果為true,則tomcat會自動檢測應用程序的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動裝載新的應用程序,可以在不重啟tomcat的情況下改變應用程序

七、站點部署

第一種方式是直接將程序目錄放在webapps目錄下面?

第二種方式是使用開發工具將程序打包成war包,然后上傳到webapps目錄下面。

部署開源站點(jpress) jpress官網:jpress.io

下載地址:https://github.com/JpressProjects/jpress

安裝配置數據庫:

# yum -y install mariadb-server
# systemctl start mariadb.service# mysql -e "create database jpress DEFAULT CHARACTER SET utf8;"
# mysql -e "grant all on jpress.* to jpress@'localhost' identified by '123456';"

站點上線:

# ls /usr/local/tomcat/webapps/jpress-web-newest.war 
/usr/local/tomcat/webapps/jpress-web-newest.war

瀏覽器訪問 http://IP:8080/jpress-web-newest/install 安裝完畢之后,重啟tomcat即可訪問。

訪問后臺:http://IP:8080/jpress-web-newest/admin/login

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

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

相關文章

分布式存儲—— HBase數據模型 詳解

目錄 1.3 HBase數據模型 1.3.1 兩類數據模型 1.3.2 數據模型的重要概念 1.3.3 數據模型的操作 1.3.4 數據模型的特殊屬性 1.3.5 CAP原理與最終一致性 1.3.6 小結 本文章參考、總結于學校教材課本《HBase開發與應用》 1.3 HBase數據模型 在開始學習HBase之前非常…

android中activity1和activity2中接收定時消息

android中activity1和activity2中接收定時消息 業務類 import java.util.Timer; import java.util.TimerTask;public class MyAnager {private MyAnager() {}private static MyAnager instance;//回調接口onRecvTaskpublic interface OnMsgListener {void onRecvTask(String a…

BitMap實現用戶簽到、UV統計

1. Redis 的 BitMap 概述 在 Redis 中&#xff0c;BitMap 并非一種獨立的數據結構&#xff0c;而是基于 String 類型數據結構實現的一種存儲方式。由于 String 類型的最大上限是 512M&#xff0c;換算成 bit 位就是 2^32 個&#xff0c;這決定了 BitMap 可操作的最大范圍。Bit…

共享模型之管程(悲觀鎖)

共享模型之管程&#xff08;悲觀鎖&#xff09; 文章目錄 共享模型之管程&#xff08;悲觀鎖&#xff09;一、常見線程安全的類二、對象頭三、Monitor&#xff08;監視器 / 管程&#xff09;四、偏向鎖偏向鎖的實現原理撤銷偏向鎖 五、輕量級鎖輕量級鎖的釋放 六、重量級鎖七、…

網絡安全ctf試題 ctf網絡安全大賽真題

MISC 1 簽到 難度 簽到 復制給出的flag輸入即可 2 range_download 難度 中等 flag{6095B134-5437-4B21-BE52-EDC46A276297} 0x01 分析dns流量&#xff0c;發現dns && ip.addr1.1.1.1存在dns隧道數據&#xff0c;整理后得到base64: cGFzc3dvcmQ6IG5zc195eWRzIQ 解…

centos7操作系統下安裝docker,及查看docker進程是否啟動

centos7下安裝docker&#xff0c;需要用到的yun命令 &#xff08;yum命令用于添加卸載程序&#xff09; 1.設置倉庫&#xff1a; yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2.安裝 Docker Engine-Community yum in…

私有云基礎架構與運維(二)

二.私有云基礎架構 【項目概述】 經過云計算基礎知識及核心技術的學習后&#xff0c;希望進一步了解 IT 基礎架構的演變過 程&#xff0c;通過學習傳統架構、集群架構以及私有云基礎架構的相關知識&#xff0c;認識企業從傳統 IT 基 礎架構到私有云基礎架構轉型的必要性。…

Linux 系統不同分類的操作命令區別

Linux 系統有多種發行版,每種發行版都有其獨特的操作命令和工具。以下是一些常見的分類及其操作命令的區別: 1. 基于 Red Hat 的發行版 (RHEL, CentOS, Fedora) 1.1 包管理 安裝軟件包: bash復制 sudo yum install <package> 更新軟件包: bash復制 sudo yum update…

?PLC數據類型和?C#數據類型的數據類型映射表

數據類型映射表 ?PLC數據類型?C#數據類型讀取方式?補充說明BitboolDBX布爾值BytebyteDBB單字節無符號整數WordushortDBW16位無符號整數DWorduintDBD32位無符號整數Intshort16位有符號整數DIntint32位有符號整數RealfloatDBR單精度浮點數LRealdoubleDBL雙精度浮點數Stringstr…

windows部署spleeter 版本2.4.0:分離音頻的人聲和背景音樂

windows部署spleeter 版本2.4.0&#xff1a;分離音頻的人聲和背景音樂 一、Spleeter 是什么&#xff1f; Spleeter 是由法國音樂流媒體公司 Deezer 開發并開源的一款基于深度學習的音頻分離工具。它能夠將音樂中的不同音軌&#xff08;如人聲、鼓、貝斯、鋼琴等&#xff09;分…

QTS單元測試框架

1.QTS單元測試框架介紹 目前QTS項目采用C/C語言,而CppUnit就是xUnit家族中的一員,它是一個專門面向C的單元測試框架。因此,QTS采用CppUnit測試框架是比較理想的選擇。 CppUnit按照層次來管理測試,最底層的就是TestCase,當有了幾個TestCase以后&#xff0c;可以將它們組織成Te…

dify + ollama + deepseek-r1+ stable-diffusion 構建繪畫智能體

故事背景 stable-diffusion 集成進 dify 后&#xff0c;我們搭建一個小智能體&#xff0c;驗證下文生圖功能 業務流程 #mermaid-svg-6nSwwp69eMizP6bt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6nSwwp69eMiz…

分享幾個論文校對相關的deepseek提示詞

論文校對 1.檢查這段文字是否有語法或風格錯誤&#xff1a;[在此處粘貼您的文本]。 2.審查我的[文件類型&#xff0c;例如&#xff0c;“論文”]中的這一段落是否有語法或風格錯誤&#xff1a;[在此處粘貼您的文本]。 3.請審查我關于[具體主題&#xff0c;例如&#xff0c;…

【極光 Orbit?STC8A-8H】02. STC8 單片機工程模板創建

【極光 Orbit?STC8A-8H】02. STC8 單片機工程模板創建 七律 單片機 小小芯片大乾坤&#xff0c;集成世界在其中。 初學雖感千重難&#xff0c;實踐方知奧妙通。 今天的講法和過去不同&#xff0c;直接來一個多文件模塊化的工程模板創建&#xff0c;萬事開頭難&#xff0c;…

mac安裝nvm=>node=>nrm

下載并安裝 NVM 運行以下命令下載并安裝 NVM&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash 配置環境變量 vim ~/.zshrc 按 i 將如下代碼復制進去&#xff0c;controlc &#xff0c;再按 :wq完成編輯 export NVM_DIR…

K8S學習之基礎十一:k8s中容器鉤子

容器鉤子 容器鉤子分為post-start和pre-stop post-start&#xff1a;容器啟動后執行的命令 pre-stop&#xff1a;容器關閉前執行的命令&#xff0c;可用于優雅關閉 # 分別定義兩個鉤子&#xff0c;啟動pod后更新index.html&#xff0c;關閉pod前正常關閉服務 vi post-pre.…

K8s 1.27.1 實戰系列(三)安裝網絡插件

Kubernetes 的網絡插件常見的有 Flannel 和 Calico ,這是兩種主流的 CNI(容器網絡接口)解決方案,它們在設計理念、實現方式、性能特征及適用場景上有顯著差異。以下是兩者的綜合對比分析: 一、Flannel 和 Calico 1. 技術基礎與網絡實現 Flannel 核心機制:基于 Overlay …

【五.LangChain技術與應用】【24.LangChain RAG文本向量化與存儲:智能檢索的核心技術】

凌晨三點,北京中關村的某棟辦公樓依然燈火通明。28歲的算法工程師小李盯著屏幕上的代碼,突然拍案而起:"終于成了!"他開發的智能客服系統在連續失敗78次后,首次準確識別出用戶"我想換個能打游戲的便宜手機"的真實需求——需要兼顧游戲性能和價格的機型…

深度學習五大模型:CNN、Transformer、BERT、RNN、GAN詳細解析

卷積神經網絡&#xff08;Convolutional Neural Network, CNN&#xff09; 原理 &#xff1a;CNN主要由卷積層、池化層和全連接層組成。卷積層通過卷積核在輸入數據上進行卷積運算&#xff0c;提取局部特征&#xff1b;池化層則對特征圖進行下采樣&#xff0c;降低特征維度&…

特征分解(Eigen decomposition)在深度學習中的應用與理解

特征分解在深度學習中的應用與理解 特征分解&#xff08;Eigendecomposition&#xff09;是線性代數中的一個核心工具&#xff0c;在深度學習領域有著廣泛的應用&#xff0c;尤其是在涉及矩陣操作和概率模型時。對于研究者來說&#xff0c;理解特征分解不僅有助于掌握數學基礎…