萨瑞饨 发表于 2025-6-1 18:49:14

tomcat使用

前置知识

tomcat概念

Tomcat是由Java编写的一个开源的、轻量级的应用服务器,是Apache软件基金会的一个项目。它实现了Java Servlet、JavaServer Pages(JSP)和Java Expression Language(EL)等Java技术,用于支持在Java平台上运行的动态Web应用程序。Tomcat的全名是Apache Tomcat。
tomcat作用

Tomcat 是一个开源的 Java Servlet 容器,主要用于运行 Java Web 应用程序。
运行 Java Web 应用程序


[*]Servlet 和 JSP 支持
Tomcat 是 Java Servlet 和 JavaServer Pages(JSP)技术的官方实现。它能够处理基于 Servlet 和 JSP 的 Web 应用程序,使得开发者可以使用 Java 语言开发动态 Web 内容。例如,开发者可以创建一个基于 Servlet 的用户登录功能,当用户提交登录表单时,Servlet 可以处理用户的请求,验证用户名和密码,并根据验证结果返回相应的页面。
[*]Web 应用部署
它支持将 Java Web 应用程序打包为 WAR(Web Application Archive)文件进行部署。开发者只需将 WAR 文件放到 Tomcat 的 webapps 目录下,Tomcat 会自动解压并启动该应用。例如,一个电商网站的后端应用可以被打包为 WAR 文件,部署到 Tomcat 上,用户通过浏览器访问该网站时,Tomcat 会处理用户的请求并返回相应的商品页面。
提供 Web 服务器功能


[*]HTTP/HTTPS 服务
Tomcat 本身就是一个 Web 服务器,可以接收和处理 HTTP/HTTPS 请求。它可以配置为监听特定的端口(如默认的 8080 端口),接收用户的浏览器请求,并将处理后的结果(如 HTML 页面、图片等)返回给客户端。例如,用户在浏览器中输入一个基于 Tomcat 部署的网站的 URL,Tomcat 会根据请求的路径找到对应的资源并返回。
[*]静态资源服务
它能够提供静态资源(如 HTML 文件、CSS 文件、JavaScript 文件、图片等)的服务。当用户请求一个静态资源时,Tomcat 会从文件系统中找到对应的文件并发送给客户端。例如,一个简单的个人博客网站的页面样式文件(CSS 文件)可以通过 Tomcat 提供给用户。
开发和测试 Java Web 应用程序


[*]开发环境支持
对于 Java Web 开发者来说,Tomcat 是一个常用的开发环境。它提供了热部署功能,开发者在修改代码后,无需重新启动服务器即可看到修改后的效果。例如,开发者在开发一个基于 JSP 的新闻网站时,修改了新闻列表页面的 JSP 文件后,保存文件后刷新浏览器即可看到更新后的页面。
[*]集成开发环境(IDE)支持
Tomcat 可以与各种 Java IDE(如 Eclipse、IntelliJ IDEA 等)集成,方便开发者进行开发和调试。IDE 可以直接将项目部署到 Tomcat 中,并提供调试工具来帮助开发者查找和修复代码中的问题。
安装部署tomcat

环境信息

IP主机名Linux系统规格10.0.0.21tomcatUbuntu22.042c4gtomcat是由Java编写的,所以安装tomcat之前我们需要先安装jdk,我们这里使用jdk8和tomcat9.0.50版本
安装jdk

java由于被Oracle公司收购,所以下载jdk需要去Oracle官网下载 https://www.oracle.com/
但是在Oracle官方下载是需要收费的,我们可以选择下载open-jdk,下载地址:https://jdk.java.net/java-se-ri/8-MR6
# mkdir -p /app/tools && cd /app/tools
# wget https://download.java.net/openjdk/jdk8u44/ri/openjdk-8u44-linux-x64.tar.gz
# tar -xf openjdk-8u44-linux-x64.tar.gz
# ln -s /app/tools/java-se-8u44-ri/ /app/tools/jdk
# ll
total 210968
drwxr-xr-x 3 root root      4096 Apr4 13:15 ./
drwxr-xr-x 3 root root      4096 Apr4 13:03 ../
drwxr-xr-x 9 uucp143      4096 May 232024 java-se-8u44-ri/
lrwxrwxrwx 1 root root      27 Apr4 13:15 jdk -> /app/tools/java-se-8u44-ri//
-rw-r--r-- 1 root root 216015848 May 232024 openjdk-8u44-linux-x64.tar.gz
# cat >> /etc/profile <<EOF
export JAVA_HOME=/app/tools/jdk# 根据实际解压后的目录调整
export PATH=$JAVA_HOME/bin:$PATH
EOF
# source /etc/profile
# java -version
openjdk version "1.8.0_44"
OpenJDK Runtime Environment (build 1.8.0_44-b02)
OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)启动tomcat

# wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.50/bin/apache-tomcat-9.0.50.tar.gz
--2025-04-04 13:29:05--https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.50/bin/apache-tomcat-9.0.50.tar.gz
Resolving archive.apache.org (archive.apache.org)... 65.108.204.189, 2a01:4f9:1a:a084::2
Connecting to archive.apache.org (archive.apache.org)|65.108.204.189|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11507318 (11M)
Saving to: ‘apache-tomcat-9.0.50.tar.gz’

apache-tomcat-9.0.50.tar.gz                         100%[=================================================================================================================>]10.97M1.71MB/s    in 7.7s

2025-04-04 13:29:14 (1.42 MB/s) - ‘apache-tomcat-9.0.50.tar.gz’ saved

# tar -xf apache-tomcat-9.0.50.tar.gz
# ln -s `pwd`/apache-tomcat-9.0.50 `pwd`/tomcat
# ll
total 11252
drwxr-xr-x 3 root root   4096 Apr4 13:32 ./
drwxr-xr-x 4 root root   4096 Apr4 13:28 ../
drwxr-xr-x 9 root root   4096 Apr4 13:29 apache-tomcat-9.0.50/
-rw-r--r-- 1 root root 11507318 Jun 282021 apache-tomcat-9.0.50.tar.gz
lrwxrwxrwx 1 root root       38 Apr4 13:32 tomcat -> /app/tools/tomcat/apache-tomcat-9.0.50/出现上述进程和端口号表示tomcat启动成功,我们打开浏览器测试一下
http://10.0.0.21/8080

至此安装tomcat结束
tomcat目录结构

我们安装后发现tomcat的有很多目录,那这些目录有什么作用呢?
# cd tomcat/bin/
# ./startup.sh
Using CATALINA_BASE:   /app/tools/tomcat/tomcat
Using CATALINA_HOME:   /app/tools/tomcat/tomcat
Using CATALINA_TMPDIR: /app/tools/tomcat/tomcat/temp
Using JRE_HOME:      /app/tools/jdk
Using CLASSPATH:       /app/tools/tomcat/tomcat/bin/bootstrap.jar:/app/tools/tomcat/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
##检查Java进程
# ps -ef | grep java
root       14131       17 13:33 pts/0    00:00:01 /app/tools/jdk/bin/java -Djava.util.logging.config.file=/app/tools/tomcat/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 /app/tools/tomcat/tomcat/bin/bootstrap.jar:/app/tools/tomcat/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/app/tools/tomcat/tomcat -Dcatalina.home=/app/tools/tomcat/tomcat -Djava.io.tmpdir=/app/tools/tomcat/tomcat/temp org.apache.catalina.startup.Bootstrap start
root       14161    10810 13:33 pts/0    00:00:00 grep --color=auto java
#
##检查端口号
# ss -lntup | grep 8080
tcp   LISTEN 0      100                     *:8080            *:*    users:(("java",pid=14131,fd=56))bin目录

bin目录下放置了很多关于tomcat的可执行脚本
其中最为主要的有几个

