如何在Eclipse中更改动态Web项目的上下文根?

210

我在Eclipse中开发了一个动态Web项目。 我可以使用以下URL通过浏览器访问应用程序:

http://localhost:8080/MyDynamicWebApp

我想要将访问URL更改为:

http://localhost:8080/app

我改变了项目的"属性 | Web 项目设置 | 上下文根",以此来实现目标。然而,网页应用程序仍然具有相同的访问URL。我已经在Tomcat上重新部署了应用程序并重新启动了Tomcat,但是访问URL仍然与之前相同。

我发现WAR文件中没有附带server.xml文件。在没有附加server.xml文件的情况下,Tomcat如何确定我的Web应用程序的上下文根为/MyDynamicWebApp,并允许我通过该上下文根URL访问应用程序?

14个回答

345
一些答案提供了解决方法。实际上,您需要清理并重新发布项目以"激活"新的URI。这可以通过右键单击服务器(在Servers视图中)并选择Clean来完成。然后启动(或重新启动)。这里的大多数其他答案建议您执行实际上会实现此目的的操作。
正在更改的文件是workspace/.metadata/.plugins/org.eclipse.wst.server.core/publish/publish.dat,除非您的工作区中有多个服务器,在这种情况下,它将是该路径上的publishN.dat。

不确定这是否是恰当的礼仪,但我正在编辑此答案,以给出Eclipse Indigo的确切步骤。

  1. 在项目的属性中,选择Web项目设置

  2. 上下文根更改为app

    Eclipse项目属性Web项目设置的屏幕截图

  3. 选择窗口 > 显示视图 > 服务器

  4. 通过单击红色方框("停止服务器"工具提示)或上下文单击服务器列表来选择"停止"来停止服务器。

  5. 在要使用的服务器上,上下文菜单单击选择"清除..."。

    输入图像描述

  6. 在此确认对话框中单击OK。

    对话框的屏幕截图询问是否更新服务器配置以匹配更改的上下文根

现在,您可以使用新的"app" URL运行应用程序,例如:

http://localhost:8080/app/

在Eclipse之外,在生产服务器上执行此操作甚至更容易-->重命名WAR文件。将您的Vaadin应用程序导出为WAR文件(文件 > 导出 > Web > WAR文件)。将WAR文件移动到Web服务器的Servlet容器中,例如Tomcat。将WAR文件重命名,此处为app.war。当您启动Servlet容器时,大多数容器(如Tomcat)将自动部署该应用程序,其中包括将war文件扩展到文件夹中。在这种情况下,我们应该看到一个名为app的文件夹。您应该已经准备就绪了。测试您的URL。对于诸如“example.com”的域,这将是:

http://www.example.com/app/

Vaadin工具包程序员如果使用视觉插件,可能需要重新构建他们的小部件集。


太棒了!你救了我一命。这里的大部分其他答案都建议你做一些实际上能达到这个目标的事情。 - AndreaNobili
这个回复的妙处在于:我通过谷歌找到了这个页面,甚至没有读标签(我正在使用Visual Studio构建一个ASP.NET网站)。但是解决方案仍然有效! - Curt
我没有“Web 项目设置”这样的选项。 - IntoTheDeep
只是说 workspace/.metadata/.plugins/org.eclipse.wst.server.core/publish/publish.dat 是一个二进制文件,我不明白你为什么在上面提到它,这会给人留下它是解决问题的方案的印象。 - aliopi
1
但是如果我们不使用Eclipse..或任何IDE..我想以编程方式配置servlet上下文的根路径。我该怎么做?可能在web.xml中吗? - Giorgi Tsiklauri
@GiorgiTsiklauri - 你有没有找到如何在web.xml中配置根路径的答案? - Uday Kiran

33

在项目属性中更改上下文根后,您需要从Tomcat中删除您的Web应用程序(使用服务器上下文菜单中的“添加和删除...”),重新部署,然后重新添加您的应用程序并重新部署。这对我有用。

如果您遇到问题,可以选择另一种方法:在Servers视图中选择Tomcat服务器。双击该服务器(或在上下文菜单中选择“打开”)会带来一个多页编辑器,在其中有一个模块页面。在此处,您可以更改模块的根上下文(在此页面上称为路径)。


谢谢!这对我起了作用。但是,甚至在不更改项目属性中的上下文根的情况下也可以工作。我错过了什么吗? - Chris
这在之前的Eclipse版本中对我也起作用,但在当前版本(Luna)中只有Clean选项现在起作用。 - Griknok
当我最初更改了我的上下文时,即使在服务器重新启动和清理后,它也没有起作用。只有在我删除项目并重新添加后才起作用。感谢您的阅读! - Yogesh Sanchihar

