Tomcat 快速入门

版本说明
本文使用 Tomcat 版本为 Tomcat 8.5.24。
Tomcat 8.5 要求 JDK 版本为 1.7 以上。

简介

Tomcat 是什么

Tomcat 是由 Apache 开发的一个 Servlet 容器,实现了对 Servlet 和 JSP 的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。
由于 Tomcat 本身也内含了一个 HTTP 服务器,它也可以被视作一个单独的 Web 服务器。但是,不能将 Tomcat 和 Apache HTTP 服务器混淆,Apache HTTP 服务器是一个用 C 语言实现的 HTTP Web 服务器;这两个 HTTP web server 不是捆绑在一起的。Tomcat 包含了一个配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。

Tomcat 重要目录

  • /bin - Tomcat 脚本存放目录(如启动、关闭脚本)。 .sh 文件用于 Unix 系统; .bat 文件用于 Windows 系统。
  • /conf - Tomcat 配置文件目录。
  • /logs - Tomcat 默认日志目录。
  • /webapps - webapp 运行的目录。

    web 工程发布目录结构

    一般 web 项目路径结构 `` |-- webapp # 站点根目录 |-- META-INF # META-INF 目录 |— MANIFEST.MF # 配置清单文件 |— WEB-INF # WEB-INF 目录 | |— classes # class文件目录 | | |— .class # 程序需要的 class 文件 | | `— .xml # 程序需要的 xml 文件 | |— lib # 库文件夹 | | -- *.jar # 程序需要的 jar 包 |— web.xml # Web应用程序的部署描述文件 |— # 自定义的目录 |— # 自定义的资源文件
  1. **webapp:**工程发布文件夹。其实每个 war 包都可以视为 webapp 的压缩包。<br />**META-INF:**META-INF 目录用于存放工程自身相关的一些信息,元文件信息,通常由开发工具,环境自动生成。<br />**WEB-INF:**Java web应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。<br />**/WEB-INF/classes**:存放程序所需要的所有 Java class 文件。<br />**/WEB-INF/lib:**存放程序所需要的所有 jar 文件。<br />**/WEB-INF/web.xml**:web 应用的部署配置文件。它是工程中最重要的配置文件,它描述了 servlet 和组成应用的其它组件,以及应用初始化参数、安全管理约束等。
  2. <a name="eQr3U"></a>
  3. ## 安装
  4. **前提条件**<br />Tomcat 8.5 要求 JDK 版本为 1.7 以上。<br />进入 [Tomcat 官方下载地址](https://tomcat.apache.org/download-80.cgi) 选择合适版本下载,并解压到本地。<br />**Windows**<br />添加环境变量 CATALINA_HOME ,值为 Tomcat 的安装路径。<br />进入安装目录下的 bin 目录,运行 startup.bat 文件,启动 Tomcat<br />**Linux / Unix**<br />下面的示例以 8.5.24 版本为例,包含了下载、解压、启动操作。

下载解压到本地

wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz tar -zxf apache-tomcat-8.5.24.tar.gz

启动 Tomcat

./apache-tomcat-8.5.24/bin/startup.sh

  1. 启动后,访问 [http://localhost:8080](http://localhost:8080) ,可以看到 Tomcat 安装成功的测试页面。<br />![](https://cdn.nlark.com/yuque/0/2022/png/27069856/1648540557212-fcb720de-c3fa-4a2e-a24b-4d1590a4d674.png#clientId=u0c37189a-4564-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=ucec4a2b0&margin=%5Bobject%20Object%5D&originHeight=883&originWidth=1195&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u8f8b09d3-9d0c-41cf-9ea8-aa8e438d6ab&title=)
  2. <a name="pH4xH"></a>
  3. ## 配置
  4. 本节将列举一些重要、常见的配置项。详细的 Tomcat8 配置可以参考 [Tomcat 8 配置官方参考文档](http://tomcat.apache.org/tomcat-8.5-doc/config/index.html) 。
  5. <a name="Eag1e"></a>
  6. ### Server
  7. Server 元素表示整个 Catalina servlet 容器。<br />因此,它必须是 conf/server.xml 配置文件中的根元素。它的属性代表了整个 servlet 容器的特性。<br />**属性表**
  8. | 属性 | 描述 | 备注 |
  9. | --- | --- | --- |
  10. | className | 这个类必须实现org.apache.catalina.Server接口。 | 默认 org.apache.catalina.core.StandardServer |
  11. | address | 服务器等待关机命令的TCP / IP地址。如果没有指定地址,则使用localhost | |
  12. | port | 服务器等待关机命令的TCP / IP端口号。设置为-1以禁用关闭端口。 | |
  13. | shutdown | 必须通过TCP / IP连接接收到指定端口号的命令字符串,以关闭Tomcat | |
  14. <a name="BAovn"></a>
  15. ### Service
  16. Service元素表示一个或多个连接器组件的组合,这些组件共享一个用于处理传入请求的引擎组件。Server 中可以有多个 Service。<br />**属性表**
  17. | 属性 | 描述 | 备注 |
  18. | --- | --- | --- |
  19. | className | 这个类必须实现org.apache.catalina.Service接口。 | 默认 org.apache.catalina.core.StandardService |
  20. | name | 此服务的显示名称,如果您使用标准 Catalina 组件,将包含在日志消息中。与特定服务器关联的每个服务的名称必须是唯一的。 | |
  21. **实例 - conf/server.xml 配置文件示例**

<?xml version=”1.0” encoding=”UTF-8”?>

  1. <a name="XjQEp"></a>
  2. ### Executor
  3. Executor表示可以在Tomcat中的组件之间共享的线程池。<br />**属性表**
  4. | 属性 | 描述 | 备注 |
  5. | --- | --- | --- |
  6. | className | 这个类必须实现org.apache.catalina.Executor接口。 | 默认 org.apache.catalina.core.StandardThreadExecutor |
  7. | name | 线程池名称。 | 要求唯一, 供Connector元素的executor属性使用 |
  8. | namePrefix | 线程名称前缀。 | |
  9. | maxThreads | 最大活跃线程数。 | 默认200 |
  10. | minSpareThreads | 最小活跃线程数。 | 默认25 |
  11. | maxIdleTime | 当前活跃线程大于minSpareThreads时,空闲线程关闭的等待最大时间。 | 默认60000ms |
  12. | maxQueueSize | 线程池满情况下的请求排队大小。 | 默认Integer.MAX_VALUE |
org.apache.tomcat.embed tomcat-embed-core 8.5.24
  1. 添加 SimpleEmbedTomcatServer.java 文件,内容如下:

import java.util.Optional; import org.apache.catalina.startup.Tomcat;

public class SimpleTomcatServer { private static final int PORT = 8080; private static final String CONTEXT_PATH = “/javatool-server”;

  1. public static void main(String[] args) throws Exception {
  2. // 设定 profile
  3. Optional<String> profile = Optional.ofNullable(System.getProperty("spring.profiles.active"));
  4. System.setProperty("spring.profiles.active", profile.orElse("develop"));
  5. Tomcat tomcat = new Tomcat();
  6. tomcat.setPort(PORT);
  7. tomcat.getHost().setAppBase(".");
  8. tomcat.addWebapp(CONTEXT_PATH, getAbsolutePath() + "src/main/webapp");
  9. tomcat.start();
  10. tomcat.getServer().await();
  11. }
  12. private static String getAbsolutePath() {
  13. String path = null;
  14. String folderPath = SimpleEmbedTomcatServer.class.getProtectionDomain().getCodeSource().getLocation().getPath()
  15. .substring(1);
  16. if (folderPath.indexOf("target") > 0) {
  17. path = folderPath.substring(0, folderPath.indexOf("target"));
  18. }
  19. return path;
  20. }

}

  1. 成功后,可以访问 [http://localhost:8080/javatool-server](http://localhost:8080/javatool-server) 。<br />**说明**<br />本示例是使用 org.apache.tomcat.embed 启动嵌入式 Tomcat 的最简示例。<br />这个示例中使用的是 Tomcat 默认的配置,但通常,我们需要对 Tomcat 配置进行一些定制和调优。为了加载配置文件,启动类就要稍微再复杂一些。这里不想再贴代码,有兴趣的同学可以参考:<br />[示例项目](https://github.com/dunwu/java-stack/tree/master/codes/javatool/server)
  2. <a name="vPJIJ"></a>
  3. #### 使用 maven 插件启动(不推荐)
  4. 不推荐理由:这种方式启动 maven 虽然最简单,但是有一个很大的问题是,真的很久很久没发布新版本了(最新版本发布时间:2013-11-11)。且貌似只能找到 Tomcat6 Tomcat7 插件。<br />**使用方法**<br />在 pom.xml 中引入插件
org.apache.tomcat.maven tomcat7-maven-plugin 2.2 8080 /${project.artifactId} UTF-8

``` 运行 mvn tomcat7:run 命令,启动 Tomcat。
成功后,可以访问 http://localhost:8080/xxx (xxx 是 ${project.artifactId} 指定的项目名)。

IDE 插件

常见 Java IDE 一般都有对 Tomcat 的支持。
以 Intellij IDEA 为例,提供了 Tomcat and TomEE Integration 插件(一般默认会安装)。
使用步骤

  • 点击 Run/Debug Configurations > New Tomcat Server > local ,打开 Tomcat 配置页面。
  • 点击 Confiure… 按钮,设置 Tomcat 安装路径。
  • 点击 Deployment 标签页,设置要启动的应用。
  • 设置启动应用的端口、JVM 参数、启动浏览器等。
  • 成功后,可以访问 http://localhost:8080/(当然,你也可以在 url 中设置上下文名称)。

Tomcat快速入门 - 图1
说明
个人认为这个插件不如 Eclipse 的 Tomcat 插件好用,Eclipse 的 Tomcat 插件支持对 Tomcat xml 配置文件进行配置。而这里,你只能自己去 Tomcat 安装路径下修改配置文件。

资料