#java #jetty #continuations
#java #jetty #продолжения
Вопрос:
я использую jetty-7.4.1.v20110513 и servlet-api-2.5
я попытался использовать продолжения в следующем сервлете.
import java.io.*;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.continuation.*;
public class cs extends HttpServlet {
public void service(HttpServletRequest req, HttpServletResponse res)
throws java.io.IOException {
String reqId = req.getParameter("id");
Continuation cc = ContinuationSupport.getContinuation(req);
res.setContentType("text/plain");
res.getWriter().println("Request: " reqId "tstart:t" new Date());
res.getWriter().flush();
cc.setTimeout(2000);
cc.suspend();
res.getWriter().println("Request: " reqId "tend:t" new Date());
cc.complete();
}
}
Я ожидаю задержку в 2 секунды, но когда я запускаю сервлет из браузера, я получаю вывод следующим образом без какой-либо задержки:
Request: null start: Sat May 21 15:25:02 IST 2011
Request: null end: Sat May 21 15:25:02 IST 2011
Ответ №1:
Я полагаю, вы читаете этот учебник. Задержка в 2 секунды может быть достигнута одним из этих способов:
-
Либо добавьте
Thread.sleep(2000)
перед вторымres.getWriter().println()
. -
Или удалить
Continuation.complete()
вызов, который заставит продолжение ждать максимальное время, указанное вContinuation.setTimeout()
. Что происходит сейчас, так это то, что вы немедленно уведомляете, что ваше «вычисление» выполнено (посредством вызоваcc.complete()
)
Ответ №2:
Я, наконец, разобрался с api продолжений. следующий код сработал для меня. спасибо за вашу поддержку, ребята.
import java.io.*;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.continuation.*;
public class cs extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws java.io.IOException {
String reqId = req.getParameter("id");
Continuation cc = ContinuationSupport.getContinuation(req);
res.setContentType("text/plain");
res.getWriter().println("Request: " reqId "tstart:t" new Date());
res.getWriter().flush();
cc.setTimeout(2000);
cc.suspend();
res.getWriter().println("Request: " reqId "tend:t" new Date());
if (cc.isInitial() != true) {
cc.complete();
}
}
}
вывод:
Request: null start: Sat May 21 15:25:02 IST 2011
Request: null end: Sat May 21 15:25:02 IST 2011
Request: null start: Sat May 21 15:25:04 IST 2011
Request: null end: Sat May 21 15:25:04 IST 2011