通过配置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下部署不同端口多个应用相关推荐

  1. linux部署tomcat项目404_一个tomcat下部署多个项目或一个服务器部署多个tomcat

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] ♪ 点击上方绿标 收听一个tomcat下部署多个项目或一个服务器部署多个tomcat 最近需要把两个项目同时部署到服务器上,于是研究了一下 ...

  2. 在tomcat下部署两个或多个项目时 log4j和web.xml配置webAppRootKey 的问题(转)

    在tomcat下部署两个或多个项目时 web.xml文件中最好定义webAppRootKey参数,如果不定义,将会缺省为"webapp.root",如下: <!-- 应用路径 ...

  3. react admin项目部署到tomcat_一个tomcat同时部署多个项目

    前言 一个tomcat部署多个项目常用的方法是将所有的项目放置在webapps里面,共用同一个端口,各项目根据项目名进行区分.如果多个项目有启动先后顺序,这样的做法就显得不合适,因为tomcat启动是 ...

  4. 在Tomcat下部署Jenkins

    部署Jenkins有很多种方法,今天我们介绍下如何通过Tomcat轻松部署Jenkins 一.Why Linux,Not Windows 一般都会将Jenkins这种服务类的系统,部署在Linux端( ...

  5. 环境部署(java安装和配置,Tomcat安装和配置)(tomcat下部署war包)

    1,上传环境部署安装包到服务器上 2,解压安装包,并部署java #  tar -xf jdk-8u201-linux-x64.tar.g # mkdir /usr/java # cp  jdk1.8 ...

  6. linux mule,在Tomcat下部署Mule

    原文是在mule的官网上,在这里,我做了一个简单的翻译,水平有限,有什么不足的地方,请多多包涵~ 在Tomcat中安装Mule 为了可以热部署你的Mule应用,将Mule安装在Tomcat下需要如下的 ...

  7. Windows环境中在同一个Tomcat下发布不同端口号的不同web程序

    一.修改Tomcat路径下的conf文件下的 server.xml 文件.增加一个service 节点. 原service节点如下图所示: 新增service节点如下图所示,注意红色标注的是要修改的地 ...

  8. Tomcat下部署多个项目

    转载地址:http://blog.csdn.net/philosophyatmath/article/details/30246631 同一端口号的多个项目部署     添加: <Context ...

  9. jfinal项目tomcat下部署

    1.修改 pom.xml 文件,其中的 packaging 标签值要改成 war 2.删掉 jfinal-undertow 和 jetty-server 依赖 3.控制台 cd 进入项目根目录执行下面 ...

最新文章

  1. MFC中快速应用OpenCV(转)
  2. Windows10下安装Anaconda3(附带python3.7.9)+Tensorflow2.0.0+Pycharm
  3. 设计模式笔记之 - State
  4. linux 下删除文件的 操纵
  5. linux链路状态,网卡一配地址,链路状态就down了,求解决方法!
  6. Linux下SVN服务器搭建(CentOS+Subversion)
  7. 在python实现快速傅里叶变换FFT与频域滤波
  8. syslog和syslog-ng详解
  9. 大数据面试-05-大数据工程师面试题
  10. SMTP Error: Could not connect to SMTP host.
  11. 阿里旺旺2012自动登录
  12. docker安装详细教程
  13. 如何写项目文档?项目文档有哪些?
  14. php中百度编辑器的使用
  15. 51单片机控制42步进电机——程序实现(中断PWM/延时函数)
  16. Vant 3 - 有赞出品的开源移动UI组件库,基于 Vue3 重构发布
  17. 科学研究设计七:单案例设计
  18. 人体颈椎神经分布图高清,颈椎部神经分布图高清
  19. 线性代数标准型矩阵化简技巧
  20. 太阳电池板特性实验_太阳电池伏安特性的测量

热门文章

  1. H5移动端痛点问题(不定期更新)
  2. 拒绝细胞衰老、远离老年疾病,爱丁堡大学给细胞开出 3 张「AI 抗衰处方」
  3. kettle数据溢出了怎么办_kettle内存溢出解决方法
  4. 用Java实现opc通信协议
  5. FFT中的汉宁窗 C#
  6. Vue —— 注册、登录
  7. 【C语言进阶】详解C语言动态内存管理
  8. 换电市场:蔚来开路、睿蓝随行
  9. 常州SEO姜东:建立链接和建立权威:搜索引擎优化链接建设
  10. 播客php,谈谈国内三大PHP播客系统代码试用体验和建议