【问题标题】:i want to get Async Fetch Response (Google App Engine)我想获得异步获取响应(Google App Engine)
【发布时间】:2011-07-02 13:12:45
【问题描述】:

我在 Google App Engine 上制作 Web 应用程序并使用 AsyncURLFetch Api。

但是,我无法得到回应。请帮帮我...

搜索.java

private ArrayList<Future<HTTPResponse>> fetchURL() {
    ArrayList<Future<HTTPResponse>> futureList = new ArrayList<Future<HTTPResponse>>();

    for (SearchResult searchResult : searchResultList) {
        if (!searchResult.isEmpty()) {
            for (WebPage webPage : searchResult.getWebPageArray()) {
                try {
                    URL url = new URL(
                            "http://myapi.appspot.com/htmlparser?url="
                                    + webPage.getPageURL());
                    URLFetchService us = URLFetchServiceFactory
                            .getURLFetchService();
                    futureList.add(us.fetchAsync(url));
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    return futureList;
}

private ArrayList<HTTPResponse> getFetchResult(
        ArrayList<Future<HTTPResponse>> futureList) {
    ArrayList<HTTPResponse> responseList = new ArrayList<HTTPResponse>();
    try {
        for (Future<HTTPResponse> future : futureList) {
            if (future.isDone()) {
                log.info("future calls get");
                HTTPResponse resp = future.get();
                responseList.add(resp);
            }
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
        log.info(e.getMessage());
    } catch (ExecutionException e) {
        e.printStackTrace();
        log.info(e.getMessage());
    }
    return responseList;
}

HTMLParser.java

public class HTMLParser extends HttpServlet{
protected static Logger log = LoggerFactory.getLogger(HTMLParser.class);

private PrintWriter writer;
private URL paramURL;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    // TODO Auto-generated method stub
    resp.setContentType("text/html; charset=utf8");
    writer = resp.getWriter();
    getParameter(req);
    viewTest();
}

private void getParameter(HttpServletRequest req){
    paramURL = getURL(req);
}

private URL getURL(HttpServletRequest req){
    try {
        URL url;
        url = new URL(req.getParameter("url"));
        return url;
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}


private void viewTest(){
    writer.println(paramURL);
    log.info(paramURL.toString());
}}

future.isDone() 为“假”

我做什么事情来获得“真实”?

【问题讨论】:

    标签: google-app-engine servlets


    【解决方案1】:

    您是否阅读过Java Futures 上的文档? future.isDone() 不会阻塞,并且会返回 False 直到 future 完成执行。要获取所有异步调用的结果,您应该对每个异步调用无条件调用future.get()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 2015-11-06
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多