Server 和 Service
Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个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 (管道中的阀)
3.Tomcat启动参数说明
我们平时启动Tomcat过程是怎么样的?
复制WAR包至Tomcat webapp 目录。
执行starut.bat 脚本启动。
启动过程中war 包会被自动解压装载。
但是我们在Eclipse 或idea 中启动WEB项目的时候 也是把War包复杂至webapps 目录解压吗?显然不是,其真正做法是在Tomcat程序文件之外创建了一个部署目录,在一般生产环境中也是这么做的 即:Tomcat 程序目录和部署目录分开 。
我们只需要在启动时指定CATALINA_HOME 与 CATALINA_BASE 参数即可实现。
启动参数 |
描述说明 |
JAVA_OPTS |
jvm 启动参数 , 设置内存 编码等 -Xms100m -Xmx200m -Dfile.encoding=UTF-8 |
JAVA_HOME |
指定jdk 目录,如果未设置从java 环境变量当中去找。 |
CATALINA_HOME |
Tomcat 程序根目录 |
CATALINA_BASE |
应用部署目录,默认为$CATALINA_HOME |
CATALINA_OUT |
应用日志输出目录:默认$CATALINA_BASE/log |
CATALINA_TMPDIR |
应用临时目录:默认:$CATALINA_BASE/temp
|
演示自定义启动Tomcat
下载并解压Tomcat
创建并拷贝应用目录 (conf 文件夹,webapps 文件夹),新建logs
编写Tomcat.sh
chmod +x tomcat.sh 添加执行权限
执行启动测试。
tomcat.sh 内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#!/bin/bash export JAVA_OPTS= "-Xms100m -Xmx200m" # jdk路径 export JAVA_HOME= /usr/local/ding/jdk1 .8.0_191 # tomcat路径 export CATALINA_HOME= /usr/local/ding/apache-tomcat-8 .0.53 # 当前所在路径 export CATALINA_BASE= "`pwd`" case $1 in start) #启动tomcat $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) #查看tomcat当前参数 $CATALINA_HOME /bin/catalina .sh version ;; configtest) #测试tomcat启动是否报错并不真正启动 $CATALINA_HOME /bin/catalina .sh configtest ;; esac exit |
webapps : 存放我们的war包。
conf: 就是tomcat的配置,
sh tomcat.sh start 之后:发现启动成功
即:Tomcat 程序目录和部署目录分开 。
元素说明:
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<Connectorport= "8860" protocol= "org.apache.coyote.http11.Http11NioProtocol" connectionTimeout= "20000" redirectPort= "8862" URIEncoding= "UTF-8" useBodyEncodingForURI= "true" #压缩 compression= "on" compressionMinSize= "2048" #压缩最小值 compressableMimeType= "text/html,text/xml,text/plain,text/javascript,text/css,application/x-json,application/json,application/x-javascript" #压缩文件类型 maxThreads= "1024" minSpareThreads= "200" acceptCount= "800" enableLookups= "false" /> |
Engine
引擎:用于处理连接的执行器,默认的引擎是catalina。一个service 中只能配置一个Engine。
主要属性:name 引擎名称 defaultHost 默认localhost,说一下这个defaultHost,如果从url中的域名或者ip 找不到对应的<host> 的name 那就会使用 defaultHost,defaultHost的值一般是localhost,
Host
虚拟机:基于域名匹配至指定虚拟机。类似于nginx 当中的server,默认的虚拟机是localhost.
主要属性:
配置多个Host
appBase是虚拟机的根目录相当于tomcat的webapps。
docBase是你的项目目录,没有以 / 开头的话就是相对于appBase目录下。
说明一下: 当url 是 http://localhost:8080 是就对应第二个的host ,当url 域名是www.likehow.com 是就对应第一个host,
Context
应用上下文:一个host 下可以配置多个Context ,每个Context 都有其独立的classPath。相互隔离,以免造成ClassPath 冲突。
主要属性:
演示配置多个Context
<Context docBase="hello" path="/h" reloadable="true"/>
Valve
阀门:可以理解成request 的过滤器,具体配置要基于具体的Valve 接口的子类。以下即为一个访问日志的Valve.
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="www.likehow.com.access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
原文:https://www.cnblogs.com/shoshana-kong/p/10682653.html