代码之家  ›  专栏  ›  技术社区  ›  Tom

Jetty 6:带有目录列表的静态内容

  •  1
  • Tom  · 技术社区  · 14 年前

    我使用Jetty 6作为Java应用程序中的嵌入式web服务器。到目前为止,我还没有理由提供静态内容,但现在我不仅要提供静态内容,还要显示目录列表。

    我已经尝试过使用ResourceHandler类来实现这一点,但是在某个时候mortbay删除了ResourceHandler执行目录列表的功能。

    我希望在不添加.jsp或servlet功能和web.xml配置的情况下执行此操作。简言之,我正试图通过编程的方式来实现这一点。

    就我的一生而言,我在网上找不到任何这样的例子。有人能告诉我正确的方向吗?

    非常感谢!

    2 回复  |  直到 14 年前
        1
  •  3
  •   Tom    14 年前

    好吧,我想好了如何让Jetty做我想做的事情,这又一次是除了处理一些定制的servlet之外,托管一些静态内容。

    表面上,这样做的方法是创建一个DefaultServlet并相应地设置resourceBase和pathSpec,以便允许我在/www/*上托管一些目录。然而,这从来没有奏效。实际上,我找不到任何关于pathspec如何实际工作或应该如何定义的解释。

    因此,我必须创建一个额外的ServletHandler和Context,并将我的原始Context和用于静态内容托管的新Context添加到服务器。

    我是这样做的:

    
    Server srv = new Server( port );
    
    //  create context and handler for my servlets
    Context ctx = new Context();
    ServletHandler sh = new ServletHandler();
    
    //  ... adding servlets here ...
    
    //  create context and handler for static content
    ServletHandler sh2 = new ServletHandler();
    ServletHolder holder = new ServletHolder( new DefaultServlet() );
    holder.setInitParameter("resourceBase", staticResourceBase);
    sh2.addServletWithMapping( holder, "/*" );
    staticContext.setContextPath(staticPathSpec);
    staticContext.setServletHandler(sh2);
    
    //  add both contexts to server
    ContextHandlerCollection contexts = new ContextHandlerCollection();
    contexts.setHandlers(new Handler[] { staticContext, ctx });
    srv.setHandler(contexts);
    
    
    
    

    这可能不是首选的方法,但它确实允许我以编程方式将静态内容宿主添加到基于Jetty的应用程序中。

        2
  •  0
  •   David Parks    14 年前

    如果你有一个webapp并且只是运行jetty,我认为默认情况下是服务于webapp根目录之外的任何静态内容(例如,WEB-INF所在的目录)。例如,您可能有以下目录:

    mywebapp
     - WEB-INF
     - static
         - site_img.gif
    

    现在你可以发球了 http://mysite.com/static/site_img.gif

    如果我错了,请纠正我,我会删除这个答案,这只是我脑子里想的。