24

如果您正在从Eclipse运行Tomcat,则它不会使用实际Tomcat安装的配置。它使用由其创建并存储在“Servers”项目下的Tomcat配置。如果查看Eclipse工作区,您应该会看到一个名为“Servers”的项目。展开此“Servers”项目,您将遇到server.xml。打开此文件并向下滚动,您应该会看到类似以下内容:

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

在这里,您可以将项目上下文路径更改为其他内容。

希望能对您有所帮助。


我不确定您是否想更改所有3个值。Csaba_H的解决方案对我有用,它只更改“路径”属性... - Chris
这个对我没用 - 当你重新启动服务器时,该目录中的文件会被覆盖。Csaba_H的第二个版本,在Tomcat服务器下的模块选项卡中,似乎是“正确”的方法。 - idarwin

17

我尝试了Russ Bateman在这篇文章中建议的解决方案:

http://localhost:8080/Myapp改为http://localhost:8080/somepath/Myapp

但是对我来说没有用,因为我需要一个*.war文件来保持配置,而不是在本地机器上的单个服务器实例。

参考资料

为了做到这一点,我需要将jboss-web.xml放置在WEB-INF目录下。

<?xml version="1.0" encoding="UTF-8"?>
 <!--
Copyright (c) 2008 Object Computing, Inc.
All rights reserved.
-->
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 4.2//EN"
"http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">

  <jboss-web>
  <context-root>somepath/Myapp</context-root>
  </jboss-web>

这对我有用。环境=Eclipse + m2e + m2e-wtp + 从Servers视图部署到JBoss。需要将主Web项目部署为ROOT,没有任何Eclipse设置可以解决问题。我复制了Tosha(上面)的文件,并将“ROOT”(不带引号)作为上下文根值放置。完成了。谢谢@Tosha! - Steven Francolla
这个可以运行,但是我想知道为什么它忽略了项目属性中的设置? - Vedran
4
适用于 JBoss WildFly 8.1.0 Final。 - alexander
我从MyEclipse 8.6迁移到Eclipse,但无法使用'/'根上下文进行部署。添加jboss-web.xml成功解决了问题。服务器:Jboss AS 5.1 Eclipse Luna。 - Sai

10

在Eclipse的Web模块编辑对话框中将路径设置为空使我能够在URL中访问该项目而无需任何路径组件(即ROOT)

您可以通过选择“服务器”视图中的Tomcat并按F3键或双击它来打开Web模块编辑对话框。

一些截图:


抱歉,您能提供更多细节吗? - smonff
哦,谢谢!在GNU/Linux上的Eclipse Luna中,需要使用/ - smonff
1
我在Win7上使用Eclipse Mars(4.5)。 - Ray Hulha

6

我知道答案已经被接受了。但是,如果有人正在使用Maven想要达到相同的效果,只需在Maven build 中设置finalName为您想要命名的任何名称,并执行maven -> 更新项目。

<build>
    <finalName><any-name></finalName>
    <plugins><provide-plugins-needed></plugins>
<build>

6

Apache tomcat将项目的上下文路径存储在server.xml路径中。 对于Eclipse上的每个Web项目,都有一个标签,您可以从那里更改它。
假设服务器上部署了两个或三个项目。 对于每个项目,上下文路径都存储在标签中。 此标签位于在Eclipse上创建的Server内的server.xml文件中。

我有一个项目,在服务器上的上下文根路径为:

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

此路径代表您的Web应用程序的上下文路径。通过更改此路径,您的Web应用程序上下文路径将发生改变。

4
如果项目是maven,则需要在pom.xml文件中更改“finalName”,然后将项目更新为Maven。这对我有效。

2
在Glassfish中,您还必须更改文件WEB-INF/glassfish-web.xml。
<glassfish-web-app>
    <context-root>/myapp</context-root>
</glassfish-web-app>

所以,当你点击“运行为>在服务器上运行”时,它会正确打开。

是的,我们必须这样做。分享得好。 - Alexsoyes

2
我想补充一下,如果您不想在根上下文中使用应用程序名称,您可以在Eclipse --> Web项目设置 --> 上下文根条目中输入“/”(没有引号,只有斜杠),这将部署Web应用程序到http://localhost:8080/
当然,这会导致您尝试在服务器上运行其他Web应用程序时出现问题,请注意这一点。
我花了很长时间才拼凑出来...所以即使这篇文章已经8年了,希望这仍然能帮助到某些人!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接