一针见血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 ...
随机推荐
- VBS下载者助以一臂之力
当拿到shell到手,服务器是内网,你又没有条件映射,服务器又穿不上东西 是不是很郁闷,还有我们还有vbs,能执行cmd命令就有希望 一.VBS下载者: 复制代码 代码如下: Set Post = C ...
- More is better
题目描述: Mr Wang wants some boys to help him with a project. Because the project is rather complex, the ...
- flex 1与flex auto
flex意为"弹性布局" 这次主要探究的是flex:1与flex:auto的区别,flex是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 ...
- 周强201771010141《面向对象程序设计(java)》第一周学习总结
周强201771010141<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com ...
- 04_安装Nginx图片服务器
一.安装Nginx 先安装Nginx,看我之前发的文章: 搭建Nginx服务器 二.安装vsftpd 再安装vsftpd组件,看我之前发的文章: Linux安装ftp组件 三.开始搭建Nginx图片服 ...
- 解决Yii2中刷新网页时验证码不刷新的问题
解决Yii2中刷新网页时验证码不刷新的问题 [ 2.0 版本 ] ljfrocky 2015-05-30 19:39:00 1304次浏览 5条评论 10110 在Yii2框架中,如果在表单中使用 ...
- 初学vue----动画过渡transition简单部分
使用动画效果要用transition包裹,transition(<trsnsition name="xx"><div></div></tr ...
- 【java多线程】队列系统之PriorityBlockingQueue源码
一.二叉堆 如题,二叉堆是一种基础数据结构 事实上支持的操作也是挺有限的(相对于其他数据结构而言),也就插入,查询,删除这一类 对了这篇文章中讲到的堆都是二叉堆,而不是斜堆,左偏树,斐波那契堆什么的 ...
- [Java] 例外處裡 try/catch & throws
public class CheckException { public static void main(String[] args) { File file = new File("xx ...
- CSV表格融合
常用表格融合函数 1 merge() 用于融合的函数 https://blog.csdn.net/brucewong0516/article/details/82707492 pd.merge(lef ...