【问题标题】:Serve both Thrift/TServlet and static files from same Jetty server从同一个 Jetty 服务器同时提供 Thrift/TServlet 和静态文件
【发布时间】:2012-06-05 16:17:05
【问题描述】:

我正在尝试从同一 Jetty 服务器提供静态文件和 Thrift 服务。到目前为止,我有以下代码:

val server = new Server();
val connector = new SelectChannelConnector();
connector.setPort(4567);
server.addConnector(connector);

val servlet_handler = new ServletContextHandler(server,"/thrift",ServletContextHandler.SESSIONS);
servlet_handler.addServlet(new ServletHolder(new SomeThriftServlet()), "/thrift/*");

val resource_handler = new ResourceHandler();
resource_handler.setWelcomeFiles(new String[]{ "index.html" });
resource_handler.setResourceBase(".");

val handlers = new HandlerList();
handlers.setHandlers(new Handler[] { resource_handler, servlet_handler, new DefaultHandler() });
server.setHandler(handlers);

server.start();
server.join();

静态文件提供得很好,但 Thrift 服务不断给我 404 错误。我做错了什么?


注意:提供静态文件的代码取自 this question,'val' 类型由 project lombok 处理,但我将它们留在了那里,因为我认为当前代码更具可读性。

【问题讨论】:

    标签: java servlets jetty thrift embedded-jetty


    【解决方案1】:

    问题的症结在于你必须将ResourceHandler 包装在它自己的上下文中,然后给这两个(或更多)上下文提供它们自己的基本路径。这是因为 ResourceHandler 没有自己的基本路径。

    之后,您可以在ContextHandlerCollection 中向服务器提供上下文,它根据最长匹配路径前缀确定要使用的上下文。

    Server server = new Server();
    
    val connector = new SelectChannelConnector();
    connector.setPort(4567);
    server.addConnector(connector);
    
    val thr = new SomeThriftServlet();
    
    val ct0 = new ServletContextHandler(ServletContextHandler.SESSIONS);
    ct0.setContextPath("/thr");
    ct0.addServlet(new ServletHolder(thr), "/*");
    
    val rsc = new ResourceHandler();
    rsc.setDirectoriesListed(true);
    rsc.setWelcomeFiles(new String[]{ "index.html" });
    rsc.setResourceBase(".");
    
    val ct1 = new ContextHandler();
    ct1.setContextPath("/rsc");
    ct1.setHandler(rsc);
    
    val contexts = new ContextHandlerCollection();
    contexts.setHandlers(new Handler[] {ct0, ct1, new DefaultHandler() });
    
    server.setHandler(contexts);
    
    server.start();
    server.join();
    

    【讨论】:

      猜你喜欢
      • 2016-08-08
      • 1970-01-01
      • 2016-05-23
      • 2014-11-17
      • 2017-03-05
      • 2020-02-21
      • 1970-01-01
      • 2013-09-27
      • 2021-04-13
      相关资源
      最近更新 更多