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 更加轻量级,适合中小型应用。
  • 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 17Tomcat 10.x,建议使用 IDEA 2022.x 或 2023.x
  • 如果使用的是 JDK 8Tomcat 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 文件。
  • 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/ 目录下。
      • 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中流程

  1. 创建普通的Java项目
  2. 右键改项目,选择Add Frameworks Support
  3. 在Add Frameworks Support添加Web Application框架支持(注意版本问题)、
    • 如果是Tomcat10以上要用Web Application 5.0
    • 默认是4.0
    • 提升至5.0需要手动将Tomcat10的运行依赖加入该项目中
      • File--Project Structure--dependencies中手动添加后在选择版本支持
  4. 添加完框架支持后发现该项目中加入了web文件夹,web文件夹下就是Tomcat应用的文件格式
  5. 可以在web文件夹下创建相关的前端资源
  6. 如果需要手动添加依赖,需要在web \ WEB-INF文件夹下手动创建lib文件夹,需要将jar包添加到该文件夹下,并将该lib文件夹添加到该模块中的依赖路径中
  7. 构建项目
    • 找到最上方的Build,选择Build Artifacts构建该项目
    • 构建完成后生成out文件夹下的artifacts文件夹下就是标准的Tomcat应用
    • 构建过程会将java文件编译为class文件放入WEB-INF文件夹下的calsses文件夹中
    • 构建过程会将resource文件下的配置问价也放入WEB-INF文件夹下的calsses文件夹中
  8. 根据IDEA中的Tomcat配置访问端口等信息
    • 运行按钮旁边下拉框中选择Edit Configurations
    • 点加号增加一个Local的Tomcat并配置相关信息
      • 在Deployment中选择需要运行的Tomcat应用,在Server中配置相关信息
  9. IDEA项目的部署方式
    • Exploded Artifact(展开式部署)
      • IDEA 会将项目的编译输出(如 target/classesout/production)和 Web 资源(如 src/main/webapp)复制到一个临时目录中。
      • 这个目录的结构类似于 WAR 文件解压后的内容,但不会打包成 WAR 文件。
      • Tomcat 会直接从这个目录加载应用。
      • Run/Debug Configurations 中,选择该 Artifact 作为部署源。
    • WAR 文件部署
      • IDEA 会将项目打包成一个 WAR 文件,然后将 WAR 文件复制到 Tomcat 的 webapps 目录下。
      • Tomcat 会自动解压 WAR 文件并加载应用。
  10. 部署Maven项目的注意点
    • 在使用Maven部署SpringMVC项目后无法访问该项目内的任何资源
    • 原因:Maven中的pom.xml文件中导入的依赖并不会导入到tomcat生成的WEB-INF下的lib文件夹内,需要手动导入
      • 解决方法
        • 打开Project Settings
        • 选择Artifacts
        • 该文件夹下可以查看部署项目的文件结构,在对应项目的WEB-INF目录下创建lib文件夹,并将pom.xml中的依赖导入进去即可
posted @ 2025-03-18 15:17  QAQ001  阅读(13)  评论(0)    收藏  举报