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

    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" />

  • 相关阅读:
    前世今生:Hive、Shark、spark SQL
    spark streaming 6: BlockGenerator、RateLimiter
    spark streaming 5: InputDStream
    spark streaming 4: DStreamGraph JobScheduler
    常见css水平自适应布局
    js动态加载以及确定加载完成的代码
    如何判断css是否加载完成
    翻书特效
    jquery 事件冒泡的介绍以及如何阻止事件冒泡
    phonegap之android原生日历调用
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/10682653.html
Copyright © 2020-2023  润新知