我正在运行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 - 不确定这是否会产生影响。
谢谢!
答案 0 :(得分:4)
为了将您的上下文路径设置为"/"
,您将需要使用Context部署。
注意:您必须为路径规范映射原因指定上下文路径字符串。空上下文路径字符串""
仅作为从对上下文根的请求的映射结果有效。请参见servlet规范的第12.2节
在Jetty 7.x中,上下文路径分配由分配给DeploymentManager的AppProviders处理。
默认情况下,在Jetty Distribution上, 两者 启用WebAppProvider和ContextProvider。稍后要了解这一点很重要,因为它会影响您决定放置mywebapp.war文件的位置。
查看${jetty.home}/start.ini
文件,您会看到它包含对etc/jetty-webapps.xml
和etc/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。
您要做的是:
etc/jetty-context.xml
存在)${jetty.home}/contexts/mywebapp.xml
,声明<Set name="contextPath">/</Set>
选项。etc/jetty-webapps.xml
,不将mywebapp.war放在${jetty.home}/webapps
中,因为这会导致WebAppProvider也部署它webapp并使您的部署混乱。最后,您可以在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:
PS:我从未使用过Jetty,我花了3秒钟才找到Google。如果webapp名为root.war,或者该目录名为root / then Jetty在/ context上部署它。