代码之家  ›  专栏  ›  技术社区  ›  Jeterson Miranda Gomes

在jetty中部署静态内容

  •  0
  • Jeterson Miranda Gomes  · 技术社区  · 5 年前

    我尝试在jetty中部署应用程序静态,但使用xml配置文件,因为我使用的是虚拟主机。

    我为部署创建此xml文件:

    <?xml version="1.0"  encoding="ISO-8859-1"?>
    <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" 
      "http://www.eclipse.org/jetty/configure.dtd">
    <Configure class="org.eclipse.jetty.webapp.WebAppContext">
        <Set name="contextPath">/mail</Set>
        <!--<Call name="setInitParameter">
            <Arg>org.eclipse.jetty.servlet.Default.useFileMappedBuffer</Arg>
            <Arg>false</Arg>
        </Call> -->
        <Set name="handler">
        <New class="org.eclipse.jetty.server.handler.ResourceHandler">
          <Set name="resourceBase">/ccmail</Set>
          <Set name="directoriesListed">true</Set>
        </New>
      </Set>
    
        <Set name="virtualHosts">
        <Array type="java.lang.String">
          <Item>apps.cairunet.ad.br</Item>     
        </Array>
      </Set> 
    
    </Configure>
    

    “我的文件夹”应用程序的名称为 ccmail webapps/ccmail 我已尝试传递到以下路径:

    <Set name="resourceBase">/ccmail</Set>

    <Set name="resourceBase">ccmail</Set>

    <Set name="resourceBase">./ccmail</Set>

    <Set name="resourceBase">webapps/ccmail</Set>

    <Set name="resourceBase">/webapps/ccmail</Set>

    任何不适合我的人。

    2019-02-25 09:36:46.422:警告:oejs.ServletContextHandler:main: 不应直接调用ServletContextHandler.setHandler。使用 插入式装卸工或固定式装卸工等2019-02-25 resourceBase作为webapp tmp目录名称的一部分: 上下文2019-02-25 09:36:46.500:警告:oejw.WebAppContext:main:失败 启动上下文o.e.j.w。WebAppContext@7d0587f1{/邮件,nul

    位于org.eclipse.jetty.webapp.WebInfConfiguration.unpack(WebInfConfiguration.java:577) 位于org.eclipse.jetty.webapp.WebAppContext.preconfig(WebAppContext.java:506) 位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 位于org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:46) 位于org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:505) 位于org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:151) 添加到org.eclipse.jetty.deploy.providers.WebAppProvider.fileAdded(WebAppProvider.java:453) 位于org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64) 位于org.eclipse.jetty.util.Scanner.scan(Scanner.java:392) 位于org.eclipse.jetty.util.Scanner.doStart(Scanner.java:313) 位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 位于org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:150) 位于org.eclipse.jetty.deploy.DeploymentManager.startapprovider(DeploymentManager.java:579) 位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 位于org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:117) 位于org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:113) 位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 位于org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1572) 位于java.security.AccessController.doPrivileged(本机方法) 位于org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1511) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于java.lang.reflect.Method.invoke(未知源) 位于org.eclipse.jetty.start.Main.start(Main.java:490)

    0 回复  |  直到 5 年前
        1
  •  2
  •   Joakim Erdfelt    5 年前

    注意:小心使用DOCTYPE,您声明的是从Jetty 7.x到Jetty 8.x,对于Jetty 9.x是不正确的

    不要混合使用ResourceHandler和WebAppContext/ServletContextHandler。

    <?xml version="1.0"  encoding="ISO-8859-1"?>
    <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
       "http://www.eclipse.org/jetty/configure_9_3.dtd">
    <Configure class="org.eclipse.jetty.webapp.WebAppContext">
      <Set name="contextPath">/mail</Set>
      <Set name="virtualHosts">
        <Array type="java.lang.String">
          <Item>apps.cairunet.ad.br</Item>     
        </Array>
      </Set> 
    </Configure>
    

    最基本的支持是不要引用 /ccmail <Configure> .

    事实上它是以 ${jetty.base}/webapps/ccmail/ 足够了,就可以部署了 /Cmail 作为您的静态资源库。

    但是,如果您想将静态资源与虚拟主机相结合,那么您可以将WebAppContext与另一个基底一起使用,或者使用新的ResourceHandler。

    Serving static files from alternate path in embedded Jetty

    ResourceHandler使用示例: https://www.eclipse.org/jetty/documentation/current/static-content-deployment.html

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
       "http://www.eclipse.org/jetty/configure_9_3.dtd">
    <Configure class="org.eclipse.jetty.server.handler.ContextHandler">
      <Set name="contextPath">/ccmail</Set>
      <Set name="handler">
        <New class="org.eclipse.jetty.server.handler.ResourceHandler">
          <Set name="resourceBase">/fully/qualified/path/to/my/jetty.base/webapps/ccmail</Set>
          <Set name="directoriesListed">true</Set>
        </New>
      </Set>
      <Set name="virtualHosts">
        <Array type="java.lang.String">
          <Item>apps.cairunet.ad.br</Item>     
        </Array>
      </Set> 
    </Configure>