tomcat 的自问自答与总结
在查看了官方文档和做了多次试验,我觉得应该给自己提几个问题,看看我是不是真正的理解,我是不是对之前疑惑的东西有了答案。
1 tomcat 的加载问题,启动后更新是否自动加载
- server.xml 文件更改必须重启才能生效
- 在Host 定义的appBase 目录中的war包会自动加载
- 在Host 定义的appBase 目录中的war包如果发生更改会自动重新加载
- tomcat 在解压war包后,会自动向解压war包的目录添加META-INF/war-tracker 文件,用于记录在tomcat未运行的时候war包(不是解压后的文件)是否发生改变.如果改变,tomcat在启动会重新发布。这里引申一点,如果是解压后的文件目录发生改变了,是否会重新加载? 这里取决于reloadable,该参数会监测/WEB-INF/classes/和/WEB-INF/lib的文件是否发生改变,但是开启该参数会导致性能降低。
状态 | 文件状态 | 说明 |
---|---|---|
tomcat运行中 | war包更新 | 自动重新加载 |
tomcat运行中 | war包不更新,文件内容更新 | 如果是静态文件更改,访问可以立即获取最新的信息,如果是一些lib文件或者是class文件更新的话,需要关注参数reloadable,该参数会监测/WEB-INF/classes/和/WEB-INF/lib的文件是否发生改变,但是开启该参数会导致性能降低。 |
tomcat关闭中 | war包更新 | war-tracker记录war包是否更新,更新了的话启动时重新部署 |
tomcat关闭中 | war包不更新,文件内容更新 | 启动会自动加载最新的文件内容。 |
2 tomcat 的context.xml 文件读取顺序与覆盖原则
tomcat 有三个可以读取Context 配置的位置。
- server.xml 里面的 Host 配置下的Context.
- conf///.xml
- webapps//META-INF/context.xml
读取顺序 2 --->1--->3 后面的配置覆盖前面的配置
3 就是 建议的tomcat 配置
示例配置,这个配置需要根据自己的业务情况来进行配置。很多属性默认已经设置好了
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
acceptCount="300"
acceptorThreadCount="2"
compression="on"
keepAliveTimeout="25000"
maxConnections="5000"
maxThreads="400"
minSpareThreads="25"
/>
4 避免二次部署加载的问题
定义 Context 元素的docBase的属性的值(路径)不要是Host 元素的 appBase 的路径的子目录,也就是如果Host 定义的路径包含 Context元素定义的路径,这样就会引起二次部署。
解决办法:
- 我们可以通过Host 的属性deployIgnore 来精确匹配。避免二次部署。
- 通过避免Host定义的路径包含Context 的路径,如果我们将项目已经存放在Host 定于的路径,那么我们可以无需再定义一次Context .
如果文章有写的不足的地方,或者是写得错误的地方,请你一定要指出,因为这样不光是对我写文章的一种促进,也是一份对后面看此文章的人的责任。
tomcat 的自问自答与总结的更多相关文章
- [python]自问自答:python -m参数?
python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- 自问自答之VR遐想
先让我组织一下语言,作为表达能力超弱的战五渣来讲,归纳总结什么的最要命了. 我可以给你分析个1到N条出来,但是一般来讲没什么顺序,想到什么就说什么.而且我属于线性思维,有一个引子就可以按着话头一步步发 ...
- [python]自问自答:python -m参数? (转)
python -m xxx.py 作用是:把xxx.py文件当做模块启动但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- [python]自问自答:python -m参数? (转) ( python2.7 版本 )
原文地址: http://www.cnblogs.com/xueweihan/p/5118222.html python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当 ...
- css自问自答(二)
css自问自答(二) 7.掌握定位的一些属性 position 和 display 属性,以及如何浮动(float)和清除(clear)元素,z-index属性 三个属性控制: position 属性 ...
- css自问自答(一)
css自问自答(一) 1.块级元素和行内元素特性与区别? 块级:display:block <div>.<p>.<h1>...<h6>.<ol&g ...
- vue 源码自问自答-响应式原理
vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...
- 区块链自问自答 day1
区块链自问自答 day1 简要介绍区块链是什么? 区块链(Blockchain)是一种对等网络下的分布式数据库系统 数据结构中的单向链表是通过每个节点包含一个节点的指针实现"链" ...
- 区块链自问自答 day2
区块链自问自答 day2 区块链的自治性是如何达成的?为什么能够在去信任的环境下自由安全地交换数据? 区块链中有众多的节点,包含了恶意节点.故障节点.正常节点,想要这些节点共同做出一致的决定就需要 ...
随机推荐
- js基础学习笔记(一)
* 在js编写过程中,尽量保持统一使用单引号 'XXXX': * 所有变量都要声明 var,避免全局函数调用的冲突: 1.1 输出内容 docment.write(‘aileLi’); 改变某I ...
- issubclass ,isinstance,反射
issubclass() 函数 issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类. 语法 以下是 issubclass() 方法的语法: issubc ...
- leetcode - [6]Binary Tree Postorder Traversal
Given a binary tree, return the postorder traversal of its nodes' values. For example:Given binary t ...
- Codeforces Round #540 (Div. 3)--1118D1 - Coffee and Coursework (Easy version)
https://codeforces.com/contest/1118/problem/D1 能做完的天数最大不超过n,因为假如每天一杯咖啡,每杯咖啡容量大于1 首先对容量进行从大到小的排序, sor ...
- 2017-2018-1 201552326《信息安全技术》实验二——Windows口令破解
2017-2018-1 201552326<信息安全技术>实验二--Windows口令破解 姓名:刘美岑 学号:20155326 班级:1553班 日期:10.24 一.实验环境 操作系统 ...
- POJ3176 Cow Bowling 2017-06-29 14:33 23人阅读 评论(0) 收藏
Cow Bowling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19173 Accepted: 12734 Des ...
- 第81讲:Scala中List的构造和类型约束逆变、协变、下界详解
今天来学习一下scala中List的构造和类型约束等内容. 让我们来看一下代码 package scala.learn /** * @author zhang */abstract class Big ...
- 6、GNU makefile工程管理学习的一个例子
在之前我们已经学习了一个文件的编译过程,但是做过项目的都知道,一个工程中的源文件不计其数,其按类型.功能.模块会分别放在若干个目录中,而这些文件如何编译就需要有一个编译规则,虽然现在很多大型的项目都是 ...
- html5 实现qq聊天的气泡效果
教程:http://m.blog.csdn.net/blog/yhc13429826359/38778337 写的很好.自己实现的时候,由于img float:left,会脱离文档流,导致结构混乱. ...
- js五道经典练习题--第三道实现购物车功能
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...