我正在尝试在Tomcat 9的不同端口上部署spring应用程序。我想要实现的目标是:
1.保留其他应用程序的默认Tomcat配置,以将其部署webapps
在端口8080上的文件夹中
。2.在端口8081上仅部署一个spring应用程序。在根路径上
因此,例如:
localhost:8080/app1
localhost:8080/app2
[...]
localhost:8081/
我为第二项服务创建了新文件夹:/var/lib/tomcat9/webapps_8081/
对于第一项服务,我将其保留在默认位置:/var/lib/tomcat9/webapps/
这是我的server.xml
文件:
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
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">
<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>
<Service name="Catalina_8081">
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8444" />
<Engine name="Catalina_8081" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps_8081" 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>
到目前为止我尝试过的结果是什么
方法1:将War文件放置在部署文件夹中
当我将myapp.war
文件放入webapps
文件夹时,它的部署没有任何问题localhost:8080/myapp
将myapp.war文件放入webapps_8081
文件夹时,出现以下错误:
07-Sep-2019 15:20:29.370 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/var/lib/tomcat9/webapps_8081/myapp.war]
07-Sep-2019 15:20:29.384 SEVERE [main] org.apache.catalina.startup.ContextConfig.beforeStart Exception fixing docBase for context [/myapp]
java.io.IOException: Unable to create the directory [/var/lib/tomcat9/webapps_8081/myapp]
当我手动创建此文件夹时,日志显示该应用程序已被发送,但文件夹为空,部署本身仅需3毫秒。
ROOT.war
并放置到webapps
文件夹中时,它的部署没有任何问题:07-Sep-2019 15:23:50.845 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/var/lib/tomcat9/webapps/ROOT.war]
07-Sep-2019 15:25:13.486 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TL$
07-Sep-2019 15:25:13.568 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/var/lib/tomcat9/webapps/ROOT.war] has finished in [82,722] ms
但是当打开localhost:8080/
它给我404错误
ROOT.war
并将其放入webapps_8081
文件夹时,出现与第2点相同的错误。对我手动创建的文件夹的权限似乎有些问题,但是两者的权限都相同:webapps
和webapps_8081
(我已将的组和所有者更改为tomcat
user webapps_8081
):
$ sudo ls -l
drwxrwxr-x 3 tomcat tomcat 4096 Sep 7 14:31 webapps
drwxrwxr-x 2 tomcat tomcat 4096 Sep 7 14:04 webapps_8081
方法2:使用外部内容文件
作为第二种部署方法,我尝试使用上下文文件。我一直在关注克里斯托弗在该主题上的回答
我将战争文件放在了webapps文件夹之外: /var/lib/tomcat9/myapp.war
myapp.xml
文件:
<Context docBase="/var/lib/tomcat9/myapp.war"></Context>
我的地方myapp.xml
在/var/lib/tomcat9/conf/Catalina/localhost/osp.xml
-应用程序表被成功部署localhost:8080/myapp
我的地方myapp.xml
在/var/lib/tomcat9/conf/Catalina_8081/localhost/osp.xml
-我收到以下错误:
07-Sep-2019 16:09:33.483 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor Deploying deployment descriptor [/etc/tomcat9/Catalina_8081/localhost/myapp.xml]
07-Sep-2019 16:09:33.501 SEVERE [main] org.apache.catalina.startup.ContextConfig.beforeStart Exception fixing docBase for context [/myapp]
java.io.IOException: Unable to create the directory [/var/lib/tomcat9/webapps_8081/myapp]
myapp.xml
,以ROOT.xml
并把它放在/var/lib/tomcat9/conf/Catalina/localhost/ROOT.xml
-按日志,应用程序被成功deplyed07-Sep-2019 16:16:36.411 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.16 (Debian)]
07-Sep-2019 16:16:36.438 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor Deploying deployment descriptor [/etc/tomcat9/Catalina/localhost/ROOT.xml]
07-Sep-2019 16:18:06.839 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TL$
07-Sep-2019 16:18:06.923 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of deployment descriptor [/etc/tomcat9/Catalina/localhost/ROOT.xml] has finished in [90,485] ms
但是当打开localhost:8080/
它给我404错误
myapp.xml
,以ROOT.xml
并把它放在/var/lib/tomcat9/conf/Catalina_8081/localhost/ROOT.xml
-我收到以下错误:07-Sep-2019 16:14:08.417 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor Deploying deployment descriptor [/etc/tomcat9/Catalina_8081/localhost/ROOT.xml]
07-Sep-2019 16:14:08.434 SEVERE [main] org.apache.catalina.startup.ContextConfig.beforeStart Exception fixing docBase for context []
java.io.IOException: Unable to create the directory [/var/lib/tomcat9/webapps_8081/ROOT]
如您所见,我在这里有两个主要问题。
问题1为什么Tomcat无法在其中创建新目录webapps_8081
?
问题2为什么将应用程序部署为ROOT.war且在常规映射上运行良好时为什么会出现404错误?
我能够解决问题。
首先,按照本主题中Dung所述的步骤,我已经完全重新安装了Tomcat,并删除了所有剩余的内容:如何从ubuntu 14.04完全删除tomcat 7。这就解决了根映射的问题。因此,结果我不知道是什么原因造成的。
通过创建如何允许Tomcat war应用程序写入文件夹中所述的override.conf文件,解决了权限问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句