protected void processRequest(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException { final Boolean[] isRunning = new Boolean[] {true}; final DataLoader dataLoader = DataLoader.getInstance(); resp.setContentType("video/mpeg"); final IDataLoaderCallback callback = new IDataLoaderCallback() { @Override public void dataReceived(byte[] bytes) { try { resp.getOutputStream().write(bytes); } catch (Throwable e) { isRunning[0] = false; } finally { dataLoader.removeCallback(this); } } }; dataLoader.addCallback(callback); synchronized (dataLoader) { String ipParam = req.getParameter(KEY_IP); if (ipParam == null || ipParam.trim().equals("")) { ipParam = "192.168.8.156"; } final String ip = ipParam; String user = req.getParameter(KEY_USER); String pw = req.getParameter(KEY_PASSWORD); if (user == null || user.trim().equals("")) { user = "******"; } if (pw == null || pw.trim().equals("")) { pw = "password"; } dataLoader.init(ip, user, pw); } while (isRunning[0]) { try { Thread.sleep(1000L); } catch (Exception e) { isRunning[0] = false; dataLoader.removeCallback(callback); break; } } }