我在 keyword.jsp 。
中有此表单当用户点击提交时,它会调用 KeywordPostServlet.java 进行一些计算。计算完成后,用户将被定向到 followMessage.jsp :
根据"要关注的用户数量,从用户点击提交到用户看到结果之间可能需要很长时间。这是 KeywordPostServlet.java :
中的计算for (int i = 0; i < tweets.size(); i++){
Status s = tweets.get(i);
twitter.createFriendship(s.getUser().getId());
msg += i+1 + ". Following @" + s.getUser().getScreenName() + ".<br/>";
}
request.setAttribute("message", msg);
request.getRequestDispatcher("/followMessage.jsp").forward(request, response);
以下是在 followMessage.jsp中显示结果的代码:
<body>
<%
String msg = (String) request.getAttribute("message");
%>
<%=msg%>
</body>
如何让用户看到他们实时关注的每个人,而不是仅仅点击提交并立即查看结果?
答案 0 :(得分:1)
您应该能够在服务器端代码中执行此类操作:
package org.myorg.example.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StreamingServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setHeader("Connection", "keep-alive");
response.setHeader("Transfer-Encoding", "chunked");
for (int i = 0; i < 5; i++) {
String str = "Line " + (i + 1) + "<br/>";
response.getWriter().write(str);
response.flushBuffer();
sleep();
}
response.getWriter().write("DONE<br/>");
}
private void sleep() {
try {
System.out.println("Sleeping");
Thread.sleep(500);
System.out.println("Done sleeping");
} catch (Exception exp) {
throw new RuntimeException(exp);
}
}
}
答案 1 :(得分:0)
您正在使用Twitter API createFrienship。
这似乎是一个HTTP请求。因此,您在for循环中触发了太多请求。这需要时间。
尝试在额外的线程中执行此操作。这是一个乐观的策略,但我相信如果你想关注这么多用户,别无他法:
new Thread(new Runnable(){
@Override
public void run(){
// your loop with createFriendship(..)
}
}).start();
和。如果您是creating a string in a loop
,请使用StringBuilder