日期:2025/04/06 07:36来源:未知 人气:54
Tomcat 在架构设计上采用面向组件的方式设计。即整体功能是通过组件的方式拼装完成。另外每个组件都可以被替换以保证灵活性。
我们平时启动 Tomcat 过程是怎么样的?
但是我们在 Eclipse 或 idea 中启动 WEB 项目的时候 也是把 War 包复杂至 webapps 目录解压吗?显然不是,其真正做法是在 Tomcat 程序文件之外创建了一个部署目录,在一般生产环境中也是这么做的 即:Tomcat 程序目录和部署目录分开 。
我们只需要在启动时指定CATALINA_HOME 与 CATALINA_BASE 参数即可实现。
执行启动测试。
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
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
演示配置多个 Host
Context 应用上下文:一个host 下可以配置多个 Context ,每个Context 都有其独立的 classPath。相互隔离,以免造成 ClassPath 冲突。 主要属性:
配置多个 Context
Valve 阀门:可以理解成 request 的过滤器,具体配置要基于具体的 Valve 接口的子类。以下即为一个访问日志的 Valve。
配置 server.xml 文件当中的 修改即可。
默认配置 8.0 protocol=“HTTP/1.1”
, 8.0 之前是 BIO 8.0 之后是 NIO
在高并发场景下 BIO 与 NIO 的线程数的变化?
演示数据:
Http11Protocol Http BIO协议解析器
Http11NioProtocol Http Nio协议解析器