Tomcat 多项目部署
2017-12-14 本文已影响49人
泥坑里的一块泥
1、servlet.xml中 Context标签下参数的含义
<Context path="/xxx" docBase="D:\xxx" debug="0" reloadable="true" crossContext="true" />
- path 指出你的访问路径
- docBase指出你的存放路径
- debug 为设定debug的等级0提供最少的信息,9提供最多的信息
- reloadable=true时 当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务(建议正式发布项目时改为false)
- crosscontext="true"表示配置的不同context共享一个session
2、一个tomcat发布多个项目
-
发布不同端口
- 在<Service name="Catalina">...</Service>标签后面添加新的service
并且要重新命名<Service name="Catalina8081">,<Engine name="Catalina8081" defaultHost="localhost">,<Host name="localhost" appBase="webapps8081"三处的名字- 在webapps同目录下新建上一步重命名的文件夹 webapps8081,
并将原始webapps内的所有文件考进去
<Service name="Catalina8081">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina8081" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps8081"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
-
发布相同端口
- 打开server.xml
- 添加如下代码
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="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" />
<Context path="/XX" docBase="webapps" debug="0" reloadable="true" crossContext="true" />
<Context path="/yy" docBase="webapps8081" debug="0" reloadable="true" crossContext="true" />
</Host>
3、发现问题,解决问题
1、比较容易遇到的一个问题,tomcat正常启动,但是只能打开一个项目,另一个则报404错误
可能的解决方法:
- 通常是log4j或者logback导致的,因为它们保存日志的路径一样,只需要修改路径
- 修改web.xml文件,添加webAppRootKey
1、例如 logback 修改路径${catalina.home}为${catalina8081.home}
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--See http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
<!--and http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy-->
<!--for further documentation-->
<file>${catalina8081.home}/logs/example_log/PurePro_</file>
<encoder>
<pattern>[example_sys] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${catalina8081.home}/logs/example_log/PurePro_.%d{yyyy-MM-dd'.log'}</fileNamePattern>
</rollingPolicy>
</appender>
2、修改web.xml,在最后加入下面代码
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>mos_ms.root</param-value>
</context-param>