Tomcat
Tomcat
Tomcat基本概念
- Tomcat 是一个开源的 Java Servlet 容器 和 Web 服务器,由 Apache 软件基金会开发和维护。它是 Java EE(Java Platform, Enterprise Edition)规范中 Servlet 和 JSP(JavaServer Pages)技术的参考实现,广泛用于部署和运行基于 Java 的 Web 应用程序
- Tomcat 的核心功能
- Servlet 容器:
- Tomcat 实现了 Java Servlet 规范,能够运行 Servlet 和 JSP。
- Servlet 是 Java 编写的服务器端程序,用于处理客户端请求并生成动态内容。
- Web 服务器:
- Tomcat 可以作为一个独立的 Web 服务器,处理 HTTP 请求并返回静态或动态内容。
- 它支持 HTTP/1.1 协议,并可以通过扩展支持 HTTP/2。
- JSP 支持:
- Tomcat 支持 JSP 技术,允许开发者将 Java 代码嵌入 HTML 页面中,生成动态内容。
- 轻量级:
- 相比于完整的 Java EE 应用服务器(如 JBoss、WebLogic),Tomcat 更加轻量级,适合中小型应用。
- Servlet 容器:
- Tomcat 的核心组件包括:
- Server:代表整个 Tomcat 实例,包含一个或多个 Service。
- Service:包含一个 Connector 和一个 Engine,用于处理特定类型的请求。
- Connector:负责处理客户端连接和请求。常见的 Connector 包括 HTTP Connector 和 AJP Connector。
- Engine:处理所有来自 Connector 的请求,并返回响应。
- Host:代表一个虚拟主机,用于部署多个 Web 应用程序。
- Context:代表一个 Web 应用程序,包含多个 Servlet 和静态资源。
Tomcat的安装
JDK版本对应关系
| Tomcat 版本 | 最低 JDK 版本要求 | 说明 |
|---|---|---|
| Tomcat 10.x | JDK 11 或更高 | Tomcat 10 支持 Jakarta EE 9,需要 JDK 11 或更高版本。 |
| Tomcat 9.x | JDK 8 或更高 | Tomcat 9 支持 Java EE 8,兼容 JDK 8 及以上版本。 |
| Tomcat 8.x | JDK 7 或更高 | Tomcat 8 支持 Java EE 7,兼容 JDK 7 及以上版本。 |
| Tomcat 7.x | JDK 6 或更高 | Tomcat 7 支持 Java EE 6,兼容 JDK 6 及以上版本。 |
| Tomcat 6.x | JDK 5 或更高 | Tomcat 6 支持 Java EE 5,兼容 JDK 5 及以上版本。 |
IDEA版本对应关系
- 如果使用的是 JDK 17 和 Tomcat 10.x,建议使用 IDEA 2022.x 或 2023.x。
- 如果使用的是 JDK 8 和 Tomcat 9.x,可以使用 IDEA 2018.x 或更高版本。
配置环境变量
- CATALINA_HOME
- 对应地址
- 添加bin目录到path
startup命令启动tomcat- localhost:8080查看tomcat页面
Tomcat目录结构
目录结构
apache-tomcat-x.x.x/
├── bin/ # 可执行脚本和启动文件
├── conf/ # 配置文件
├── lib/ # 包含 Tomcat 和所有 Web 应用程序共享的库文件(JAR 文件)
├── logs/ # 日志文件
├── temp/ # 临时文件
├── webapps/ # Web 应用程序目录
├── work/ # 工作目录(存放运行时生成的文件)
└── LICENSE # 许可证文件
└── NOTICE # 通知文件
└── README.md # 说明文件
- 默认项目存放路径
- Tomcat 默认将 Web 应用程序(项目)存放在
webapps目录下。每个项目可以是一个目录或一个 WAR 文件。
- Tomcat 默认将 Web 应用程序(项目)存放在
- lib依赖
- tomcat所有的应用都会共享该lib文件夹下的所有依赖,如果项目中有需要其中的依赖(Servlet依赖)直接导入该tomcat依赖即可(该tomcat依赖默认为provided,编译时需要,打包时不进行打包)
- conf/web.xml
- 该web.xml是所有项目共享的web.xml文件,将一些公共的内容抽取到该文件中,包括一些文件类型对象的Content-Type
Tomcat项目结构
标准的Tomcat Web 项目通常具有以下目录结构:
MyWebApp/ // 项目根目录
│
├── WEB-INF/ // 存放配置文件和受保护的资源
│ ├── web.xml // Web 应用部署描述文件(可选,Servlet 3.0+ 支持注解)
│ ├── classes/ // 存放编译后的 Java 类文件(.class)
│ └── lib/ // 存放项目依赖的第三方库(.jar 文件)
│
├── META-INF/ // 存放元数据文件(可选)
│ └── MANIFEST.MF // 清单文件(可选)
│
└── index.jsp // Web 资源文件(如 JSP、HTML、CSS、JS、图片等)
-
WEB-INF/ 目录
WEB-INF是 Web 应用的核心目录,存放配置文件和受保护的资源。注意:WEB-INF目录下的内容对客户端是不可见的。web.xml:- Web 应用的部署描述文件(Deployment Descriptor)。
- 用于配置 Servlet、Filter、Listener 等组件。
- 在 Servlet 3.0 及以上版本中,
web.xml是可选的,可以使用注解(如@WebServlet)代替。
classes/:- 存放编译后的 Java 类文件(
.class)。 - 该目录用于存放编译后的 Java 类文件(
.class)和资源文件(如.properties、.xml等) - 例如,
com.example.MyServlet.class应该放在WEB-INF/classes/com/example/目录下。
- 存放编译后的 Java 类文件(
lib/:- 存放项目依赖的第三方库文件(
.jar)。 - Tomcat 会自动加载该目录下的 JAR 文件。
- 存放项目依赖的第三方库文件(
-
META-INF目录用于存放元数据文件,通常是可选的。 -
Web 资源文件(如 JSP、HTML、CSS、JS、图片等)可以直接放在项目根目录或子目录中。
-
在 Servlet 中直接返回
WEB-INF下的文件路径,客户端将无法访问该资源-
return "/WEB-INF/yourfile.jsp"; // 客户端无法访问
-
-
可以使用
ServletContext.getResourceAsStream()读取WEB-INF下的文件内容,然后将内容写入响应输出流-
InputStream inputStream = getServletContext().getResourceAsStream("/WEB-INF/yourfile.txt"); if (inputStream != null) { try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { String line; while ((line = reader.readLine()) != null) { response.getWriter().write(line + "\n"); } } } else { response.getWriter().write("File not found"); }
-
IDEA开发项目并部署到Tomcat中流程
- 创建普通的Java项目
- 右键改项目,选择Add Frameworks Support
- 在Add Frameworks Support添加Web Application框架支持(注意版本问题)、
- 如果是Tomcat10以上要用Web Application 5.0
- 默认是4.0
- 提升至5.0需要手动将Tomcat10的运行依赖加入该项目中
- File--Project Structure--dependencies中手动添加后在选择版本支持
- 添加完框架支持后发现该项目中加入了web文件夹,web文件夹下就是Tomcat应用的文件格式
- 可以在web文件夹下创建相关的前端资源
- 如果需要手动添加依赖,需要在web \ WEB-INF文件夹下手动创建lib文件夹,需要将jar包添加到该文件夹下,并将该lib文件夹添加到该模块中的依赖路径中
- 构建项目
- 找到最上方的Build,选择Build Artifacts构建该项目
- 构建完成后生成out文件夹下的artifacts文件夹下就是标准的Tomcat应用
- 构建过程会将java文件编译为class文件放入WEB-INF文件夹下的calsses文件夹中
- 构建过程会将resource文件下的配置问价也放入WEB-INF文件夹下的calsses文件夹中
- 根据IDEA中的Tomcat配置访问端口等信息
- 运行按钮旁边下拉框中选择Edit Configurations
- 点加号增加一个Local的Tomcat并配置相关信息
- 在Deployment中选择需要运行的Tomcat应用,在Server中配置相关信息
- IDEA项目的部署方式
- Exploded Artifact(展开式部署)
- IDEA 会将项目的编译输出(如
target/classes或out/production)和 Web 资源(如src/main/webapp)复制到一个临时目录中。 - 这个目录的结构类似于 WAR 文件解压后的内容,但不会打包成 WAR 文件。
- Tomcat 会直接从这个目录加载应用。
- 在 Run/Debug Configurations 中,选择该 Artifact 作为部署源。
- IDEA 会将项目的编译输出(如
- WAR 文件部署
- IDEA 会将项目打包成一个 WAR 文件,然后将 WAR 文件复制到 Tomcat 的
webapps目录下。 - Tomcat 会自动解压 WAR 文件并加载应用。
- IDEA 会将项目打包成一个 WAR 文件,然后将 WAR 文件复制到 Tomcat 的
- Exploded Artifact(展开式部署)
- 部署Maven项目的注意点
- 在使用Maven部署SpringMVC项目后无法访问该项目内的任何资源
- 原因:Maven中的pom.xml文件中导入的依赖并不会导入到tomcat生成的WEB-INF下的lib文件夹内,需要手动导入
- 解决方法
- 打开Project Settings
- 选择Artifacts
- 该文件夹下可以查看部署项目的文件结构,在对应项目的WEB-INF目录下创建lib文件夹,并将pom.xml中的依赖导入进去即可
- 解决方法

浙公网安备 33010602011771号