一针见血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 ...
随机推荐
- linux c++ curl 根据IP地址获得当前网络的所在的地理位置
注意: 可能每个电脑的默认中文编码格式不同,有时会出现乱码,需要对返回内容进行编码转换,或者换成可指定编码格式的接口.如 搜狐IP地址查询接口(可设置编码):http://pv.sohu.com/c ...
- Spring boot 启动报错 Failed to auto-configure a DataSource
1.Spring boot 启动报错 Failed to auto-configure a DataSource 参考资料https://blog.csdn.net/liuyinfei_java/ar ...
- redis 集群常用命令
systemctl start redis.service #redis 启动redis-server /etc/redis.conf #redis 加载配置文件启动 redis-cli -h 192 ...
- git的基本用法——我的日常使用
git的基本用法 一,前言 网上有太多关于git的用法说明,而我看得云里雾里,可能是本人比较愚笨.平常时间老问别人又觉得很不好意思,估计大多的同学们都是自己解决.后来我想到了买一本书,淘宝上git书籍 ...
- 互联网创业公司如何防御 DDoS 攻击?采用CDN服务
收集了发表于2015年 攻击者是控制一个足够大的分布式集群来发起攻击,各种杂七杂八的包,什么都会有.根本不在乎你开的什么服务,也没那耐心分析你有什么服务.比如哪怕你根本没开UDP的任何服务,但他就是发 ...
- JavaScript中的DOM及相关操作
一.什么是DOM JavaScript由ECMAScript.DOM和BOM三部分组成,其中DOM代表描述网页内容的方法和接口,即文档对象模型(Document Object Model).在网页上, ...
- Selenium·自动化框架集成
date:2018513 day08aft 一.自动化框架集成分层 1.config 配置(项目配置——测试环境,公司环境,线上环境:以中国人才热线登陆为例,网址.用户名.密码等) 2.public ...
- C# 文件上传下载功能实现 文件管理引擎开发
Prepare 本文将使用一个NuGet公开的组件技术来实现一个服务器端的文件管理引擎,提供了一些简单的API,来方便的实现文件引擎来对您自己的软件系统的文件进行管理. 在Visual Studio ...
- j教你如何用erlang-tuple
元组是用来保存一组数据元素的复合数据类型,其中数据元素是要求为erlang的数据类型,单不一定要是相同的类型,元组使用封闭的花括号{}来定义,里面的元素有逗号隔开. 例如: 1> {1,2,3} ...
- httpd does not appear to be running and proxying cobbler, or SELinux is in the way.
当我们执行cobbler check时,出现这种错误:httpd does not appear to be running and proxying cobbler, or SELinux is i ...