Skip to content

Tomcat 服务器架构与 Web 应用部署

本文总结自 Java Web 阶段核心技术,涵盖 B/S 架构对比、主流 Web 服务器、Tomcat 目录结构、端口占用排查及三种项目部署方式。

1. Web 开发简介与架构对比

在现代网络应用中,主要存在两种软件架构模式:

架构模式全称经典案例优势劣势
C/S 架构Client/Server(客户端/服务器)QQ、暴风影音客户端可分担处理逻辑,服务器压力小,安全性相对较高必须下载并安装客户端,更新频繁且维护成本高
B/S 架构Browser/Server(浏览器/服务器)淘宝、京东、12306零客户端安装(只需浏览器),服务端统一更新,用户体验一致业务逻辑集中于服务端,对服务器硬件与吞吐压力较大

静态 Web 资源 vs 动态 Web 资源

  • 静态 Web 资源:HTML、CSS、JavaScript、图片等。浏览器可以直接解释并渲染。
  • 动态 Web 资源:Servlet、JSP、Spring MVC 等。数据由后端逻辑动态生成,先由服务器转换/渲染为 HTML 再输出给浏览器。

2. 常见 Web 服务器分类

Web 服务器是运行 Web 应用软件、处理 HTTP 请求的核心容器:

  • Tomcat (Apache):开源免费,开发与生产中应用最广泛的轻量级 Web 服务器,完美支持 Servlet/JSP 规范。
  • JBoss / WildFly:开源免费,支持全套 Java EE / Jakarta EE 规范(如 EJB、JTA 等)。
  • WebLogic (Oracle):商业收费,大型企业级应用服务器,具备强大的集群能力与高可用性。
  • WebSphere (IBM):商业收费,大型企业级应用服务器,广泛应用于金融、电信等巨型架构中。

3. Tomcat 目录结构详解

解压版的 Tomcat 根目录下包含以下核心目录:

tomcat/
├── bin/        # 包含启动 (startup.bat/sh) 与关闭 (shutdown.bat/sh) 的可执行脚本
├── conf/       # 配置文件目录(核心文件为 server.xml 与 web.xml)
├── lib/        # Tomcat 服务器运行所需的公共 JAR 包
├── logs/       # 运行日志文件(如 catalina.out、localhost_access_log)
├── temp/       # 运行过程中产生的临时文件
├── webapps/    # Web Applications 目录,存放部署的 Web 应用项目
└── work/       # JSP 编译产生的 .java 和 .class 字节码临时文件目录

4. 常见启动问题与端口排查

4.1 窗口一闪而过

  • 原因:没有正确配置 JDK 环境变量 JAVA_HOME
  • 解决:确保系统环境变量中配置了 JAVA_HOME 且指向正确的 JDK 安装路径。

4.2 端口被占用 (JVM_Bind)

  • 报错java.net.BindException: Address already in use: JVM_Bind
  • 解决步骤
    1. 排查占用进程:在终端运行命令查询占用端口(例如 8080 或 80):
      bash
      netstat -ano | findstr "8080"
    2. 结束进程:根据输出的 PID,在任务管理器中结束对应进程,或通过命令行结束:
      cmd
      taskkill /F /PID <进程PID>
    3. 修改配置文件端口:打开 tomcat/conf/server.xml,修改 HTTP Connector 的端口号(如改为 808080):
      xml
      <Connector port="80" protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="8443" />

      注意80 为 HTTP 协议的默认端口,访问时可忽略端口号。若 80 被系统服务(如 Windows IIS)占用,可在系统服务中禁用 IIS 或将 Tomcat 修改为其他端口。


5. 项目部署的三种方式

方式一:直接放入 webapps 目录(最常用)

webapps/ 目录下创建一个文件夹(文件夹名即为项目的虚拟路径/Context Path),并将静态或动态资源放进去。

动态 Web 项目在 webapps/项目名/ 下的推荐结构:

webapps/my-app/
├── index.html
├── css/
├── js/
└── WEB-INF/              # 受保护目录,浏览器无法直接访问
    ├── web.xml           # 核心配置文件(包含文档声明与 Servlet 映射)
    ├── classes/          # 编译后的 .class 文件
    └── lib/              # 项目依赖的第三方 JAR 包

方式二:在 conf/server.xml 中配置 <Context>

无需将项目复制到 webapps,可以指向本地任意磁盘路径。在 server.xml<Host> 节点内添加:

xml
<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    <!-- path 为虚拟访问路径,docBase 为真实的磁盘绝对路径 -->
    <Context path="/oa" docBase="C:/projects/oa" />
</Host>

方式三:通过 conf/Catalina/localhost/ 独立 XML 配置(推荐,低耦合)

为避免直接修改 server.xml 造成配置混乱,可在 tomcat/conf/Catalina/localhost/ 目录下新建一个独立 XML 文件(如 hello.xml):

xml
<!-- hello.xml 文件内容 -->
<Context docBase="D:/my_project/backend" />
  • 访问路径:文件名即为虚拟路径。例如文件名为 hello.xml,则访问路径为 http://localhost:8080/hello

基于 VitePress 构建 | 技术知识库