大家好,又见面了,我是你们的朋友全栈君。
<Host name=”localhost” appBase=”webapps” unpackWARs=”true” autoDeploy=”true”>
<Context path=”project_name” docBase=”/usr/local/project_name” debug=”0″ reloadable=”true” crossContext=”true”/>
<!– SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html –>
<!–
<Valve className=”org.apache.catalina.authenticator.SingleSignOn” />
–>
<!– Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern=”common” –>
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”
prefix=”localhost_access_log.” suffix=”.txt”
pattern=”%h %l %u %t "%r" %s %b” />
</Host>
现在我们来讨论下:tomcat 中server.xml文件: Host中 appBase 属性和 context中docBase属性的一些工作原理
1、如果你在Host 中的 appBase目录下配置了 如 appBase –对应的是工程的目录
1.1、<Host name=”localhost” appBase=”webapps” unpackWARs=”true” autoDeploy=”true”> –这个是tomcat的默认配置
tomcat在启动的时候就会将${tomcat_home}/webapps 目录下的所有子目录当成工程;如:在webapps下有子目录project_a 和project_b 他就会tomcat解析成project_a 和project_b 两个工程
2、如果你想tomcat启动后加载你指定目录的下的工程 同时你指定了工程名 如 docBase 对应的是单独的工程
<Context path=”project_name” docBase=”/usr/local/project_name” debug=”0″ reloadable=”true” crossContext=”true”/>
此时tomcat访问如果你访问 http://IP:port/project_name/就能访问到 /usr/local/project_name 下的资源了;
3、如果appBase指定了同一个目录 同时docBase 指向了appBase指定目录的子目录
这时就会出现问题,tomcat会对同一个工程启动2次
启动过程:1、首先tomcat会对webapps下面的所有工程启动一次 ;2、然后启动docBase目录下的工程,此时如果webapps下面刚好有 project_dir工程的话,就会再次被启动
此时tomcat下就启动了两个一样的工程了 project_dir 和project_name工程; 你在启动tomcat时 在catalina.out日志文件中就会发现日志重复打印了;
appBase 和docBase以 / 开头说明是绝对目录;
转载于:https://my.oschina.net/u/1414315/blog/812445
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125600.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...