[*]startup.sh:Linux中启动tomcat的脚本
[*]startup.bat:Windows中启动tomcat的脚本
[*]shutdown.sh:Linux中关闭tomcat的脚本
[*]shutdown.bat:Windows中关闭tomcat的脚本
[*]catalina.sh:Linux中tomcat的核心脚本文件,里面配置了tomcat的启动、关闭方式,以及tomcat的优化和jvm优化
[*]catalina.bat:Windows中Linux中tomcat的核心脚本文件,里面配置了tomcat的启动、关闭方式,以及tomcat的优化和jvm优化
# cd /app/tools/tomcat/tomcat
# ll
total 156
drwxr-xr-x 9 root root4096 Apr4 13:29 ./
drwxr-xr-x 3 root root4096 Apr4 13:32 ../
-rw-r----- 1 root root 18949 Jun 282021 BUILDING.txt
-rw-r----- 1 root root6210 Jun 282021 CONTRIBUTING.md
-rw-r----- 1 root root 57092 Jun 282021 LICENSE
-rw-r----- 1 root root2333 Jun 282021 NOTICE
-rw-r----- 1 root root3372 Jun 282021 README.md
-rw-r----- 1 root root6898 Jun 282021 RELEASE-NOTES
-rw-r----- 1 root root 16507 Jun 282021 RUNNING.txt
drwxr-x--- 2 root root4096 Apr4 13:29 bin/
drwx------ 3 root root4096 Apr4 13:33 conf/
drwxr-x--- 2 root root4096 Apr4 13:29 lib/
drwxr-x--- 2 root root4096 Apr4 13:33 logs/
drwxr-x--- 2 root root4096 Apr4 13:29 temp/
drwxr-x--- 7 root root4096 Jun 282021 webapps/
drwxr-x--- 3 root root4096 Apr4 13:33 work/conf目录

conf目录中主要存放了关于tomcat的配置文件

[*]server.xml

[*]配置了关于tomcat的http、https协议以及端口号
[*]站点管理目录(是否自动解压、自动部署)
[*]日志格式

[*]web.xml
辅助配置文件
# ll bin/
total 884
drwxr-x--- 2 root root   4096 Apr4 13:29 ./
drwxr-xr-x 9 root root   4096 Apr4 13:29 ../
-rw-r----- 1 root root34698 Jun 282021 bootstrap.jar
-rw-r----- 1 root root   1664 Jun 282021 catalina-tasks.xml
-rw-r----- 1 root root16840 Jun 282021 catalina.bat
-rwxr-x--- 1 root root25294 Jun 282021 catalina.sh*
-rw-r----- 1 root root   2123 Jun 282021 ciphers.bat
-rwxr-x--- 1 root root   1997 Jun 282021 ciphers.sh*
-rw-r----- 1 root root 207420 Jun 282021 commons-daemon-native.tar.gz
-rw-r----- 1 root root25357 Jun 282021 commons-daemon.jar
-rw-r----- 1 root root   2040 Jun 282021 configtest.bat
-rwxr-x--- 1 root root   1922 Jun 282021 configtest.sh*
-rwxr-x--- 1 root root   9100 Jun 282021 daemon.sh*
-rw-r----- 1 root root   2091 Jun 282021 digest.bat
-rwxr-x--- 1 root root   1965 Jun 282021 digest.sh*
-rw-r----- 1 root root   3606 Jun 282021 makebase.bat
-rwxr-x--- 1 root root   3382 Jun 282021 makebase.sh*
-rw-r----- 1 root root   3460 Jun 282021 setclasspath.bat
-rwxr-x--- 1 root root   3708 Jun 282021 setclasspath.sh*
-rw-r----- 1 root root   2020 Jun 282021 shutdown.bat
-rwxr-x--- 1 root root   1902 Jun 282021 shutdown.sh*
-rw-r----- 1 root root   2022 Jun 282021 startup.bat
-rwxr-x--- 1 root root   1904 Jun 282021 startup.sh*
-rw-r----- 1 root root46614 Jun 282021 tomcat-juli.jar
-rw-r----- 1 root root 425741 Jun 282021 tomcat-native.tar.gz
-rw-r----- 1 root root   4574 Jun 282021 tool-wrapper.bat
-rwxr-x--- 1 root root   5540 Jun 282021 tool-wrapper.sh*
-rw-r----- 1 root root   2026 Jun 282021 version.bat
-rwxr-x--- 1 root root   1908 Jun 282021 version.sh*server.xml配置文件详解

