从jetty 8迁移到jetty 9后,ProxyServlet停止工作

Ily*_*iuk 2 eclipse-plugin jetty

我有一个eclipse插件,它使用带有ProxyServlet的jetty服务器.基本上,实现如下:

    ServletHolder proxyServletHolder = new ServletHolder(new SubClassOfProxyServlet()); 
    proxyServletHolder.setAsyncSupported(true);
    ServletHandler proxyServletHandler = new ServletHandler();
    proxyServletHandler.addServletWithMapping(proxyServletHolder, "/mapping/url");
Run Code Online (Sandbox Code Playgroud)

之后,我将代理处理程序添加到处理程序列表并将此列表设置为服务器:

    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] {
            . // Other Handlers
            .
            proxyServletHandler,
            .
            .
            .
            new DefaultHandler()
        });
    server.setHandler(handlers);
Run Code Online (Sandbox Code Playgroud)

一切都像对码头8的魅力一样,但在迁移到码头9后,我收到以下错误:

Caused by: java.lang.IllegalStateException: No server executor for proxy at org.eclipse.jetty.proxy.ProxyServlet.createHttpClient(ProxyServlet.java:279) at org.eclipse.jetty.proxy.ProxyServlet.init(ProxyServlet.java:123) ... 24 more

使用ProxyServer的机制是否已更改?我错过了什么吗?

Joa*_*elt 5

您需要更新您的SubClassOfProxyServlet类以包括现在从Server代理传递到代理的各种配置,然后由内部使用HttpClient

特定错误意味着您没有正确传递Executor.

Executor特定部分有2个选项(在解决此问题后,您可能需要配置更多内容)

  1. 将init-parameter maxThreads设置为有效的整数值.
  2. 或者创建一个Executor,并ServletContext.setAttribute("org.eclipse.jetty.server.Executor", myExecutor)在应用程序部署/启动时将其设置在servlet上下文属性中.- 你也可以在你的SubClassOfProxyServlet.init(ServletConfig config)方法中做到这一点.