import java.io.*; import javax.servlet.*; // программа реализует интерфейс Servlet class DoloadServlet implements Servlet { ServletConfig config; // объект ServletConfig public DoloadServlet() {} // ничего не делает // при инициализации сохраняем config public void init(ServletConfig config) throws ServletException {this.config = config;} // выдаёт сохранённый config public ServletConfig getServletConfig() {return config;} // информация о сервлете public String getServletInfo() {return "DoloadServlet";} public void destroy() {} // ничего не делает // обработка запроса public void service(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException { // разбирать запрос мы не будем, просто срязу // создаём HTTP заголовок: String head = "HTTP/1.0 200 OK\n"+ + "Server: DoloadServlet\n" + "Content-Type: text/html; charset=windows-1251\n" + "Connection: Keep-Alive\n" + "Content-Encoding: multipart/mixed\n" + "Transfer-Encoding: chunked" + "Pragma: no-cache\n\n"; // теперь добавляем первоначальные данные // для этого примера - 20 тэгов "
" с переносом строки for(int i = 0; i < 20; i++) head = head + "
\n"; // берём поток вывода ServletOutputStream os = response.getOutputStream(); // пишем туда заголовок и первоначальные данные os.print(head); // отправляем всё записаное в буффер к клиенту response.flushBuffer(); // начинаем добавлять новые строки: // эти строки будут выглядеть следующим образом: номер строки, потом "
\n" // каждая новая строка будет появляться раз в 3 секунды int i = 0; while(true) { // инкримент счётчика i++; // пишем строку os.print(""+i+"
\n"); // сброс буффера response.flushBuffer(); // примораживаем поток на 3 секунды try {sleep(3000);} catch(Exception e){} } } }