使用 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 中进行多部分/表单数据发布