Tomcat

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. 选型建议

  1. 个人学习 / 小型项目 :优先选 Tomcat,配置简单、资料丰富,适配 90% 以上的轻量场景
  2. 微服务 / 嵌入式场景 :选 Jetty 或 Spring Boot 内置的 Tomcat(默认),启动快、资源占用少
  3. 中大型开源项目 :选 JBoss(WildFly),无需商业授权,同时满足分布式、事务等企业级需求
  4. 大型商业 / 核心系统 :选 WebLogicWebSphere,虽需付费,但提供企业级技术支持、稳定性和安全性更有保障

案例:

部署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界面,所以不用输入密码

相关推荐
sheji34162 小时前
【开题答辩全过程】以 J2EE应用于母婴健康管理系统的开发与实施为例,包含答辩的问题和答案
java·java-ee
tuokuac3 小时前
MyBatis“别名扫描”功能
java·mybatis
爱隐身的官人3 小时前
Tomcat 相关漏洞扫描器(一)
python·web安全·tomcat
艾莉丝努力练剑3 小时前
【编码表 && STL】C++编程基石:从字符编码表到STL标准库的完整入门指南
java·linux·c++
Moshow郑锴3 小时前
IDEA/WebStorm 卡顿问题与启动参数调优指南
java·jvm·intellij-idea·webstorm
努力也学不会java3 小时前
【设计模式】中介者模式
java·设计模式·中介者模式
努力努力再努力wz3 小时前
【C++进阶系列】:位图和布隆过滤器(附模拟实现的源码)
java·linux·运维·开发语言·数据结构·c++
Yeats_Liao3 小时前
Java网络编程(三):NIO核心组件Channel通道详解
java·网络·nio
Yeats_Liao3 小时前
Java网络编程(六):NIO vs BIO性能对比与场景选择
java·网络·nio