zoukankan      html  css  js  c++  java
  • tomcat学习笔记

                                                    Tomcat 8 权威指南

    一、关键词

     Servlet 容器;

    $CATALINA_HOME,Tomcat 安装的根目录;

    /conf/  =>server.xml   容器的主配置文件;

    /webapps/  => 存放 Web 应用的相关文件;

    修改tomcat配置文件后 需重启生效;

    二、容器安装

    http://wiki.jikexueyuan.com/project/tomcat/setup.html

    三、应用部署

    1、两种方式

    • 静态部署。在启动 Tomcat 之前安装 Web 应用。
    • 动态部署。使用 Tomcat 的 Manager 应用直接操控已经部署好的 Web 应用(依赖 auto-deployment 特性),可与ant,maven。   

    2、上下文(context)概念

    上下文在 Tomcat 中其实就是 Web 应用;

    上下文描述符文件( Context Descriptor) 位置:

        a.$CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml

        b.$CATALINA_BASE/webapps/[webappname]/META-INF/context.xml

    在目录 1 中的文件名为 [webappname].xml,但在目录 2 中,文件名为 context.xml。如果某个 Web 应用没有相应的上下文描述符文件,Tomcat 就会使用默认值配置该应用。

    3、静态部署(启动时部署,先部署后启动)

    应用部署的位置由 appBase 目录属性(server.xml里面配置)来决定,默认的 appBase 属性所指定的目录为 $CATALINA_BASE/webapps

    既可以放入未经压缩的 Web 应用资源文件(通常被称为 exploded web application,“膨胀 Web 应用”),也可以放置已压缩过的 Web 应用资源文件(.WAR 文件);

    只有当主机的 deployOnStartup 属性为 true, 应用才会在 Tomcat 启动时进行自动部署。

    在以上情况下,当 Tomcat 启动时,部署的具体步骤如下:

    1. 先部署上下文描述符文件。
    2. 然后再对没被任何上下文描述符文件引用过的膨胀 Web 应用进行部署。 如果在 appBase 中已存在与这种应用有关的 .WAR 文件,而且要比膨胀应用文件更新,那么就会将膨胀应用的文件夹清除,转而从 .WAR 文件中部署 Web 应用。
    3. 部署 .WAR 文件。  

    4、动态部署(热加载,无需重启)

    如果主机的 autoDeploy 属性为 true,主机就会在必要时(放入WAR包)尝试着动态部署并更新 Web 应用;

    autoDeploy 设置为 true 时,运行中的 Tomcat 服务器能够允许实现以下行为:

    • 对放入主机 appBase指定目录下的 .WAR 文件进行配置。
    • 对放入主机的膨胀 Web 应用进行配置。
    • 对于已通过 .WAR 文件配置好的应用,如果又提供了更新的 .WAR 文件,则使用新 .WAR 文件对该应用重新进行配置。在这种情况下,会先移除原有的膨胀 Web 应用,然后再次对 .WAR 文件进行扩展(膨胀)。注意,如果在主机配置中,没有把 unpackWARs 属性设为 false,则 WAR 文件将不会膨胀,这时 Web 应用将部署为一个压缩文档。
    • 如果 /WEB-INF/web.xml 文件(或者任何其他被定义为 WatchedResource 的资源)更新,则重新加载 Web 应用
    • 如果用来部署 Web 应用的上下文描述符更新,则重新部署该 Web 应用。
    • 如果 Web 应用所使用的全局或者每台主机中的上下文描述符已更新,则重新部署与该应用有依赖关系的 Web 应用。
    • 如果一个上下文描述符被添加到 $CATALINA_BASE/conf/[enginename]/[hostname]/ 目录中,并且该描述文件带有与之前部署的 Web 应用的上下文路径相对应的文件名,则重新部署该 Web 应用。
    • 如果某个 Web 应用的文档库(docBase)被删除,则取消对该应用的部署。注意,在 Windows 系统下,要想实现这样的行为,必须开启防锁死功能(参看 Context 配置文档),否则无法删除运行中的 Web 应用的资源文件。
    • 注意,也可以在加载器中对 Web 应用的重新加载进行配置,在这种情况下,会跟踪已加载的类所产生的更改。  
    5、使用 Tomcat Manager 进行部署(TCD,即需要使用tomcat提供的服务,通过控制台界面来部署)(http://wiki.jikexueyuan.com/project/tomcat/manager.html)
     
    6、默认servlet(defaultServlet)
     
    DefaultSevelet 是处理静态资源的 Sevelet;
     
    $CATALINA_HOME/conf/web.xml 中被全局声明;
     
    一些可配置的属性:
     
    input 在读取用于服务的资源时的输入缓冲大小(以字节计)。默认为 2048。
    output 在修改用于服务的资源时的输出缓冲大小(以字节计)。默认为 2048。
    readonly 上下文是否为“只读”,从而拒绝执行 PUT 或 DELETE 这样的 HTTP 命令。默认为 true。
    fileEncoding 文件编码用于读取静态资源时。默认取平台默认值。
     
     
     
    7、一篇分析nginx,tomcat,apache的文章 ,https://www.zhihu.com/question/32212996
     
    8、tomcat 类加载机制
      Tomcat 在初始化时会创建如下这些类加载器:
      * Bootstrap 这种类加载器包含 JVM 所提供的基本的运行时类,以及来自系统扩展目录($JAVA_HOME/jre/lib/ext)里 JAR 文件中的类。
      *  System 这种类加载器通常是根据 CLASSPATH 环境变量内容进行初始化的。标准的 Tomcat 启动脚本($CATALINA_HOME/bin/catalina.sh%CATALINA_HOME%incatalina.bat)完全忽略了 CLASSPATH 环境变量自身的内容,相反从下列仓库来构建系统类加载器:$CATALINA_HOME/bin/bootstrap.jar$CATALINA_BASE/bin/tomcat-juli.jar$CATALINA_HOME/bin/tomcat-juli.jar 日志实现类,$CATALINA_HOME/bin/commons-daemon.jar
      *Common 这种类加载器包含更多的额外类,它们对于Tomcat 内部类以及所有 Web 应用都是可见的,该类加载器所搜索的位置定义在 $CATALINA_BASE/conf/catalina.propertiescommon.loader 属性中。默认的设置会搜索下列位置(按照列表中的上下顺序):
        
    • $CATALINA_BASE/lib 中的解包的类和资源。
    • $CATALINA_BASE/lib 中的 JAR 文件。
    • $CATALINA_HOME/lib 中的解包类和资源。
    • $CATALINA_HOME/lib 中的 JAR 文件。

       *WebappX 为每个部署在单个 Tomcat 实例中的 Web 应用创建的类加载器。你的 Web 应用的 /WEB-INF/classes 目录中所有的解包类及资源,以及 /WEB-INF/lib 目录下 JAR 文件中的所有类及资源,对于该应用而言都是可见的,但对于其他应用来说则不可见

    Web 应用类加载器背离了默认的 Java 委托模式(父类加载机制),当某个请求想从 Web 应用的 WebappX 类加载器中加载类时,该类加载器会先查看自己的仓库,而不是预先进行委托处理。。JRE 基类的部分类不能被重写。

     从 Web 应用的角度来看,加载类或资源时,要查看的仓库及其顺序如下:

    • JVM 的 Bootstrap 类
    • Web 应用的 /WEB-INF/classes
    • Web 应用的 /WEB-INF/lib/*.jar
    • System 类加载器的类(如上所述)
    • Common 类加载器的类(如上所述)

    如果 Web 应用类加载器配置有 <Loader delegate="true"/>,则顺序变为:

    • JVM 的 Bootstrap 类
    • System 类加载器的类(如上所述)
    • Common 类加载器的类(如上所述)
    • Web 应用的 /WEB-INF/classes
    • Web 应用的 /WEB-INF/lib/*.jar
     
     
  • 相关阅读:
    Benelux Algorithm Programming Contest 2016 Preliminary K. Translators’ Dinner(思路)
    Benelux Algorithm Programming Contest 2016 Preliminary Target Practice
    Benelux Algorithm Programming Contest 2016 Preliminary I. Rock Band
    Benelux Algorithm Programming Contest 2016 Preliminary A. Block Game
    ICPC Northeastern European Regional Contest 2019 Apprentice Learning Trajectory
    ICPC Northeastern European Regional Contest 2019 Key Storage
    2018 ACM ICPC Asia Regional
    2018 ACM ICPC Asia Regional
    Mybatis入库出现异常后,如何捕捉异常
    优雅停止 SpringBoot 服务,拒绝 kill -9 暴力停止
  • 原文地址:https://www.cnblogs.com/lwcoding/p/6645115.html
Copyright © 2011-2022 走看看