一针见血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/bashexportJAVA_OPTS="-Xms100m -Xmx200m"# jdk路径exportJAVA_HOME=/usr/local/ding/jdk1.8.0_191# tomcat路径exportCATALINA_HOME=/usr/local/ding/apache-tomcat-8.0.53# 当前所在路径exportCATALINA_BASE="`pwd`"case$1 in        start) #启动tomcat        $CATALINA_HOME/bin/catalina.sh start                echostart success!!        ;;        stop)                $CATALINA_HOME/bin/catalina.sh stop                echostop success!!        ;;        restart)                $CATALINA_HOME/bin/catalina.sh stop                echostop success!!                sleep2        $CATALINA_HOME/bin/catalina.sh start                echostart 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 ... 
