如何在 Tomcat 7.0中设置 Web 应用程序的上下文路径

我知道我可以把我的 webapp (或者 WAR 文件)重命名为 ,但恕我直言,这是一种糟糕的方式。现在我查了公猫医生,上面说

建议不要将元素直接放置在 Xml 文件

所以我尝试了另一种方法。

单个 Context 元素可以显式定义: 在 应用程序文件中的/META-INF/context.xml 文件。

所以我用下面的代码创建了一个 /META-INF/context.xml,

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/"/>

但是在重新启动服务器进行部署之后,它仍然无法在“/”加载上下文,它仍然用 "/<WEB_APP_NAME>"加载上下文

任何有用的建议。

554814 次浏览

你可以做的是:

<catalina_home>/conf/Catalina/localhost/中添加一个名为 ROOT.xml的文件

这个 ROOT.xml 将覆盖该引擎和主机(Catalina 和 localhost)的 tomcat 安装的根上下文的默认设置。

在 ROOT.xml 文件中输入以下内容;

<Context
docBase="<yourApp>"
path=""
reloadable="true"
/>

在这里,<yourApp>是您的应用程序的名称. . :)

好了,您的应用程序现在是默认应用程序,将显示在 http://localhost:8080

但是,有一个副作用: 您的应用程序将被加载两次。一次是 localhost:8080,一次是 localhost:8080/yourApp。为了解决这个问题,可以将应用程序 OUTSIDE <catalina_home>/webapps放在 ROOT.xml 的 docBase 标记中,并使用相对路径或绝对路径。就像这样

<Context
docBase="/opt/mywebapps/<yourApp>"
path=""
reloadable="true"
/>

然后一切都会好起来的!

这是我使用过的 唯一解决方案。

<Context path="" docBase="yourAppContextName">
 

<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>


</Context>

更新:
它可以是: conf/server.xml
或输入: conf/context.xml

这个小代码对我很有用,使用虚拟主机

<Host name="my.host.name" >
<Context path="" docBase="/path/to/myapp.war"/>
</Host>

下面这招对我很管用。

1)在 tomcat 的 server.xml 文件(conf 文件夹内)中注释/删除以下配置。

2)删除 Tomcat webapps 文件夹中现有的 ROOT 文件夹(如果有的话)。并将 war (例如: test.war)文件重命名为 ROOT.war。

记住,在将 war 文件重命名为 ROOT.war“ ROOT”时,应该使用大写。

限制: 您只能在一个 tomcat 实例中部署一个应用程序。

我面对这个问题已经有一个月了,把 context 标签放在 server.xml 中是不安全的,它会影响到为所有其他主机部署的 context 元素,对于大型应用程序来说,它会带来连接错误也不是很好的隔离,例如你可以通过文件夹名称 domain2.com/domain1folder 访问其他网站! !也加载了两次数据库会话连接! 另一种方法是放置 ROOT.xml 文件,该文件具有带有完整路径的上下文标记,例如:

 <Context path="" docBase="/var/lib/tomcat7/webapps/ROOT" />

在 conf/catalina/webappsfoldername 中 并在 webappsfoldername 中将 war 文件部署为 ROOT.war 并指定主机 这样

 <Host name="domianname"  appBase="webapps2" unpackWARs="true"  autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false" >


<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs"  prefix="localhost_log." suffix=".txt"
timestamp="true"/>
</Host>

在这种方式下也对同类型应用程序的用户会话有很好的隔离性! 如果 app1和 app2一样,你可以在 app1里面登录,你可以通过服务器端会话自动登录到 app2? ! 因此,您必须将用户会话保留在客户端缓存中,而不是使用 jsessionid! 我们可以改变引擎名从本地主机解决它。 但是,让我们说,与公猫玩需要更多的时间比与其他猫玩!

最快也可能是最好的解决方案是在 <TOMCAT_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml中有以下内容

<Context
docBase="/your_webapp_location_directory"
path=""
reloadable="true"
/>

您的网络应用程序将在 http://<host>:<port>/提供

不建议像 server.xml 或 ROOT.xml 那样更新服务器配置。

您可以将 context.xml 配置文件放在 Web 应用程序 META-INF 目录下,其中包含上下文路径设置。这会覆盖默认的服务器设置吗?

例如:

<Context docBase="yourAppName" path="/yourAppPath" reloadable="true">

<Context docBase="yourAppName" path="" reloadable="true">

转到 Tomcat server.xml 文件并设置路径为空

在 Tomcat 9.0中,我只需要在 server.xml中更改以下内容

<Context docBase="web" path="/web" reloadable="true" source="org.eclipse.jst.jee.server:web"/>

<Context docBase="web" path="" reloadable="true" source="org.eclipse.jst.jee.server:web"/>

雄猫8: 经过多次搜索,这只是工作代码: 在 server.xml 中

<!-- Set /apple as default path -->
<Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="apple">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
</Host>

重新启动 Tomcat,确保当您访问127.0.0.1:8080时,它将显示127.0.0.1:8080/apple 中的内容

我的项目是由 netbeans 创建的 java web 应用程序,我在项目配置中设置上下文路径,没有其他东西,甚至我把 apple.war 放在 webapps 文件夹中。

对我来说,两个答案都奏效了。

  1. 在/conf/Catalina/localhost/中添加名为 ROOT.xml 的文件
<Context
docBase="/tmp/wars/hpong"
path=""
reloadable="true"
/>
  1. 在 server.xml 中添加条目
<Service name="Catalina2">
<Connector port="8070" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8743" />
<Engine name="Catalina2" defaultHost="localhost">
<Host name="localhost"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/tmp/wars/hpong"  reloadable="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
</Host>
</Engine>
</Service>

注意: 在上下文中声明 docBase 时,忽略 Host 上的 appBase。

  1. 然而,我更喜欢将我的战争名称转换为 ROOT.war,并将其置于网络应用程序之下。因此,现在来自其他战争(上下文路径)的无法匹配的 url 请求将进入这场战争。这是处理 ROOT (“/* *”)上下文路径的更好方法。

第二种选择是(双重)从 Webapps 文件夹加载 war。而且它只需要一个令人头疼的未压缩的 war 文件夹。

在 Tomcat 8.X 中,在 server.xml 的 Tomcat 主目录/conf/文件夹下,您可以在 <Host>标记下添加 <Context>标记,如下所示。但是您必须重新启动服务器才能生效

  <Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="true">


<Context docBase="${catalina.base}\webapps\<Your App Directory Name>" path="<your app path you wish>" reloadable="true" />
</Host>

或者,如果您正在使用 Tomcat 7.X,您可以在项目中的 WEB-INF 文件夹中添加 context.xml 文件。我使用的文件的内容如下所示。我觉得挺好的。在这种情况下,您不必重新启动服务器。

<?xml version="1.0" encoding="UTF-8"?>


<Context docBase="${catalina.base}\webapps\<My App Directory Name>" path="<your app path you wish>" reloadable="true" />

最简单和灵活的解决办法如下: 在 ${ Tomcat _ home }/config/server.xml 中

更改 主持人元素下面的 AutoDeploy = “ false”loyOnStartup = “ false”,如 这是必须的。下面

<Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="false" deployOnStartup="false">

主持人元素下添加以下一行。

<Context path="" docBase="ServletInAction.war"  reloadable="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

使用上述方法,我们可以在具有不同上下文路径名称的 webapps 下添加尽可能多的应用程序。