Tomcat
一、Tomcat 服务器:核心解析
Tomcat 全称 Apache Tomcat ,是由 Apache 软件基金会开发的开源 Java Web 服务器,核心定位是 Servlet/JSP 容器,是 Java Web 开发与轻量级部署的首选工具
1. 核心定位
- 本质 :轻量级 Java Web 应用服务器,同时也是 Servlet 容器 (Servlet 是 Java 处理 Web 请求的核心组件)和 JSP 引擎(JSP 最终会编译为 Servlet 执行)
- 角色:作为 "中间件",连接客户端(浏览器)与 Java 后端程序,负责接收 HTTP 请求、调用对应的 Servlet/JSP 处理逻辑,最终将响应结果返回给客户端
2. 关键特性
- 开源免费:无商业授权成本,社区活跃,问题排查资源丰富
- 轻量级:安装包体积小(通常几十 MB)、配置简单、启动速度快,对服务器硬件资源要求低
- 兼容性:严格遵循 Java EE(现 Jakarta EE)规范,支持主流的 Servlet 版本(如 Servlet 4.0/5.0)和 JSP 版本,适配绝大多数 Java Web 框架(Spring、Spring Boot 等)
- 独立运行:虽早期是 Apache HTTP Server 的扩展,但目前可完全独立运行(自带 HTTP 服务功能),无需依赖 Apache 服务器即可处理 Web 请求
3. 运行依赖
Tomcat 本身由 Java 开发,因此运行必须依赖 JDK(Java Development Kit)------JDK 提供了 Java 程序运行所需的虚拟机(JVM)和核心类库
注意:仅安装 JRE(Java Runtime Environment)不足以支持 Tomcat 运行,因为 Tomcat 启动过程中需要 JDK 的编译工具(如
javac
)处理 JSP 编译
4. 与 Apache HTTP Server 的关系
很多初学者会混淆两者,核心区别与联系如下:
维度 | Apache HTTP Server | Tomcat |
---|---|---|
语言基础 | C 语言开发 | Java 语言开发 |
核心功能 | 处理静态资源(HTML、CSS、图片等) | 处理动态资源(Servlet、JSP、Java 逻辑) |
依赖关系 | 可独立运行,不依赖 Tomcat | 可独立运行,也可与 Apache 配合使用 |
配合场景 | 当需要高效处理静态资源时,可让 Apache 接收所有请求,再将动态请求(如 .jsp 、/servlet/* )转发给 Tomcat 处理,提升整体性能 |
二、Java Web 中间件:分类与对比
"中间件" 是连接客户端与后端业务系统的桥梁,负责处理通信、负载均衡、事务管理等通用能力,降低开发复杂度。你提到的 Tomcat、JBoss 等均属于 Java Web 中间件,核心用于运行 Java Web 应用,按量级和功能可分为 "轻量级" 和 "企业级" 两类
1. 中间件核心分类对比
名称 | 类型 | 开发者 / 厂商 | 核心特点 | 适用场景 |
---|---|---|---|---|
Tomcat | 轻量级 | Apache 软件基金会 | 开源免费、轻量简单、专注 Servlet/JSP 容器,功能精简 | 个人开发、中小型项目、开发调试、并发量较低的场景 |
Jetty | 轻量级 | Eclipse 基金会 | 比 Tomcat 更轻量、启动更快、可嵌入式(如嵌入 Spring Boot 内置服务器) | 示例项目、嵌入式场景、轻量微服务 |
JBoss(WildFly) | 企业级 | Red Hat | 开源免费、支持完整 Java EE 规范(如 EJB、JMS),功能强大且可扩展 | 中大型企业项目、需要分布式 / 事务支持的场景 |
WebLogic | 企业级(商业) | Oracle | 闭源商业软件、支持全套 Java EE 规范、性能强、提供完善的监控 / 运维 / 集群能力 | 大型商业项目、金融 / 电信等核心系统 |
WebSphere | 企业级(商业) | IBM | 闭源商业软件、稳定性极强、适配 IBM 生态,支持高并发 / 高可用 | 大型企业级应用、对稳定性要求极高的核心系统 |
2. 选型建议
- 个人学习 / 小型项目 :优先选 Tomcat,配置简单、资料丰富,适配 90% 以上的轻量场景
- 微服务 / 嵌入式场景 :选 Jetty 或 Spring Boot 内置的 Tomcat(默认),启动快、资源占用少
- 中大型开源项目 :选 JBoss(WildFly),无需商业授权,同时满足分布式、事务等企业级需求
- 大型商业 / 核心系统 :选 WebLogic 或 WebSphere,虽需付费,但提供企业级技术支持、稳定性和安全性更有保障
案例:
部署tomcat:
关闭防火墙和selinux 略
配置本地yum仓库:
[root@server ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
[root@server ~]# cd /etc/yum.repos.d/
[root@server yum.repos.d]# ls
sy.repo
[root@server yum.repos.d]# cat sy.repo
[aa]
name=aa1
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@server ~]# yum -y install java-11-openjdk
上传压缩包:
[root@server ~]# rz -E
rz waiting to receive.
解压tomcat到/usr/local/目录下:
[root@server ~]# tar -xzvf apache-tomcat-10.0.23.tar.gz -C /usr/local/
[root@server ~]# cd /usr/local/
[root@server local]# ln -s apache-tomcat-10.0.23/ tomcat
[root@server local]# ll
total 0
drwxr-xr-x 9 root root 220 Sep 24 16:26 apache-tomcat-10.0.23
drwxr-xr-x. 2 root root 6 Apr 11 2018 bin
drwxr-xr-x. 2 root root 6 Apr 11 2018 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 games
drwxr-xr-x 5 root root 42 Sep 23 20:28 haproxy
drwxr-xr-x. 2 root root 6 Apr 11 2018 include
drwxr-xr-x. 2 root root 6 Apr 11 2018 lib
drwxr-xr-x. 2 root root 6 Apr 11 2018 lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 libexec
drwxr-xr-x. 2 root root 6 Apr 11 2018 sbin
drwxr-xr-x. 5 root root 49 Jul 23 11:29 share
drwxr-xr-x. 2 root root 6 Apr 11 2018 src
lrwxrwxrwx 1 root root 22 Sep 24 16:27 tomcat -> apache-tomcat-10.0.23/
自定义一个Hello World的 java的测试网页:
[root@server local]# mkdir /usr/local/tomcat/webapps/test
[root@server local]# cd /usr/local/tomcat/webapps/test
[root@server test]# vim index.jsp
<html>
<head>
<title>test page</title>
</head>
<body>
<%
out.println("Hello World");
%>
</body>
~
启动tomcat:
[root@server ~]# cd /usr/local/tomcat/
[root@server 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
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
默认端口为8080
查看到有java和tomcat的进程,说明服务已经启动成功
[root@server tomcat]# ps -ef | grep tomcat
root 11068 1 12 16:42 pts/0 00:00:12 /usr/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 11119 10275 0 16:43 pts/0 00:00:00 grep --color=auto tomcat
测试访问
访问tomcat首页:http://192.168.100.10:8080

访问hello world测试页:http://192.168.100.10:8080/test/

访问Host Manager界面:
配置tomcat-users.xml文件,在行上面添加两行,设置角色,登录用户名和密码,角色名称只能是admin-gui 用户名和密码自定义
[root@syf ~]# vim /usr/local/tomcat/conf/tomcat-users.xml
<role rolename="admin-gui"/>
<user username="tomcat" password="123456" roles="admin-gui"/>
</tomcat-users>
~
配置host-manager/META-INF/context.xml文件,允许192.168.100.0/24网段访问,在allow字段后添加:
[root@syf ~]# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >
<CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
sameSiteCookies="strict" />
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\.168\.100\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
~
重启服务,先关服务,再启服务:
[root@syf ~]# /usr/local/tomcat/bin/catalina.sh stop
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
[root@syf ~]# /usr/local/tomcat/bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
登录网页测试登录Host Manager 输入对应的用户名和密码
用户名为tomcat,密码为123456



访问Server Status
编辑tomcat-users.xml:
[root@syf ~]# vim /usr/local/tomcat/conf/tomcat-users.xml
-->
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="123456" roles="admin-gui,manager-gui"/>
</tomcat-users>
~
编辑manager/META-INF/context.xml,在allow字段添加允许192.168.100.0/24网段访问:
[root@syf ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
-->
<Context antiResourceLocking="false" privileged="true" >
<CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
sameSiteCookies="strict" />
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\.168\.100\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
~
重启服务,先关服务,再启服务:
[root@syf ~]# /usr/local/tomcat/bin/catalina.sh stop
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
[root@syf ~]# /usr/local/tomcat/bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
登录网页,访问Server Status,用户名tomcat 密码123456



访问Manager App的时候就不需要密码了,因为访问了Server Status界面,所以不用输入密码
