TOMCAT
Intro(TOMCAT) #
正常启动参数
/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin/java
-Djava.util.logging.config.file=/Users/stevenobelia/software/apache-tomcat-8.5.53/conf/logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-Dorg.apache.catalina.security.SecurityListener.UMASK=0027
-agentlib:jdwp=transport=dt_socket,address=12302,server=y,suspend=y
-Dignore.endorsed.dirs=
-classpath /Users/stevenobelia/software/apache-tomcat-8.5.53/bin/bootstrap.jar:/Users/stevenobelia/software/apache-tomcat-8.5.53/bin/tomcat-juli.jar
-Dcatalina.base=/Users/stevenobelia/software/apache-tomcat-8.5.53
-Dcatalina.home=/Users/stevenobelia/software/apache-tomcat-8.5.53
-Djava.io.tmpdir=/Users/stevenobelia/software/apache-tomcat-8.5.53/temp
org.apache.catalina.startup.Bootstrap start
CATALINA_BASE VS CATALINA_HOME #
Tip
参考 CATALINA_HOME_and_CATALINA_BASE 、 tomcat-catalina-base-and-catalina-home-variables
CATALINA_HOME:表示 tomcat 安装根目录,(可以理解为启动程序,主要包含一些二进制.jar文件和执行脚本)
CATALINA_BASE:表示 tomcat 实例的运行配置根目录,(主要是配置,日志,部署的应用,其他运行依赖等,并且优先级比CATALINA_HOME高)
为什么需要有CATALINA_BASE目录。默认情况下,两个指向相同的目录。如果需要运行多个tomcat实例的话需要手动指定CATALINA_BASE目录。这样做的好处有以下几点(都是在运行多实例的情况下):1).
对于管理tomcat版本升级来说更为简单,咱们只需要替换tomcat运行依赖即可,即CATALINA_HOME中的jar包2).
避免复制tomcat运行依赖(节省磁盘空间)3).
共享某些设置,比如setenv.sh
。
需要注意:CATALINA_BASE目录至少包含conf/server.xml
、conf/web.xml
两个文件。Context配置 #
Tip
参考 A word on Contexts、 Defining a context
Context
表示一个tomcat web application。为了在 tomcat 中配置一个 Context ,需要一个叫作Context Descriptor的东西。这个是一个包含Context配置相关的xml文件。
每个应用单独的Context1).
$CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml
【idea中tomcat使用这种方式:如下图】2).
$CATALINA_BASE/webapps/[webappname]/META-INF/context.xml
3).
Inside a Host element in the main conf/server.xml.
默认(共享)的Context1).
$CATALINA_BASE/conf/context.xml
,所有的web应用都会加载。2).
$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default
,每一个虚拟主机都会加载。
在早期的版本中,这些配置被放在server.xml
中。现在虽不鼓励这么做,但是也支持。因为对Context做修改的话,如果不重启tomcat的话,server.xml
是不会被重载的。这会表现出较强的侵入性。所以默认的Context配置会复写任何在server.xml
中定义的<Context>
元素。可以使用override=true
属性来阻止这种行为。IDEA中配置Context的方式 #
BIN目录介绍 #
apache-tomcat-8.5.35/bin 目录结构如上图所示,摘取部分主要的。进行分析: 最重要的是
catalina.sh
。
首先是version.sh
,获取当前脚本version.sh
的所在目录。然后执行同级目录下面的catalina.sh
效果等同于catalina.sh version "$@"
。
其次是startup.sh
,这个原理等同于上一个。相当于执行catalina start "$@"
。
然后是setclasspath.sh
有必要提一下,这个主要用来确保JAVA_HOME/JRE_HOME,
以及检测第一个如果为debug
的话要保证 JAVA_HOME/bin目录下存在jdb
,用来调试tomcat程序。以及定义变量_RUNJAVA
、_RUNJDB
。
这个文件的使用方式是在catalina.sh
中使用.
dot命令在当前shell中执行内容。
最后一个catalina.sh
,使用方法如下所示:调试本地或远程的Tomcat #
因为需要比较 源码运行,与直接本地启动tomcat后里面运行参数的异同,所以需要搭建debug环境。参考文章如下:
https://cwiki.apache.org/confluence/display/TOMCAT/Developing
https://stackoverflow.com/questions/16689274/how-to-start-debug-mode-from-command-prompt-for-apache-tomcat-server
如catalina.sh
的 Usage 中所述,可以使用catalina.sh debug
命令,但是这个是使用jdb
程序启动的,不太会用。
所以选用另外一种使用catalina.sh jpda start
,这个使用 jdwp(Java Debug Wire Protocol) 协议,方便与现有ide结合使用 Attach模式 调试,比如 IJ idea。
使用命令启动export JPDA_ADDRESS="12302";export JPDA_SUSPEND=y;bin/catalina.sh jpda run
。【此处用run
而非~start
~:不会再另一个shell中运行程序,而在当前窗口,方便停止与日志查看】
参考 IDEA DEBUG 在 IDEA 端设置后连接。
Reference #