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

如何使用jetty runner(独立jar)在根上下文上部署静态内容 更新:,jetty,Jetty,我注意到,如果我不部署WAR文件,我可以按照Joakim Erdfelt所说的那样做,我将调查我对WAR所做的哪些更改导致根上下文的失败 我知道如何将静态内容部署到任何上下文: 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 my

我注意到,如果我不部署WAR文件,我可以按照Joakim Erdfelt所说的那样做,我将调查我对WAR所做的哪些更改导致根上下文的失败


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

  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
在文档和谷歌中都没有引用。 如果我这样做:

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
根网页显示以下内容:

首先,升级

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

使用更新、更稳定的东西(怎么样?)

如果要在根上下文上部署它,请使用
--path/
(而不是
--path/context1

更新:

啊,你有两个网络应用程序,其中包括Jersey,你没有意识到

  • WebApp 1:上下文:
    /
    路径:
    MYAPP.war
  • WebApp 2:上下文:
    /
    路径:
    站点/MyStaticWebSite
  • 不,不能将两者都放在同一个上下文路径上,servlet规范不支持这一点

    这是因为每个webapp都必须在输入后终止

    情景:

    • 因此,由于上下文路径是
      /
      ,两个webapp都将匹配
    • 输入的第一个将为请求提供服务
    • 如果servlet具有匹配的url模式,则调用该servlet
    • 如果没有匹配的servlet,则使用DefaultServlet
    • DefaultServlet将查找与url模式/pathInfo匹配的静态资源
    • 如果没有匹配的静态资源,那么DefaultServlet将生成一个错误
    该webapp必须产生响应。没有机会跳过webapp而进入下一个webapp

    然而,Jersey使这种行为更加复杂,它的默认配置接管了为自己服务的所有静态资源,甚至不允许Jetty有机会为这些静态资源服务

    你需要做什么

    • 您的
      MYAPP.war
      必须具有静态资源
    • 如果您有“外部”静态资源,那么这些资源必须由
      MYAPP.war
      中的某个内容提供服务,或者是一个正式的servlet,或者是Jersey中的某个内容。建议将外部行为设置为不同的url模式,如
      /external/*
      /static/*
      ,而不是
      /*

    我终于找到了我该怎么做

    而不是:

    sudo java  -cp jetty-runner-9.2.13.v20150730.jar org.eclipse.jetty.runner.Runner  --port 80 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>
    
    
    我的名字
    /MYAPP/*
    
    致:

    
    我的名字
    /*
    

    现在它可以工作了。

    我更新了帖子,尝试了你的建议,但没有成功,我把它扔到了那个简单的地方。我发现了一些有趣的东西,检查描述。嗨,我没有两个web应用程序。我在/myapp上下文中有一个web应用程序,在根目录中有一个静态web。我会看看你的建议,下周再调查。因为我过去想运行静态内容和webapp,所以问题一定是webapp最新版本中包含的新内容干扰了路径,使用git,我将很容易找到此修改。感谢您的建议,我们保持联系JoakimA部署,它只是一个静态内容,仍然是一个webapp,它只是一个没有servlet的webapp。
    <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>