# ll conf/
total 244
drwx------ 3 root root   4096 Apr4 13:33 ./
drwxr-xr-x 9 root root   4096 Apr4 13:29 ../
drwxr-x--- 3 root root   4096 Apr4 13:33 Catalina/
-rw------- 1 root root13052 Jun 282021 catalina.policy
-rw------- 1 root root   7262 Jun 282021 catalina.properties
-rw------- 1 root root   1400 Jun 282021 context.xml
-rw------- 1 root root   1149 Jun 282021 jaspic-providers.xml
-rw------- 1 root root   2313 Jun 282021 jaspic-providers.xsd
-rw------- 1 root root   4144 Jun 282021 logging.properties
-rw------- 1 root root   7589 Jun 282021 server.xml
-rw------- 1 root root   2756 Jun 282021 tomcat-users.xml
-rw------- 1 root root   2558 Jun 282021 tomcat-users.xsd
-rw------- 1 root root 172359 Jun 282021 web.xmltomcat日志格式说明


[*]%h:客户端的IP地址
[*]%l:远程逻辑用户名(通常为空)。
[*]%u:远程用户(如果启用了身份验证)
[*]%t:访问时间
[*]%r:请求起始行。请求方法,请求uri
[*]%s:http状态码,例如200,404
[*]%b:发送给客户端的字节数
[*]&quot:双引号
logs目录

logs目录主要存放了关于tomcat的一些日志

[*]catalina.out:tomcat应用日志
[*]catalina.2025-04-04.log:切割日志,按照每天进行切割
[*]localhost_access_log.2025-04-04.txt :访问日志
# cat conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>


<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />


<GlobalNamingResources>
    <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>


<Service name="Catalina">

   

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

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"appBase="webapps"
            unpackWARs="true" autoDeploy="true">
      
      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />

      </Host>
    </Engine>
</Service>
</Server>webapps目录

webapps目录是tomcat的站点目录,要部署Java项目时,需要将Java的war包放在该目录下,其中ROOT目录是项目的根目录,放在ROOT目录下的项目访问时可以不用带路径,只需要http://ip:port即可访问,如果是在manager目录下,我们访问该项目需要http://ip:port/manager进行访问
# ll logs
total 32
drwxr-x--- 2 root root 4096 Apr4 13:33 ./
drwxr-xr-x 9 root root 4096 Apr4 13:29 ../
-rw-r----- 1 root root 5955 Apr4 13:33 catalina.2025-04-04.log
-rw-r----- 1 root root 5955 Apr4 13:33 catalina.out
-rw-r----- 1 root root    0 Apr4 13:33 host-manager.2025-04-04.log
-rw-r----- 1 root root408 Apr4 13:33 localhost.2025-04-04.log
-rw-r----- 1 root root711 Apr4 13:35 localhost_access_log.2025-04-04.txt
-rw-r----- 1 root root    0 Apr4 13:33 manager.2025-04-04.log案例:部署zrlog应用

在这里感谢zrlog的提供方:https://gitee.com/94fzb/zrlog
# ll webapps/
total 28
drwxr-x---7 root root 4096 Jun 282021 ./
drwxr-xr-x9 root root 4096 Apr4 13:29 ../
drwxr-x---3 root root 4096 Apr4 13:29 ROOT/
drwxr-x--- 15 root root 4096 Apr4 13:29 docs/
drwxr-x---7 root root 4096 Apr4 13:29 examples/
drwxr-x---6 root root 4096 Apr4 13:29 host-manager/
drwxr-x---6 root root 4096 Apr4 13:29 manager/访问zrlog->http://10.0.0.21:8080

这里需要配置数据库相关的连接,我们使用docker直接创建
#下载zrlog应用的war包
# mkdir /app/war && cd /app/war
# wget https://dl.zrlog.com/release/zrlog.war
--2025-04-04 14:20:17--https://dl.zrlog.com/release/zrlog.war
Resolving dl.zrlog.com (dl.zrlog.com)... 154.17.224.166
Connecting to dl.zrlog.com (dl.zrlog.com)|154.17.224.166|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10794045 (10M)
Saving to: ‘zrlog.war’

zrlog.war                                           100%[=================================================================================================================>]10.29M1.30MB/s    in 9.3s

2025-04-04 14:20:28 (1.11 MB/s) - ‘zrlog.war’ saved

