Tomcat 快速入门

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应用程序的部署描述文件
    |-- <userdir>                  # 自定义的目录
    |-- <userfiles>                # 自定义的资源文件

webapp:工程发布文件夹。其实每个 war 包都可以视为 webapp 的压缩包。

META-INF:META-INF 目录用于存放工程自身相关的一些信息,元文件信息,通常由开发工具,环境自动生成。

WEB-INF:Java web应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。

/WEB-INF/classes:存放程序所需要的所有 Java class 文件。

/WEB-INF/lib:存放程序所需要的所有 jar 文件。

/WEB-INF/web.xml:web 应用的部署配置文件。它是工程中最重要的配置文件,它描述了 servlet 和组成应用的其它组件,以及应用初始化参数、安全管理约束等。

三、Tomcat配置

本节将列举一些重要、常见的配置项。详细的 Tomcat8 配置可以参考 Tomcat 8 配置官方参考文档

1.Server
 Server 元素表示整个 Catalina servlet 容器。
 因此,它必须是 `conf/server.xml` 配置文件中的根元素。它的属性代表了整个 servlet 容器的特性。

属性表

属性描述备注
className这个类必须实现org.apache.catalina.Server接口。默认 org.apache.catalina.core.StandardServer
address服务器等待关机命令的TCP / IP地址。如果没有指定地址,则使用localhost。
port服务器等待关机命令的TCP / IP端口号。设置为-1以禁用关闭端口。
shutdown必须通过TCP / IP连接接收到指定端口号的命令字符串,以关闭Tomcat。
2.Service
Service元素表示一个或多个连接器组件的组合,这些组件共享一个用于处理传入请求的引擎组件。Server 中可以有多个 Service。

属性表

属性描述备注
className这个类必须实现org.apache.catalina.Service接口。默认 org.apache.catalina.core.StandardService
name此服务的显示名称,如果您使用标准 Catalina 组件,将包含在日志消息中。与特定服务器关联的每个服务的名称必须是唯一的。

实例 - conf/server.xml 配置文件示例

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8080" shutdown="SHUTDOWN">
  <Service name="xxx">
  ...
  </Service>
</Server>
3.Executor
 Executor表示可以在Tomcat中的组件之间共享的线程池。

属性表

属性描述备注
className这个类必须实现org.apache.catalina.Executor接口。默认 org.apache.catalina.core.StandardThreadExecutor
name线程池名称。要求唯一, 供Connector元素的executor属性使用
namePrefix线程名称前缀。
maxThreads最大活跃线程数。默认200
minSpareThreads最小活跃线程数。默认25
maxIdleTime当前活跃线程大于minSpareThreads时,空闲线程关闭的等待最大时间。默认60000ms
maxQueueSize线程池满情况下的请求排队大小。默认Integer.MAX_VALUE
<Service name="xxx">
  <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="300" minSpareThreads="25"/>
</Service>
4.Connector
Connector代表连接组件。Tomcat 支持三种协议:HTTP/1.1、HTTP/2.0、AJP。

属性表

属性说明备注
asyncTimeoutServlet3.0规范中的异步请求超时默认30s
port请求连接的TCP Port设置为0,则会随机选取一个未占用的端口号
protocol协议. 一般情况下设置为 HTTP/1.1,这种情况下连接模型会在NIO和APR/native中自动根据配置选择
URIEncoding对URI的编码方式.如果设置系统变量org.apache.catalina.STRICT_SERVLET_COMPLIANCE为true,使用 ISO-8859-1编码;如果未设置此系统变量且未设置此属性, 使用UTF-8编码
useBodyEncodingForURI是否采用指定的contentType而不是URIEncoding来编码URI中的请求参数

以下属性在标准的Connector(NIO, NIO2 和 APR/native)中有效:

属性说明备注
acceptCount当最大请求连接maxConnections满时的最大排队大小默认100,注意此属性和Executor中属性maxQueueSize的区别.这个指的是请求连接满时的堆栈大小,Executor的maxQueueSize指的是处理线程满时的堆栈大小
connectionTimeout请求连接超时默认60000ms
executor指定配置的线程池名称
keepAliveTimeoutkeeAlive超时时间默认值为connectionTimeout配置值.-1表示不超时
maxConnections最大连接数连接满时后续连接放入最大为acceptCount的队列中. 对 NIO和NIO2连接,默认值为10000;对 APR/native,默认值为8192
maxThreads如果指定了Executor, 此属性忽略;否则为Connector创建的内部线程池最大值默认200
minSpareThreads如果指定了Executor, 此属性忽略;否则为Connector创建线程池的最小活跃线程数默认10
processorCache协议处理器缓存Processor对象的大小-1表示不限制.当不使用servlet3.0的异步处理情况下: 如果配置Executor,配置为Executor的maxThreads;否则配置为Connnector的maxThreads. 如果使用Serlvet3.0异步处理, 取maxThreads和maxConnections的最大值
5.Context
Context元素表示一个Web应用程序,它在特定的虚拟主机中运行。每个Web应用程序都基于Web应用程序存档(WAR)文件,或者包含相应的解包内容的相应目录,如Servlet规范中所述。

