一个tomcat下部署不同端口多个应用
通过配置tmcat的server.xml来实现多端口多应用:
<?xml version='1.0' encoding='utf-8'?><Server port="8005" shutdown="SHUTDOWN"><!-- Security listener. Documentation at /docs/config/listeners.html<Listener className="org.apache.catalina.security.SecurityListener" />--><!--APR library loader. Documentation at /docs/apr.html --><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /><!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --><Listener className="org.apache.catalina.core.JasperListener" /><!-- Prevent memory leaks due to use of particular java/javax APIs--><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /><GlobalNamingResources><Resource name="UserDatabase" auth="Container"type="org.apache.catalina.UserDatabase"description="User database that can be updated and saved"factory="org.apache.catalina.users.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml" /></GlobalNamingResources><Service name="Catalina"><Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" URIEncoding="UTF-8" enableLookups="false" acceptCount="500" connectionTimeout="5000" disableUploadTimeout="true" maxThreads="1500" maxSpareThreads="50" minSpareThreads="25"redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Context docBase="/data/java/appstore-api" path="/" reloadable="false" /></Host></Engine></Service><Service name="web"><Connector port="8088" protocol="HTTP/1.1" maxThreads="700" acceptCount="100" connectionTimeout="2000" redirectPort="8445" URIEncoding="UTF-8"/><Engine name="web" defaultHost="localhost"><Host name="localhost" appBase="webapp1"><Context docBase="/data/java/appstore-web" path="" reloadable="true" /></Host></Engine></Service><Service name="web2"><Connector port="8089" protocol="HTTP/1.1" maxThreads="700" acceptCount="100" connectionTimeout="2000" redirectPort="8445" URIEncoding="UTF-8"/><Engine name="web2" defaultHost="localhost"><Host name="localhost" appBase="webapp2"><Context docBase="/data/java/appstore-web2" path="" reloadable="true" /></Host></Engine></Service>
</Server>
1、按照上面的配置,启动tomcat,可以发现:
1)启动tomcat后,在tomcat配置目录:/usr/local/tomcat/conf下,除了默认的Catalina文件夹外,还会生成web1和web2两个文件夹。原因是Engine组件中,指定了所用的web1和web2。当然,我们可以将不同service组件的Engine name都指定成Catalina。
2)启动tomcat后,在tomcat目录:/usr/local/tomcat下,除了默认的webapps文件夹外,还会生成webapp1和webapp2两个目录。原因是Host组件中,指定了appBase伟webapp1和webapp2.当然,我们可以将不同service组件的Host appBase指定成默认的webapps。
2、配置说明:
1)appBase是虚拟主机存放webapp的目录,它可以是相对路径,也可以是绝对路径。如果是相对路径,则相对于$CATALINA_HOME,严格并准确地说是CATALINA_BASE。
2)path是URI的匹配路径,相当于nginx的location后的路径。tomcat要求每个虚拟主机必须配置一个空字符串的path,该条context作为URI无法被明确匹配时的默认context,它相当于nginx中location / {}的作用。
3)docBase则是每个webapp的存放目录(或者是已归档的war文件),它可以是相对路径,也可以是绝对路径,提供相对路径时它相对于appBase。该目录一般在appBase的目录下,但并不规定一定要放在appBase下。对于web服务来说,它相当于nginx的root指令,但对于webapp来说,一个context就相当于一个webapp,而docBase正是webapp的路径。
3、注意:
1)如果多个项目都用了spring框架,那么在配置成一个tomcat多端口多应用时,可能会报错:
13-Apr-2018 12:52:08.716 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListenerjava.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [/data/ttbrain-log-admin/] instead of [/data/Disu/] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:151)at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:116)at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:45)at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5189)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)at java.util.concurrent.FutureTask.run(FutureTask.java:262)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:745)
原因是:部署在同一容器中的Web项目,要配置不同的<param-value>,不能重复,否则就会报上面类似的错误。
2)解决方法:在web.xml中加上:
<context-param><param-name>webAppRootKey</param-name><param-value>webapp.root</param-value>
</context-param>
"webapp.root"这个字符串可以随便写任何字符串。如果不配置默认值是"webapp.root"。可以用System.getProperty("webapp.root")来动态获项目的运行路径。
3)加载方式:
Spring通过org.springframework.web.util.WebAppRootListener 这个监听器来运行时的项目路径。但是如果在web.xml中已经配置了 org.springframework.web.util.Log4jConfigListener这个监听器,则不需要配置WebAppRootListener了。因为Log4jConfigListener已经包含了WebAppRootListener的功能
一般配置类型下面的例子:
<!-- 加载Log4J 配置文件 -->
<context-param> <param-name>log4jConfigLocation</param-name> <param-value>WEB-INF/conf/log4j.properties</param-value>
</context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>3000</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
在log4j.properties配置文件,就可以按下面的方式使用${webapp.root}:log4j.appender.file.File=${webapp.root}/WEB-INF/logs/sample.log 就可以在运行时动态的找出项目的路径
参考:https://www.cnblogs.com/f-ck-need-u/p/8120008.html
一个tomcat下部署不同端口多个应用相关推荐
- linux部署tomcat项目404_一个tomcat下部署多个项目或一个服务器部署多个tomcat
点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] ♪ 点击上方绿标 收听一个tomcat下部署多个项目或一个服务器部署多个tomcat 最近需要把两个项目同时部署到服务器上,于是研究了一下 ...
- 在tomcat下部署两个或多个项目时 log4j和web.xml配置webAppRootKey 的问题(转)
在tomcat下部署两个或多个项目时 web.xml文件中最好定义webAppRootKey参数,如果不定义,将会缺省为"webapp.root",如下: <!-- 应用路径 ...
- react admin项目部署到tomcat_一个tomcat同时部署多个项目
前言 一个tomcat部署多个项目常用的方法是将所有的项目放置在webapps里面,共用同一个端口,各项目根据项目名进行区分.如果多个项目有启动先后顺序,这样的做法就显得不合适,因为tomcat启动是 ...
- 在Tomcat下部署Jenkins
部署Jenkins有很多种方法,今天我们介绍下如何通过Tomcat轻松部署Jenkins 一.Why Linux,Not Windows 一般都会将Jenkins这种服务类的系统,部署在Linux端( ...
- 环境部署(java安装和配置,Tomcat安装和配置)(tomcat下部署war包)
1,上传环境部署安装包到服务器上 2,解压安装包,并部署java # tar -xf jdk-8u201-linux-x64.tar.g # mkdir /usr/java # cp jdk1.8 ...
- linux mule,在Tomcat下部署Mule
原文是在mule的官网上,在这里,我做了一个简单的翻译,水平有限,有什么不足的地方,请多多包涵~ 在Tomcat中安装Mule 为了可以热部署你的Mule应用,将Mule安装在Tomcat下需要如下的 ...
- Windows环境中在同一个Tomcat下发布不同端口号的不同web程序
一.修改Tomcat路径下的conf文件下的 server.xml 文件.增加一个service 节点. 原service节点如下图所示: 新增service节点如下图所示,注意红色标注的是要修改的地 ...
- Tomcat下部署多个项目
转载地址:http://blog.csdn.net/philosophyatmath/article/details/30246631 同一端口号的多个项目部署 添加: <Context ...
- jfinal项目tomcat下部署
1.修改 pom.xml 文件,其中的 packaging 标签值要改成 war 2.删掉 jfinal-undertow 和 jetty-server 依赖 3.控制台 cd 进入项目根目录执行下面 ...
最新文章
- MFC中快速应用OpenCV(转)
- Windows10下安装Anaconda3(附带python3.7.9)+Tensorflow2.0.0+Pycharm
- 设计模式笔记之 - State
- linux 下删除文件的 操纵
- linux链路状态,网卡一配地址,链路状态就down了,求解决方法!
- Linux下SVN服务器搭建(CentOS+Subversion)
- 在python实现快速傅里叶变换FFT与频域滤波
- syslog和syslog-ng详解
- 大数据面试-05-大数据工程师面试题
- SMTP Error: Could not connect to SMTP host.
- 阿里旺旺2012自动登录
- docker安装详细教程
- 如何写项目文档?项目文档有哪些?
- php中百度编辑器的使用
- 51单片机控制42步进电机——程序实现(中断PWM/延时函数)
- Vant 3 - 有赞出品的开源移动UI组件库,基于 Vue3 重构发布
- 科学研究设计七:单案例设计
- 人体颈椎神经分布图高清,颈椎部神经分布图高清
- 线性代数标准型矩阵化简技巧
- 太阳电池板特性实验_太阳电池伏安特性的测量