#将tomcat原来的站点目录移走,做个备份
# mv /app/tools/tomcat/tomcat/webapps /app/tools/tomcat/tomcat/webapps_bak_20250404
# mkdir -p /app/tools/tomcat/tomcat/webapps
#将zrlog移动至站点目录,并重命名为ROOT.war
# mv /app/war/zrlog.war /app/tools/tomcat/tomcat/webapps/ROOT.war
#检查
# ll /app/tools/tomcat/tomcat/webapps/
total 10556
drwxr-xr-x3 root root   4096 Apr4 14:22 ./
drwxr-xr-x 10 root root   4096 Apr4 14:21 ../
drwxr-x---9 root root   4096 Apr4 14:22 ROOT/
-rw-r--r--1 root root 10794045 Jul 102024 ROOT.warzrlog中填写数据库相关信息,然后点击下一步
https://img2024.cnblogs.com/blog/3468887/202504/3468887-20250404143456431-911698266.png
填写网站信息,点击下一步,最后点击完成即可

哟哟哟~,我们的网站搭建完成了!!!

tomcat部署多实例

背景

当一台服务器的资源足够多,内存足够大,这个时候我们要充分考虑这台服务器的性能,所以可以选择在某一台服务器上部署多个tomcat实例
部署步骤

准备多个tomcat目录

一个tomcat目录对应一个tomcat实例,每个tomcat都有自己的独立目录,通过目录区分不同的tomcat
# docker run -d --name mysql_5.7 -p 3306:3306 --restart always -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1 docker.m.daocloud.io/mysql:5.7
fafca85377be4a37aaba52563bfe3b8e398a2fb1d8f51a856497cabbd33b6849
# docker ps -a
CONTAINER ID   IMAGE                                  COMMAND                  CREATED          STATUS                   PORTS                                                    NAMES
fafca85377be   docker.m.daocloud.io/mysql:5.7         "docker-entrypoint.s…"   54 seconds ago   Up 54 seconds            0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp   mysql_5.7

#进入容器创建数据库
# docker exec -it mysql_5.7 bash
bash-4.2# mysql -uroot -p1
mysql: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database zrlog;
Query OK, 1 row affected (0.00 sec)

mysql>修改端口

每个实例的端口号不能冲突,tomcat默认的端口号有三个,8080、8005、8443,我们要修改它们
# tar -xf apache-tomcat-9.0.50.tar.gz
# cp -r apache-tomcat-9.0.50 tomcat_8081
# cp -r apache-tomcat-9.0.50 tomcat_8082
# ll
total 222224
drwxr-xr-x 7 root root      4096 Apr4 20:58 ./
drwxr-xr-x 5 root root      4096 Apr4 14:47 ../
drwxr-xr-x 9 root root      4096 Apr4 20:57 apache-tomcat-9.0.50/
-rw-r--r-- 1 root root11507318 Apr4 20:57 apache-tomcat-9.0.50.tar.gz
drwxr-xr-x 9 root root      4096 Apr4 20:58 tomcat_8081/
drwxr-xr-x 9 root root      4096 Apr4 20:58 tomcat_8082/启动

#tomcat_8081实例
# sed-i 's#8005#8006#g' tomcat_8081/conf/server.xml
# sed-i 's#8080#8081#g' tomcat_8081/conf/server.xml
# sed-i 's#8443#8444#g' tomcat_8081/conf/server.xml

#tomcat_8082实例
# sed-i 's#8006#8007#g' tomcat_8082/conf/server.xml
# sed-i 's#8080#8082#g' tomcat_8082/conf/server.xml
# sed-i 's#8443#8445#g' tomcat_8082/conf/server.xml检查

# ./tomcat_8081/bin/startup.sh
Using CATALINA_BASE:   /app/tools/tomcat_8081
Using CATALINA_HOME:   /app/tools/tomcat_8081
Using CATALINA_TMPDIR: /app/tools/tomcat_8081/temp
Using JRE_HOME:      /app/tools/jdk
Using CLASSPATH:       /app/tools/tomcat_8081/bin/bootstrap.jar:/app/tools/tomcat_8081/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
# ./tomcat_8082/bin/startup.sh
Using CATALINA_BASE:   /app/tools/tomcat_8082
Using CATALINA_HOME:   /app/tools/tomcat_8082
Using CATALINA_TMPDIR: /app/tools/tomcat_8082/temp
Using JRE_HOME:      /app/tools/jdk
Using CLASSPATH:       /app/tools/tomcat_8082/bin/bootstrap.jar:/app/tools/tomcat_8082/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.访问测试

http://10.0.0.21:8081

http://10.0.0.21:8082


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: tomcat使用