【问题标题】:Error on getting response from HttpClient using Jetty 9使用 Jetty 9 从 HttpClient 获取响应时出错
【发布时间】: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作为参数,也会出现错误,

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

是什么原因?

【问题讨论】:

    标签: java servlets jetty jetty-httpclient


    【解决方案1】:

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

    【讨论】:

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

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

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

    好的,我会尝试这样做。

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

    【讨论】:

    • 我的第一个错误提示了代码中的final。错误为:“不能在不同方法中定义的内部类中引用非最终变量响应”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2019-08-08
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    相关资源
    最近更新 更多