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

Posted

技术标签:

【中文标题】如何在 Eclipse 中更改动态 Web 项目的上下文根?【英文标题】:How to change context root of a dynamic web project in Eclipse? 【发布时间】:2011-01-27 02:31:19 【问题描述】:

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

http://localhost:8080/MyDynamicWebApp

我想将访问 URL 更改为:

http://localhost:8080/app

为此,我从项目“属性 | Web 项目设置 | 上下文根”中更改了上下文根。 但是,Web 应用程序仍然具有相同的访问 URL。我已经在Tomcat上重新部署了应用并重新启动了Tomcat,但是访问URL和之前一样。

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

【问题讨论】:

【参考方案1】:

我确定你现在已经继续前进了,但我想我还是会回答的。

其中一些答案提供了解决方法。实际上必须发生的是您清理并重新发布您的项目以“激活”新的 URI。这是通过右键单击您的服务器(在“服务器”视图中)并选择“清理”来完成的。然后你开始(或重新启动它)。这里的大多数其他答案都建议您做一些实际上可以实现这一目标的事情。

正在更改的文件是 workspace/.metadata/.plugins/org.eclipse.wst.server.core/publish/publish.dat,除非您的工作区中有多个服务器,在这种情况下,同一路径上的文件将是 publishN.dat

希望这对某人有所帮助。


不确定这是否是正确的礼仪——我正在编辑这个答案,以便为 Eclipse Indigo 提供确切的步骤。

    在您项目的Properties中,选择Web Project Settings

    上下文根更改为app

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

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

    在您要使用的服务器上,右键单击以选择“清理...”。

    在此确认对话框中单击“确定”。

现在您可以使用新的“应用”网址运行您的应用,例如:

http://localhost:8080/app/

在 Eclipse 之外,在您的生产服务器上执行此操作更加容易 --> 重命名 war 文件。将您的 Vaadin 应用程序导出为 WAR 文件(文件 > 导出 > Web > WAR 文件)。将 WAR 文件移动到 Web 服务器的 servlet 容器,例如 Tomcat。重命名您的 WAR 文件,在本例中为 app.war。当您启动 servlet 容器时,大多数(例如 Tomcat)会自动部署应用程序,其中包括将 war 文件扩展至文件夹。在这种情况下,我们应该会看到一个名为 app 的文件夹。你应该很高兴。测试您的网址。对于诸如 *example.com 之类的域,这将是:

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

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

【讨论】:

很好的答案!!!你救了我的命,这里的其他答案建议你做一些实际上可以实现这一目标的事情 这是这个回复的天才之处:我用谷歌搜索了这个页面,甚至没有阅读标签(我正在使用 Visual Studio 构建一个 ASP.NET 网站)。但解决方案还是奏效了! 我没有这样的和选项“Web项目设置” 只是说workspace/.metadata/.plugins/org.eclipse.wst.server.core/publish/publish.dat是一个二进制文件,我不明白你为什么在上面提到它,它给人的印象是解决问题的方法 但是如果我们不使用 Eclipse.. 或任何 IDE.. 我想以编程方式配置 servlet 上下文的根路径。我该怎么做?可能在 web.xml 中?...【参考方案2】:

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

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

【讨论】:

谢谢!这对我有用。但是,它甚至可以在不更改项目属性中的上下文根的情况下工作。我在这里错过了什么吗? 这在以前的 Eclipse 构建中也适用于我,但在当前构建 (Luna) 中,现在只有 Clean 选项有效 namasety, dhanywaada :) 当我最初更改我的上下文时,即使在服务器重新启动和清理后它也不起作用。它只在帖子中起作用,我删除了项目并重新阅读。【参考方案3】:

如果您从 Eclipse 运行 Tomcat,它不会使用实际 Tomcat 安装中的配置。它使用它创建并存储在“服务器”项目下的 Tomcat 配置。如果您查看 Eclipse 工作区,您应该会看到一个名为“Servers”的项目。展开那个“Servers”项目,你会遇到 server.xml。打开此文件并一直滚动到底部,您应该会看到如下内容:-

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

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

希望这会有所帮助。

【讨论】:

我不确定您是否要更改所有 3 个值。 Csaba_H 的解决方案对我有用,只会改变“路径”属性... 这个对我不起作用 - 当您重新启动服务器时,该目录中的文件会被覆盖。 Csaba_H 的第二版,Tomcat 服务器下的模块选项卡,似乎是“正确”的方法。【参考方案4】:

我在帖子中尝试了 Russ Bateman 建议的解决方案

http://localhost:8080/Myapphttp://localhost:8080/somepath/Myapp

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

Reference

