如何使用jetty runner(独立jar)在根上下文中部署静态内容

时间:2015-11-11 17:50:15

标签: jetty

更新

我注意到,如果我没有部署WAR文件,我可以像Joakim Erdfelt所说的那样,我会调查我对战争做了哪些改变导致根上下文失败。

我知道如何将静态内容部署到任何上下文:

  sudo java  -cp jetty-runner-9.2.13.v20150730.jar org.eclipse.jetty.runner.Runner  --port 80 MYAPP.war --path /context1 site/MyStaticWebSite 

//will deploy mysite in
//127.0.0.1/context1/index.html

但我想在根

中部署它
 127.0.0.1/index.html

在文档和谷歌中都没有引用。 https://webtide.com/downloads/ 如果我这样做:

sudo java  -cp jetty-runner-9.2.13.v20150730.jar org.eclipse.jetty.runner.Runner  --port 80 MYAPP.war --path / site/MyStaticWebSite

我明白了:

2015-11-11 21:05:27.498:INFO::main: Logging initialized @121ms
2015-11-11 21:05:27.513:INFO:oejr.Runner:main: Runner
2015-11-11 21:05:27.618:INFO:oejs.Server:main: jetty-9.2.13.v20150730
Nov 11, 2015 9:05:34 PM org.glassfish.jersey.server.ApplicationHandler initialize
INFO: Initiating Jersey application, version Jersey: 2.6 2014-02-18 21:52:53...
2015-11-11 21:05:35.323:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@33833882{/,file:/tmp/jetty-0.0.0.0-80-MYAPP.war-_-any-4618238315169821839.dir/webapp/,AVAILABLE}{file:/home/ubuntu/MYAPP.war}
2015-11-11 21:05:35.744:WARN:oeja.AnnotationConfiguration:main: ServletContainerInitializers: detected. Class hierarchy: empty
2015-11-11 21:05:35.871:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@200a570f{/,file:site/MyStaticWebSite/,AVAILABLE}{/root/MyStaticWebSite/}
2015-11-11 21:05:35.872:WARN:oejsh.RequestLogHandler:main: !RequestLog
2015-11-11 21:05:35.890:INFO:oejs.ServerConnector:main: Started ServerConnector@2504eefd{HTTP/1.1}{0.0.0.0:80}
2015-11-11 21:05:35.891:INFO:oejs.Server:main: Started @8517ms

根网页显示以下内容:

Not showing web content

2 个答案:

答案 0 :(得分:2)

首先,升级!

9.1.0.M0是一个不稳定的/ beta里程碑版本。

使用更新近且更稳定的内容(9.2.13.v20150730 of jetty-runner怎么样?)

如果您希望将其部署在根上下文中,请使用--path /(不是--path /context1

<强>更新

啊,你有2个webapps,而泽西在混合中,没有意识到。

  1. WebApp 1:上下文:/路径:MYAPP.war
  2. WebApp 2:上下文:/路径:site/MyStaticWebSite
  3. 不,你不能在同一个上下文路径上同时拥有这两个servlet规范不支持的路径。

    这是因为每个webapp一旦输入就必须终止。

    情景:

    • 因此,由于上下文路径为/,因此两个webapps都匹配
    • 输入的第一个将为请求提供服务
    • 如果servlet具有匹配的url-pattern,则称该servlet为
    • 如果没有servlet匹配,则使用DefaultServlet。
    • DefaultServlet将查找与url-pattern / pathInfo
    • 匹配的静态资源
    • 如果没有静态资源匹配,则DefaultServlet会产生错误。

    该webapp必须产生响应。没有机会跳过webapp并进入下一个。

    然而,Jersey的这种行为更加复杂,它的默认配置接管所有静态资源服务本身,从不允许Jetty甚至有机会提供这些静态资源。

    你需要做什么。

    • 您的MYAPP.war必须拥有静态资源。
    • 如果你有“外部”静态资源,那些必须由MYAPP.war中的某些东西提供 - 要么是正式的servlet,要么是泽西岛的东西。建议将外部行为设置为不同的网址格式,例如/external/*/static/*,而不是/*

答案 1 :(得分:0)

我终于找到了如何做到这一点,

而不是:

sudo java  -cp jetty-runner-9.2.13.v20150730.jar org.eclipse.jetty.runner.Runner  --port 80 MYAPP.war --path / site/MyStaticWebSite

执行:

sudo java  -cp jetty-runner-9.2.13.v20150730.jar org.eclipse.jetty.runner.Runner  --port 80 --path /MYAPP MYAPP.war --path / site/MyStaticWebSite

MYAPP正在按照web.xml中的规定部署到/ MYAPP上下文,但不允许按照规范在根上下文中部署任何内容。

然后问题是/ MYAPP无法到达,但/ MYAPP / MYAPP可能,这是因为web.xml说要将服务部署到/ MYAPP所以我不得不改变它

来自:

<servlet-mapping>
   <servlet-name>MY_SERVLET_NAME</servlet-name>
   <url-pattern>/MYAPP/*</url-pattern>
</servlet-mapping>

为:

<servlet-mapping>
   <servlet-name>MY_SERVLET_NAME</servlet-name>
   <url-pattern>/*</url-pattern>
</servlet-mapping>

现在可行。