QQ个性网:专注于分享免费的QQ个性内容

关于我们| 网站公告| 广告服务| 联系我们| 网站地图

搜索
编程 JavaScript Java C++ Python SQL C Io ML COBOL Racket APL OCaml ABC Sed Bash Visual Basic Modula-2 Logo Delphi IDL Groovy Julia REXX Chapel X10 Forth Eiffel C# Go Rust PHP Swift Kotlin R Dart Perl Ruby TypeScript MATLAB Shell Lua Scala Objective-C F# Haskell Elixir Lisp Prolog Ada Fortran Erlang Scheme Smalltalk ABAP D ActionScript Tcl AWK IDL J PostScript IDL PL/SQL PowerShell

Tomcat 各组件认知

日期:2025/04/06 07:36来源:未知 人气:54

导读:Tomcat 在架构设计上采用面向组件的方式设计。即整体功能是通过组件的方式拼装完成。另外每个组件都可以被替换以保证灵活性。Tomcat 各组件及关系Server 和 ServiceConnector 连接器HTTP 1.1SSL httpsAJP( Apache JServ Protocol) apache 私有协议,用于apache 反向代理 TomcatContainer......

Tomcat 在架构设计上采用面向组件的方式设计。即整体功能是通过组件的方式拼装完成。另外每个组件都可以被替换以保证灵活性。

Tomcat 各组件及关系

  • Server 和 Service
  • Connector 连接器
  • HTTP 1.1
  • SSL https
  • AJP( Apache JServ Protocol) apache 私有协议,用于apache 反向代理 Tomcat
  • Container
  • Engine 引擎 catalina
  • Host 虚拟机 基于域名 分发请求
  • Context 隔离各个WEB应用 每个 Context 的 ClassLoader 都是独立
  • Component
  • Manager (管理器)
  • logger (日志管理)
  • loader (载入器)
  • pipeline (管道)
  • valve (管道中的阀)

Tomcat 启动参数说明

我们平时启动 Tomcat 过程是怎么样的?

  1. 复制 WAR 包至 Tomcat webapp 目录。
  2. 执行 starut.bat 脚本启动。
  3. 启动过程中 war 包会被自动解压装载。

但是我们在 Eclipse 或 idea 中启动 WEB 项目的时候 也是把 War 包复杂至 webapps 目录解压吗?显然不是,其真正做法是在 Tomcat 程序文件之外创建了一个部署目录,在一般生产环境中也是这么做的 即:Tomcat 程序目录和部署目录分开 。

我们只需要在启动时指定CATALINA_HOME 与 CATALINA_BASE 参数即可实现。

自定义启动 Tomcat

  • 下载并解压 Tomcat
  • 创建并拷贝应用目录
  • 创建 Tomcat.sh
  • 编写 Tomcat.sh
  • chmod +x tomcat.sh 添加执行权限
  • 拷贝 conf 、webapps 、logs 至应用目录。
  • 执行启动测试。

    export JAVA_OPTS="-Xms100m -Xmx200m"export JAVA_HOME=/root/svr/jdk/export CATALINA_HOME=/usr/local/apache-tomcat-8.5.34export CATALINA_BASE="pwd"case $1 in start) $CATALINA_HOME/bin/catalina.sh start echo start success!! ;; stop) $CATALINA_HOME/bin/catalina.sh stop echo stop success!! ;; restart) $CATALINA_HOME/bin/catalina.sh stop echo stop success!! sleep 2 $CATALINA_HOME/bin/catalina.sh start echo start success!! ;; version) $CATALINA_HOME/bin/catalina.sh version ;; configtest) $CATALINA_HOME/bin/catalina.sh configtest ;; esacexit 0

Tomcat server.xml 配置详解

Server 的基本基本配置

元素说明

  • server

  • root元素:server 的顶级配置

  • 主要属性:

  • port:执行关闭命令的端口号

  • shutdown:关闭命令

  • service 服务:将多个 connector 与一个 Engine 组合成一个服务,可以配置多个服务。

  • Connector 连接器:用于接收 指定协议下的连接 并指定给唯一的 Engine 进行处理。 主要属性:

  • protocol 监听的协议,默认是http/1.1

  • port 指定服务器端要创建的端口号

  • minThread服务器启动时创建的处理请求的线程数

  • maxThread最大可以创建的处理请求的线程数

  • enableLookups如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址

  • redirectPort指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号

  • acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

  • connectionTimeout指定超时的时间数(以毫秒为单位)

  • SSLEnabled 是否开启 sll 验证,在Https 访问时需要开启。

配置多个 Connector

  • Engine 引擎:用于处理连接的执行器,默认的引擎是catalina。一个service 中只能配置一个Engine。 主要属性:name 引擎名称 defaultHost 默认host
  • Host 虚拟机:基于域名匹配至指定虚拟机。类似于nginx 当中的server,默认的虚拟机是localhost. 主要属性:

演示配置多个 Host

Context 应用上下文:一个host 下可以配置多个 Context ,每个Context 都有其独立的 classPath。相互隔离,以免造成 ClassPath 冲突。 主要属性:

配置多个 Context

Valve 阀门:可以理解成 request 的过滤器,具体配置要基于具体的 Valve 接口的子类。以下即为一个访问日志的 Valve。

Tomcat IO 模型介绍

使用指定 IO 模型的配置方式

配置 server.xml 文件当中的 修改即可。

默认配置 8.0 protocol=“HTTP/1.1”, 8.0 之前是 BIO 8.0 之后是 NIO

  • BIO:protocol=“org.apache.coyote.http11.Http11Protocol“
  • NIO:protocol=”org.apache.coyote.http11.Http11NioProtocol“
  • AIO:protocol=”org.apache.coyote.http11.Http11Nio2Protocol“
  • APR:protocol=”org.apache.coyote.http11.Http11AprProtocol“

在高并发场景下 BIO 与 NIO 的线程数的变化?

演示数据:

BIO 线程模型

Http11Protocol Http BIO协议解析器

  • JIoEndpoint
  • Acceptor implements Runnable
  • SocketProcessor implements Runnable

NIO 线程模型

Http11NioProtocol Http Nio协议解析器

  • NioEndpoint
  • Acceptor implements Runnable
  • Poller implements Runnable
  • SocketProcessor implements Runnable

关于我们|网站公告|广告服务|联系我们| 网站地图

Copyright © 2002-2023 某某QQ个性网 版权所有 | 备案号:粤ICP备xxxxxxxx号

声明: 本站非腾讯QQ官方网站 所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告