一针见血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过程是怎么样的?

  1. 复制WAR包至Tomcat webapp 目录。

  2. 执行starut.bat 脚本启动。

  3. 启动过程中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/bash
 
export 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
        ;;
        esac
exit   

  

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 &quot;%r&quot; %s %b" />

一针见血tomcat的更多相关文章

  1. java-网络通信-索引

           HTTP协议 关于HTTP协议,一篇就够了 HTTP与HTTPS的区别 HTTP Keep-Alive模式 HTTP长连接和短连接 HTTP的长连接(持久连接)和短连接 HTTP的长连接 ...

  2. IntelliJ IDEA 2018.3.3配置 Tomcat 9,控制台出现中文乱码 “淇℃伅”(2019/01/25)

    (win10系统) 全新idea配置全新版本Tomcat突遇 “淇℃伅”,网上大部分解决方案均已失效 似乎是idea与Tomcat命令行输出格式不一致所致,千辛万苦在某一小角落发现这个方法,一针见血, ...

  3. Tomcat一个BUG造成CLOSE_WAIT

    之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...

  4. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  5. Tomcat shutdown执行后无法退出进程问题排查及解决

    问题定位及排查 上周无意中调试程序在Linux上ps -ef|grep tomcat发现有许多tomcat的进程,当时因为没有影响系统运行就没当回事.而且我内心总觉得这可能是tomcat像nginx一 ...

  6. 记一次tomcat线程创建异常调优:unable to create new native thread

    测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...

  7. Linux CentOS 配置Tomcat环境

    一.下载Tomcat 下载Tomcat方式也有两种,可以参考我的前一篇博文Linux CentOS配置JDK环境,这边就不再赘述. 二.在Linux处理Tomcat包 1.创建tomcat文件夹 mk ...

  8. 在Linux虚拟机下配置tomcat

    1.到Apache官网下载tomcat http://tomcat.apache.org/download-80.cgi 博主我下载的是tomcat8 博主的jdk是1.8 如果你们的jdk是1.7或 ...

  9. tomcat开发远程调试端口以及利用eclipse进行远程调试

    一.tomcat开发远程调试端口 方法1 WIN系统 在catalina.bat里:  SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compi ...

随机推荐

  1. 配置阿里云docker镜像地址

    { "registry-mirrors": [ "https://kfwkfulq.mirror.aliyuncs.com", "https://2l ...

  2. leetcode python 007

    ##  翻转整数def evert(int0):    if int0<0:        flg=1    else:        flg=0    e=int(str(int0)[flg: ...

  3. ef core code frist

    https://docs.microsoft.com/zh-cn/ef/core/get-started/aspnetcore/new-db?view=aspnetcore-2.1 1.先创建对应的实 ...

  4. <zk在大型分布式系统中的应用>

    Hadoop 在hadoop中,zk主要用来实现HA(High Availability).这部分逻辑主要集中在hadoop common的HA模块中,HDFS的NameNode和Yarn的Resou ...

  5. pass,break,continue的使用场景

    # ### 关键字的使用 pass / break / continue # pass 过 起到占位的作用 if 5 == 5: pass print(123) # break 只能应用在循环当中 用 ...

  6. wpf-x命名空间-Markup Extension(标记扩展)

    1.x:type 用于前端类型声明 与C#  代码 Type类似 2.x:Null 代表Null 某些时候需要显示的为一些值设置为空   前端为 x:Null   C# 中 为 Null 3.x:ar ...

  7. CentOS上升级gcc编译器使支持C++11

    首先向博主致敬,好的东西拿来共享了,用一下不错. https://blog.csdn.net/clirus/article/details/62424517 0. 目标  最近在学习c++11,我本机 ...

  8. 小程序仿QQ侧滑例子

    缩放:wxml <!--page/one/index.wxml--> <view class="page"> <view class="pa ...

  9. linux (centOS)安装jdk+tomcat+nginx

    一..安装jdk, 下载jdk有两种方式: 1.直接去官网找相应版本下载:http://www.oracle.com/technetwork/java/javase/downloads/index.h ...

  10. 启动Kernel提示Bad Data CRC

    如上图,我明明将uImage正确写入到里nandflash里面,但启动但时候就是提示bad CRC. 后来我手动执行nand read kernel想看看是不是环境变量里面的命令执行有问题,意外但被我 ...