一针见血tomcat
一针见血tomcat
一、Tomcat各组件认知
1 Tomcat架构说明
Tomcat是一个基于JAVA的WEB容器,其实现了JAVA EE中的 Servlet 与 jsp 规范,与Nginx apache 服务器不同在于一般用于动态请求处理。在架构设计上采用面向组件的方式设计。即整体功能是通过组件的方式拼装完成。

2 Tomcat 各组件及关系
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/bashexport 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 ;; esacexit |
webapps : 存放我们的war包。
conf: 就是tomcat的配置,
sh tomcat.sh start 之后:发现启动成功

即:Tomcat 程序目录和部署目录分开 。
二、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
|
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" />
一针见血tomcat的更多相关文章
- java-网络通信-索引
HTTP协议 关于HTTP协议,一篇就够了 HTTP与HTTPS的区别 HTTP Keep-Alive模式 HTTP长连接和短连接 HTTP的长连接(持久连接)和短连接 HTTP的长连接 ...
- IntelliJ IDEA 2018.3.3配置 Tomcat 9,控制台出现中文乱码 “淇℃伅”(2019/01/25)
(win10系统) 全新idea配置全新版本Tomcat突遇 “淇℃伅”,网上大部分解决方案均已失效 似乎是idea与Tomcat命令行输出格式不一致所致,千辛万苦在某一小角落发现这个方法,一针见血, ...
- Tomcat一个BUG造成CLOSE_WAIT
之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...
- docker——容器安装tomcat
写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...
- Tomcat shutdown执行后无法退出进程问题排查及解决
问题定位及排查 上周无意中调试程序在Linux上ps -ef|grep tomcat发现有许多tomcat的进程,当时因为没有影响系统运行就没当回事.而且我内心总觉得这可能是tomcat像nginx一 ...
- 记一次tomcat线程创建异常调优:unable to create new native thread
测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...
- Linux CentOS 配置Tomcat环境
一.下载Tomcat 下载Tomcat方式也有两种,可以参考我的前一篇博文Linux CentOS配置JDK环境,这边就不再赘述. 二.在Linux处理Tomcat包 1.创建tomcat文件夹 mk ...
- 在Linux虚拟机下配置tomcat
1.到Apache官网下载tomcat http://tomcat.apache.org/download-80.cgi 博主我下载的是tomcat8 博主的jdk是1.8 如果你们的jdk是1.7或 ...
- tomcat开发远程调试端口以及利用eclipse进行远程调试
一.tomcat开发远程调试端口 方法1 WIN系统 在catalina.bat里: SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compi ...
随机推荐
- 配置阿里云docker镜像地址
{ "registry-mirrors": [ "https://kfwkfulq.mirror.aliyuncs.com", "https://2l ...
- leetcode python 007
## 翻转整数def evert(int0): if int0<0: flg=1 else: flg=0 e=int(str(int0)[flg: ...
- ef core code frist
https://docs.microsoft.com/zh-cn/ef/core/get-started/aspnetcore/new-db?view=aspnetcore-2.1 1.先创建对应的实 ...
- <zk在大型分布式系统中的应用>
Hadoop 在hadoop中,zk主要用来实现HA(High Availability).这部分逻辑主要集中在hadoop common的HA模块中,HDFS的NameNode和Yarn的Resou ...
- pass,break,continue的使用场景
# ### 关键字的使用 pass / break / continue # pass 过 起到占位的作用 if 5 == 5: pass print(123) # break 只能应用在循环当中 用 ...
- wpf-x命名空间-Markup Extension(标记扩展)
1.x:type 用于前端类型声明 与C# 代码 Type类似 2.x:Null 代表Null 某些时候需要显示的为一些值设置为空 前端为 x:Null C# 中 为 Null 3.x:ar ...
- CentOS上升级gcc编译器使支持C++11
首先向博主致敬,好的东西拿来共享了,用一下不错. https://blog.csdn.net/clirus/article/details/62424517 0. 目标 最近在学习c++11,我本机 ...
- 小程序仿QQ侧滑例子
缩放:wxml <!--page/one/index.wxml--> <view class="page"> <view class="pa ...
- linux (centOS)安装jdk+tomcat+nginx
一..安装jdk, 下载jdk有两种方式: 1.直接去官网找相应版本下载:http://www.oracle.com/technetwork/java/javase/downloads/index.h ...
- 启动Kernel提示Bad Data CRC
如上图,我明明将uImage正确写入到里nandflash里面,但启动但时候就是提示bad CRC. 后来我手动执行nand read kernel想看看是不是环境变量里面的命令执行有问题,意外但被我 ...