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


205

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

http://localhost:8080/MyDynamicWebApp

我想将访问URL更改为:

http://localhost:8080/app

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

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

Answers:


331

我敢肯定你现在已经前进了,但是我还是想回答。

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

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. 在此确认对话框中单击“确定”。

    要求更新服务器配置以匹配更改的上下文根的对话框的屏幕快照

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

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工具包程序员可能需要重建其小部件集。


好答案!您节省了我的生命,这里的其他答案建议您做实际上可以实现这一目标的事情
AndreaNobili 2012年

这是此回复的天才之处:我用Google搜索了此页面,甚至没有阅读标签(我正在使用Visual Studio构建ASP.NET网站)。但是该解决方案仍然有效!
Curt 2014年

我没有这样的选项,但选项为“ Web Project设置”
IntoTheDeep

只是说这workspace/.metadata/.plugins/org.eclipse.wst.server.core/publish/publish.dat是一个二进制文件,我不明白您为什么在那儿提到它,它给Impression这是解决问题的方法
aliopi

但是,如果我们不使用Eclipse ..或任何IDE ..我想以编程方式配置servlet上下文的根路径。我该怎么办?在web.xml中可能是吗?..
Giorgi Tsiklauri

32

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

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


谢谢!这对我有用。但是,它甚至可以在不更改项目属性中上下文根的情况下运行。我在这里想念什么吗?
克里斯,

这在以前的Eclipse版本中也曾经为我工作,但在当前版本(Luna)中,现在只有Clean选项才有效
Griknok

namasety,dhanywaada :)最初更改上下文时,即使在服务器重新启动并清理后也无法正常工作。它仅在发布后有效,我删除了项目并重新阅读。
Yogesh Sanchihar

24

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

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

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

希望这可以帮助。


我不确定您是否要更改所有3个值。Csaba_H的解决方案为我工作,并且只更改了“路径”属性...
克里斯

这对我不起作用-重新启动服务器时,该目录中的文件将被覆盖。Csaba_H的第二版,Tomcat服务器下的“模块”选项卡,似乎是“正确”的方法。
idarwin

17

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

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

但是Didnt为我工作,因为我需要一个* .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 +从服务器视图部署到JBoss。需要将主Web项目部署为ROOT,并且没有Eclipse设置可以解决问题。我复制了Tosha的文件(上面),并将“ ROOT”无引号放在上下文根值中。做完了。谢谢@Tosha!
史蒂文·佛朗哥拉

这可行,但是我想知道为什么它忽略了项目属性中的设置?
Vedran

4
与JBoss WildFly 8.1.0 Final一起使用
亚历山大

我从MyEclipse 8.6迁移到Eclipse,无法使用'/'根上下文进行部署。添加jboss-web.xml成功。服务器:Jboss AS 5.1 Eclipse Luna。
2016年

9

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

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

一些截图:


抱歉,您可以提供更多详细信息吗?
smonff 2015年

哦谢谢!/但是,在GNU / Linux上的Eclipse Luna上,需要a 。
smonff

1
我在Win7上使用了Eclipse Mars(4.5)。
Ray Hulha

6

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

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

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

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


6

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

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


2

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

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

因此,当您单击“运行方式>在服务器上运行”时,它将正确打开。


是的,我们必须。很好的分享。
Dinath

2

我只是想补充一下,如果您根本不希望在根上下文中使用应用程序名称,则只需在Eclipse-> Web Project Settings->中输入“ /”(不带引号,只需使用正斜杠)即可。上下文根条目

这会将webapp部署到http:// localhost:8080 /

当然,这将导致您尝试在服务器上运行的其他Web应用程序出现问题,因此请注意。

让我永远地拼凑起来...所以即使这篇文章已有8年历史了,但希望这对您有所帮助!


0

在Java项目中,打开.settings文件夹。在那里找到名为“ org.eclipse.wst.common.component”的文件。更改标签<wb-module deploy-name =“ NEW_NAME”>。

另外,您可能想在项目属性中更改上下文根


所有在我的项目上看起来不错,并且可以在eclipse中运行就很好了。当我使用maven将其转换为war文件时,它失去了它的根上下文,而不是localhost / events /,它在localhost /上运行,这断开了我的所有链接
JesseBoyd

0

如果使用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才能看到影响。我想知道这种练习在现实生活中是否有意义,但可以奏效。


0

如果使用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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.