Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Tomcat 9中设置带有子文件夹的URL_Java_Url_Subdirectory_Tomcat9 - Fatal编程技术网

Java 在Tomcat 9中设置带有子文件夹的URL

Java 在Tomcat 9中设置带有子文件夹的URL,java,url,subdirectory,tomcat9,Java,Url,Subdirectory,Tomcat9,我有雄猫9。我正在尝试像这样获取URL:http://default.local:8080/default_war/但我的网站仍然只有http://default.local:8080。 我要设置的地址也是由Intellij在Run/Configuration中生成的,所以应该可以设置它。当然我可以在Intellij中编辑它,但我想知道如何在Tomcat9中实现URL子目录 我应该在代码中更改什么?以下是我的设置文件: $ cat /home/u/opt/tomcat/conf/server.x

我有雄猫9。我正在尝试像这样获取URL:
http://default.local:8080/default_war/
但我的网站仍然只有
http://default.local:8080
。 我要设置的地址也是由Intellij在Run/Configuration中生成的,所以应该可以设置它。当然我可以在Intellij中编辑它,但我想知道如何在Tomcat9中实现URL子目录

我应该在代码中更改什么?以下是我的设置文件:

$ cat /home/u/opt/tomcat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <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="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="default.local"  appBase="default"
            unpackWARs="true" autoDeploy="true">
        <Context path="/default_war" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>


    </Engine>
  </Service>
</Server>
u@i3 ~/opt/tomcat
$cat/home/u/opt/tomcat/conf/server.xml
u@i3~/opt/tomcat

$cat conf/Catalina/default.local/ROOT.xml
u@i3~/opt/tomcat
$ 

发生这种情况是因为您正在使用名为
ROOT.xml的上下文文件

ROOT
应用程序是从基本URL提供服务的应用程序-在您的例子中,
http://default.local:8080

根据您部署战争的具体方式,您需要采取以下步骤:

1-停止Tomcat并将
ROOT.xml
文件的名称更改为
default\u war.xml

上述步骤意味着您不再使用基于
根目录的webapp(有关详细信息,请参阅下面的最后一条注释)

2-因为您已经在
server.xml
中指定了
appBase=“default”
,所以在重新启动Tomcat之前,您可能还需要转到该
default
文件夹并删除其中的任何子文件夹

我希望那里会有一个
ROOT
文件夹,因为您已经使用了
ROOT.xml
上下文文件。您不需要该文件夹,因为它将继续从基本URL为您的webapp提供服务

当您重新启动Tomcat时,您应该会在
default
文件夹中看到一个名为
default\u war
的新文件夹,这是您的应用程序将从中提供服务的地方,它应该只在
http://default.local:8080/default_war/


背景说明:在Tomcat中,
ROOT
是一种特殊情况。下载并安装Tomcat的新安装时,您将在
webapps
目录中看到名为
ROOT
的文件夹。这就是Tomcat欢迎/祝贺页面的主要来源,就像您的
ROOT.xml
内容一样,它也是从基本URL提供的。您可以在中所示的“命名”表中看到一些可能的配置。

这是一个很好的答案,它让我向前迈出了一大步。谢谢
$ cat conf/Catalina/default.local/ROOT.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="${catalina.base}/deploy/default_war.war">
</Context>
u@i3 ~/opt/tomcat
$