属性表

属性说明备注
altDDNameweb.xml部署描述符路径默认 /WEB-INF/web.xml
docBaseContext的Root路径和Host的appBase相结合, 可确定web应用的实际目录
failCtxIfServletStartFails同Host中的failCtxIfServletStartFails, 只对当前Context有效默认为false
logEffectiveWebXml是否日志打印web.xml内容(web.xml由默认的web.xml和应用中的web.xml组成)默认为false
pathweb应用的context path如果为根路径,则配置为空字符串(""), 不能不配置
privileged是否使用Tomcat提供的manager servlet
reloadable/WEB-INF/classes/ 和/WEB-INF/lib/ 目录中class文件发生变化是否自动重新加载默认为false
swallowOutputtrue情况下, System.out和System.err输出将被定向到web应用日志中默认为false
6.Host
 Host元素表示一个虚拟主机,它是一个服务器的网络名称(如“www.mycompany.com”)与运行Tomcat的特定服务器的关联。

属性表

属性说明备注
name名称用于日志输出
appBase虚拟主机对应的应用基础路径可以是个绝对路径, 或CATALINABASE相对路径||xmlBase|虚拟主机XML基础路径,里面应该有Contextxml配置文件|可以是个绝对路径,或CATALINABASE相对路径||xmlBase|虚拟主机XML基础路径,里面应该有Contextxml配置文件|可以是个绝对路径,或{CATALINA_BASE}相对路径
createDirs当appBase和xmlBase不存在时,是否创建目录默认为true
autoDeploy是否周期性的检查appBase和xmlBase并deploy web应用和context描述符默认为true
deployIgnore忽略deploy的正则
deployOnStartupTomcat启动时是否自动deploy默认为true
failCtxIfServletStartFails配置为true情况下,任何load-on-startup >=0的servlet启动失败,则其对应的Contxt也启动失败默认为false

四、启动

1.部署方式

这种方式要求本地必须安装 Tomcat 。

将打包好的 war 包放在 Tomcat 安装目录下的 webapps 目录下,然后在 bin 目录下执行 startup.sh ,Tomcat 会自动解压 webapps 目录下的 war 包。

成功后,可以访问 http://localhost:8080/xxx (xxx 是 war 包文件名)

注意 :以上步骤是最简单的示例。步骤中的 war 包解压路径、启动端口以及一些更多的功能都可以修改配置文件来定制 (主要是 `server.xml`或 `context.xml` 文件)。
2.嵌入式
1.API 方式

在 pom.xml 中添加依赖

<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-core</artifactId>
  <version>8.5.24</version>
</dependency>

添加 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";

    public static void main(String[] args) throws Exception {
        // 设定 profile
        Optional<String> profile = Optional.ofNullable(System.getProperty("spring.profiles.active"));
        System.setProperty("spring.profiles.active", profile.orElse("develop"));

        Tomcat tomcat = new Tomcat();
        tomcat.setPort(PORT);
        tomcat.getHost().setAppBase(".");
        tomcat.addWebapp(CONTEXT_PATH, getAbsolutePath() + "src/main/webapp");
        tomcat.start();
        tomcat.getServer().await();
    }

    private static String getAbsolutePath() {
        String path = null;
        String folderPath = SimpleEmbedTomcatServer.class.getProtectionDomain().getCodeSource().getLocation().getPath()
                .substring(1);
        if (folderPath.indexOf("target") > 0) {
            path = folderPath.substring(0, folderPath.indexOf("target"));
        }
        return path;
    }
}

成功后,可以访问 http://localhost:8080/javatool-server

2.使用 maven 插件启动(不推荐)

不推荐理由:这种方式启动 maven 虽然最简单,但是有一个很大的问题是,真的很久很久没发布新版本了(最新版本发布时间:2013-11-11)。且貌似只能找到 Tomcat6 、Tomcat7 插件。

使用方法

在 pom.xml 中引入插件

<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <port>8080</port>
    <path>/${project.artifactId}</path>
    <uriEncoding>UTF-8</uriEncoding>
  </configuration>
</plugin>

运行 mvn tomcat7:run 命令,启动 Tomcat。

成功后,可以访问 http://localhost:8080/xxx (xxx 是 ${project.artifactId} 指定的项目名)

转载于:https://www.cnblogs.com/reaperhero/articles/10057786.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值