Tomcat是Apache软件基金会Jakarta项目下的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。因为它技术先进、性能稳定,而且完全免费,所以深受Java爱好者的喜爱,并得到了部分软件开发商的认可,是目前比较流行的Web应用服务器之一。简单来说,Tomcat就是一个运行Java Web程序的容器,你写的Servlet、JSP等代码,最终都要交给它来加载和执行。

一、Tomcat到底是什么
从严格意义上讲,Tomcat是一个Servlet容器,也是一个JSP容器。它实现了Servlet和JSP规范,能够接收客户端发来的HTTP请求,把请求交给对应的Web应用处理,再把处理结果返回给客户端浏览器。可以这样理解:你的Java Web代码本身只是一个被压缩打包的war文件或者一个目录,它没办法自己监听端口、解析HTTP协议,这些底层工作全部由Tomcat代劳。
Tomcat的架构由一系列嵌套的组件组成,最外层是Server,代表整个Tomcat实例;Server里面包含一个或多个Service,每个Service由一个Connector连接器和若干个Engine组成。Connector负责监听端口、接收和解析请求,Engine则代表引擎,处理请求的路由。Engine下面是Host虚拟主机,Host下面是Context,一个Context就对应一个Web应用。这套层级结构在server.xml配置文件中体现得非常清晰。
Tomcat的运行需要JDK的支持。不同版本的Tomcat对Java版本有不同要求,比如Tomcat 9需要Java 8及以上,Tomcat 10则要求Java 11起步,并且Tomcat 10之后包名从javax变成了jakarta,这一点在项目迁移时尤其要注意,否则项目部署后会出现类找不到的异常。
二、Tomcat有什么用,和Nginx、Apache有什么区别
Tomcat最主要的用途就是部署和运行Java Web应用。在传统的开发流程中,开发者把项目打成war包,丢进Tomcat的webapps目录,Tomcat会自动解压并加载这个应用,用户就能通过浏览器访问了。此外,Tomcat也常被用作开发和调试工具,IDEA、Eclipse等集成开发环境内嵌的其实就是一个Tomcat。
很多人容易把Tomcat和Apache HTTP Server、Nginx混淆。Apache和Nginx本质上是静态的HTTP服务器(Nginx也可以做反向代理),它们擅长处理静态资源和高并发连接,但不能直接运行Servlet。而Tomcat是应用服务器,强项是执行Java程序。实际生产环境中,常见的做法是把Nginx放在最前面做反向代理和负载均衡,处理静态文件请求,把动态请求转发给后端的Tomcat处理,两者配合而不是互相替代。
和WebLogic、WebSphere这类商业应用服务器相比,Tomcat功能相对精简,没有EJB等企业级特性的完整支持,但正因如此它更轻量、启动更快、占用资源更少,对于绝大多数基于Spring MVC、Spring Boot构建的应用来说完全够用。Spring Boot更是直接内嵌了Tomcat,让开发者一个jar包就能跑起整个Web服务。
三、Tomcat的安装与项目部署步骤
安装Tomcat之前要先安装JDK并配置JAVA_HOME环境变量,否则启动脚本会因为找不到Java运行环境而直接闪退。到Apache Tomcat官网下载对应版本的压缩包,解压到本地目录即可,例如解压到D:\tomcat\目录下,无需额外安装步骤。
# Windows下启动和关闭 D:\tomcat\bin\startup.bat D:\tomcat\bin\shutdown.bat # Linux下启动和关闭 ./bin/startup.sh ./bin/shutdown.sh
启动成功后访问http://127.0.0.1:8080,看到Tomcat的欢迎页面就说明服务已经正常运行。部署项目有两种常见方式:第一种是把war包直接放到webapps目录下,重启后自动解压;第二种是在conf目录的server.xml中配置Context标签,指定项目路径,这种方式不需要挪动文件位置,适合项目放在外部目录的场景。此外还可以在conf\Catalina\localhost目录下新建一个xml文件来配置虚拟路径,三种方式各有优劣,按需选择即可。
需要注意目录权限的问题。如果你下载的是zip包解压使用,bin目录下的脚本可能没有执行权限,Linux下需要先执行chmod命令赋权。另外,Linux系统建议使用专门的普通用户运行Tomcat,不要用root账户,可以降低安全风险。
四、常见问题与注意事项
第一个常见问题是启动闪退或者一闪而过。多数情况是环境变量配置错误,比如JAVA_HOME路径末尾多加了分号,或者JDK版本与Tomcat版本不匹配。可以在cmd窗口中直接运行catalina.bat run命令,这样错误信息会停留在控制台上,方便定位原因。
第二个问题是端口冲突。Tomcat默认占用8080端口,如果被其他程序占用会报端口被绑定的异常。可以用命令查占用情况,也可以直接修改conf\server.xml中的Connector标签,把port属性改成其他端口比如8888:
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />第三个问题是控制台中文乱码,这是Windows下的高频问题。原因是Tomcat默认使用UTF-8输出日志,而cmd窗口默认编码是GBK。解决办法是修改conf\logging.properties文件,把其中的UTF-8改成GBK,或者把cmd窗口编码改成65001,两种方法任选其一。
最后还有几点注意事项值得提醒:修改server.xml后需要重启Tomcat才能生效;生产环境务必关闭manager管理页面,或者设置强密码,否则容易被恶意利用;内存不足时可以调整catalina.bat中的JVM参数,比如设置-Xms和-Xmx来控制堆内存大小;部署多个应用时注意不同Context的path不能冲突。掌握这些细节,日常使用Tomcat基本就不会踩大坑了。
TomcatJava Web服务器Servlet容器修改时间:2026-09-09 18:00:47