为了做到这一点,我需要将 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 + 从服务器视图部署到 JBoss。需要将主 Web 项目部署为 ROOT 并且没有 Eclipse 设置可以解决问题。我复制了 Tosha 的文件(上图)并将“ROOT”无引号作为上下文根值。做完了。谢谢,@Tosha! 这行得通,但我想知道为什么它忽略了项目属性中的设置? 适用于 JBoss WildFly 8.1.0 Final 我从 MyEclipse 8.6 迁移到 Eclipse,无法使用“/”根上下文进行部署。添加 jboss-web.xml 成功。服务器:Jboss AS 5.1 Eclipse Luna。【参考方案5】:

在 Eclipse Web 模块编辑对话框中将路径设置为空,使我能够在 URL 中没有任何路径组件(即 ROOT)的情况下访问项目

如果您在“服务器”视图中选择 Tomcat 或双击它,则可以按 F3 进入 Web 模块编辑对话框。

一些截图:

【讨论】:

抱歉,您能提供更多详细信息吗? 哦,谢谢!在 GNU/Linux 上的 Eclipse Luna 上,/ 是必需的。 我在 Win7 上使用了 Eclipse Mars (4.5)。【参考方案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 应用上下文路径将发生变化。

【讨论】:

【参考方案7】:

我知道答案已被接受。但是,以防万一任何使用 Maven 的人想要实现相同的目标,只需将 maven build 中的 finalName 设置为您想要提供的任何名称并执行 maven ->更新项目

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

【讨论】:

【参考方案8】:

如果项目是 maven,请更改 pom.xml 中的“finalName”并将项目更新为 Maven。这对我有用。

【讨论】:

【参考方案9】:

在 Glassfish 中,您还必须更改文件 WEB-INF/glassfish-web.xml

<glassfish-web-app>
    <context-root>/myapp</context-root>
</glassfish-web-app>

所以当你点击“Run as> Run on server”时,它会正确打开。

【讨论】:

是的,我们必须。很好的分享。【参考方案10】:

我只是想补充一点,如果您根本不希望您的应用程序名称出现在根上下文中,您只需在 Eclipse 中添加“/”(没有引号,只是正斜杠) --> Web 项目设置--> 上下文根条目

这会将 web 应用程序部署到 http://localhost:8080/

当然,这会导致您尝试在服务器上运行的其他 web 应用出现问题,因此请注意这一点。

我花了很长时间才把它拼凑起来......所以即使这篇文章已经有 8 年了,但希望这仍然可以帮助到别人!

【讨论】:

【参考方案11】:

在 java 项目中,打开 .settings 文件夹。在那里找到名为“org.eclipse.wst.common.component”的文件。更改标签 .

您可能还想更改项目属性中的上下文根

【讨论】:

所有在我的项目上看起来不错的东西,它在 Eclipse 中运行得很好。当我使用 maven 将它转换为 war 文件时,它失去了它的根上下文,而不是 localhost/events/ 它在 localhost/ 上运行,这会破坏我的所有链接【参考方案12】:

如果使用 eclipse 来部署你的应用程序。我们可以使用这个maven插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-eclipse-plugin</artifactId>
    <version>2.10</version>
    <configuration>
        <wtpversion>2.0</wtpversion>
        <wtpContextName>newContextroot</wtpContextName>
    </configuration>
</plugin>

现在转到您的项目根文件夹并在该位置打开 cmd 提示符 输入这个命令:

mvn eclipse:eclipse -Dwtpversion=2.0

您可能需要重新启动 eclipse ,或者在服务器视图中删除服务器并创建 agian 以查看效果。我想知道这个练习在现实生活中是否有意义但有效。

【讨论】:

【参考方案13】:

如果使用maven java ee 7/8企业应用,需要编辑EAR项目的pom.xml

<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.8</version>
            <configuration>
                <version>6</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <modules>
                    <webModule>
                        <groupId>com.sample</groupId>
                        <artifactId>ProjectName-web</artifactId>
                        <contextRoot>/myproject</contextRoot>
                    </webModule>
                </modules>
            </configuration>
        </plugin>
        ...
    </plugins>
</build>

【讨论】:

【参考方案14】:

我有一些替代资源... 但是以编程方式将通过从您的服务器更改 server.xml 文件.....

这是一个真实世界项目的配置方式......改变上下文中的路径。

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

【讨论】:

以上是关于如何在 Eclipse 中更改动态 Web 项目的上下文根?的主要内容,如果未能解决你的问题,请参考以下文章

eclipse怎么导入dynamic web project

如何在eclipse中获取动态项目的绝对路径

如何在 Amazon EC2 上部署 Eclipse Java Web 动态项目?

如何在eclipse上创建一个web项目

带有 Maven 和 Eclipse 的 Java 动态 Web 项目

如何将现有的 eclipse GWT 项目转换为动态 Web 项目?