如何删除我的Jetty webapp url的根元素?

时间:2012-01-13 16:11:03

标签: java url maven jetty

我正在运行Java webapp(我们称之为mywebapp)。

目前我通过本地指向:

来访问此网页应用中的页面
http://localhost:9000/mywebapp/mystuff

但是,我需要使用以下方式访问它:

http://localhost:9000/mystuff

我该怎么做?我试过搞乱一些混乱,但无济于事......

这是我当前的root.xml:

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
    <Set name="contextPath">/root</Set>
    <Set name="war">
        <SystemProperty name="app.webapps.path"/>/mywebapp.war
    </Set>
</Configure>

也尝试过:

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
    <Set name="contextPath">/</Set>
    <Set name="war">
        <SystemProperty name="app.webapps.path"/>/mywebapp.war
    </Set>
</Configure>

我正在使用Maven - 不确定这是否会产生影响。

谢谢!

2 个答案:

答案 0 :(得分:4)

为了将您的上下文路径设置为"/",您将需要使用Context部署。 注意:您必须为路径规范映射原因指定上下文路径字符串。空上下文路径字符串""仅作为从对上下文根的请求的映射结果有效。请参见servlet规范的第12.2节

在Jetty 7.x中,上下文路径分配由分配给DeploymentManager的AppProviders处理。

默认情况下,在Jetty Distribution上, 两者 启用WebAppProvider和ContextProvider。稍后要了解这一点很重要,因为它会影响您决定放置mywebapp.war文件的位置。

查看${jetty.home}/start.ini文件,您会看到它包含对etc/jetty-webapps.xmletc/jetty-contexts.xml的引用

WebAppProvider的作用是关注任何可部署应用程序(例如* .war)的${jetty.home}/webapps/目录,并将它们部署到与文件名同名的上下文中。换句话说,${jetty.home}/webapps/MyApp-2.4.war已部署到上下文"/MyApp-2.4"中。还有一个特殊的“root.war”保留字将部署到上下文"/"中。虽然这是最简单的部署机制,但它牺牲了对部署细节的控制。

ContextProvider的作用是关注任何jetty-xml格式的可部署上下文的${jetty.home}/contexts/目录。这种部署机制使您可以最大限度地控制部署,xml文件可以控制最终解析为org.eclipse.jetty.server.handler.ContextHandler基类的任何内容,其中WebAppContext(wars / servlets / etc)是其中的一部分。 最常见的用途是指定基于WebAppContext的xml文件,并控制诸如构成Web应用程序的文件和目录,要使用的临时目录,甚至要使用的Context Path。

您要做的是:

  1. 确保在start.ini中启用了基于ContextProvider的部署(确保etc/jetty-context.xml存在)
  2. 创建一个${jetty.home}/contexts/mywebapp.xml,声明<Set name="contextPath">/</Set>选项。
  3. 如果你的start.ini中有etc/jetty-webapps.xml将mywebapp.war放在${jetty.home}/webapps中,因为这会导致WebAppProvider也部署它webapp并使您的部署混乱。
  4. 最后,您可以在jetty distribution本身看到这是如何完成的,只需打开${jetty.home}/contexts/test.xml并环顾四周即可。您会看到它通过ContextProvider将${jetty.home}/webapps/test.war用于${jetty.home}/contexts/test.xml上下文路径来加载"/"

    另一个注意事项,请查看日志。

    2012-01-13 13:56:28.779:INFO:oejsh.ContextHandler:已启动oejwWebAppContext {/,file:/tmp/jetty-0.0.0.0-8080-test.war -_- any- / webapp / },/家庭/乔金姆/代码/码头/发行版/码头 - 分布 - 7.6.0.RC3 / web应用/ test.war

    这告诉我WebAppContext是

    • {/,(根上下文路径)
    • 开始
    • 使用临时/工作目录file:/tmp/jetty-0.0.0.0-8080-test.war-_-any-/webapp/
    • 使用/home/joakim/code/jetty/distros/jetty-distribution-7.6.0.RC3/webapps/test.war
    • 中指定的网络应用程序

    更新:澄清有关空上下文路径的声明。

答案 1 :(得分:2)

请参阅http://wiki.eclipse.org/Jetty/Howto/Deploy_Web_Applications

  

如果webapp名为root.war,或者该目录名为root / then   Jetty在/ context上部署它。

PS:我从未使用过Jetty,我花了3秒钟才找到Google。