嘿,我想實現一個Java Servlet,它只爲每個用戶啓動一次線程。即使刷新它也不應該重新開始。我最後的做法給我帶來了一些麻煩,所以沒有代碼^^。任何關於servlet佈局的建議?爲每個訪問者啓動一個線程的Servlet
public class LoaderServlet extends HttpServlet {
// The thread to load the needed information
private LoaderThread loader;
// The last.fm account
private String lfmaccount;
public LoaderServlet() {
super();
lfmaccount = "";
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
if (loader != null) {
response.setContentType("text/plain");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
out.write(loader.getStatus());
out.flush();
out.close();
} else {
loader = new LoaderThread(lfmaccount);
loader.start();
request.getRequestDispatcher("WEB-INF/pages/loader.jsp").forward(
request, response);
}
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
if (lfmaccount.isEmpty()) {
lfmaccount = request.getSession().getAttribute("lfmUser")
.toString();
}
request.getRequestDispatcher("WEB-INF/pages/loader.jsp").forward(
request, response);
}
}
jsp使用ajax定期發佈到servlet並獲取狀態。線程只運行3分鐘,抓取一些last.fm數據。
你可以發佈你試過的代碼麼? – Sathish
你最後的做法是什麼?提供一些細節/代碼片段。只有這樣我們才能告訴你如何改進它。 –
爲什麼你想爲每個用戶啓動一個線程?我認爲這種方法不可擴展,因爲它意味着如果你有1000個用戶,那麼你需要1000個線程(每個線程都有自己的堆棧,這可能會對你的內存造成嚴重破壞)。 – beny23