使用 Jetty 9 从 HttpClient 获取响应时出错

Posted

技术标签:

【中文标题】使用 Jetty 9 从 HttpClient 获取响应时出错【英文标题】:Error on getting response from HttpClient using Jetty 9 【发布时间】:2013-05-16 06:37:48 【问题描述】:

我想使用 Jetty 和 HttpClient 类从外部服务器获取内容。现在我想将获得的响应复制为HttpServletResponse 并返回给客户端(浏览器)。我尝试了一些东西,但无法成功。我想我没有通过内部课程。

这是我的代码:

public void getContentsTo(String uri,HttpServletRequest request,final HttpServletResponse response)
        HttpClient httpClient=new HttpClient();
        httpClient.newRequest(uri).send( new org.eclipse.jetty.client.api.Response.CompleteListener() 
            @Override
            public void onComplete(Result result) 
                response=(HttpServletResponse)result.getResponse();
            ;
        );

错误在于将response 分配为:

最终的局部变量 response 不能赋值,因为它是 在封闭类型中定义

如果我不使用final作为参数,也会出现错误,

不能引用内部类中的非最终变量响应 用不同的方法定义

是什么原因?

【问题讨论】:

【参考方案1】:

result.getResponse() 响应是一个 org.eclipse.jetty.client.HttpResponse,它在其沿袭的任何地方都没有 HttpServletResponse。如果我按照您要执行的操作进行操作,您将需要复制您获得的 Result 中的信息并将其放入您的 HttpServletResponse 对象中。

【讨论】:

好的!错误不在于类型转换,我认为错误在于从内部类设置外部类变量。 当然,但它是最终的,你不能像你展示的那样替换对象..因此它们是完全不同的对象类型。【参考方案2】:

您在参数中有一个final (!) 变量,您尝试在代码中更改它。这可能是错误的原因。

为什么是final?删除此标识符,然后重试。

好的,我会尝试这样做。

如果代码中不使用response参数,如我所见,为什么不在内部类中声明为实例变量呢?

【讨论】:

我的第一个错误提示了代码中的final。错误为:“不能在不同方法中定义的内部类中引用非最终变量响应”

以上是关于使用 Jetty 9 从 HttpClient 获取响应时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Jetty HttpClient 中进行多部分/表单数据发布

响应较大时,从码头超出缓冲容量 2097152

Embedded Jetty 从 6.1.7 升级到 9.4.43 的问题

码头 9.0.3 中的 Close_wait 太多

jetty-6.1.9 怎么配置jdk

使用JNDI明显慢于persistence.xml中的显式连接(Jetty 9 / Hibernate)