Как заставить веб-сервер Java продолжать отправлять ответ на веб-страницу HTML?

#java #webserver

#java #веб-сервер

Вопрос:

Ниже приведен пример фрагмента кода, который генерирует веб-сервер на Java и печатает Hello World в браузере, когда пользователь посещает 127.0.0.1: 8080 в браузере.

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleWebServer {

    Socket remote;
    ServerSocket s;

    /**
     * WebServer constructor.
     * @throws java.io.IOException
     */
    protected void start() throws IOException {      
      try {
        s = new ServerSocket(8080);
        
        System.out.println("Webserver starting up on port 8080");
        System.out.println("(press ctrl-c to exit)");
      } catch (IOException e) {
        System.out.println("Error: "   e);
        return;
      }

      for (;;) {
        try {
            remote = s.accept();
            
            BufferedReader in = new BufferedReader(new InputStreamReader(remote.getInputStream()));
            PrintWriter out = new PrintWriter(remote.getOutputStream());

            String str = ".";
            while (!str.equals("")) {
                str = in.readLine();
            }

            out.println("HTTP/1.0 200 OK");
            out.println("Content-Type: text/html");
            out.println("Server: Bot");
            // this blank line signals the end of the headers
            out.println("");
            // Send the HTML page
            out.println("Hello World");
            out.flush();
            
            remote.close();
        } catch (IOException e) {
            System.out.println("Error: "   e);
        }
      }
  }

  /**
   * @param args the command line arguments
   * @throws java.io.IOException
   */
  public static void main(String[] args) throws IOException {
    
    SimpleWebServer ws = new SimpleWebServer();
    ws.start();
  }
}
  

Возможно ли заставить сервер продолжать отправлять ответ в браузер, не заставляя пользователя обновлять страницу? допустим, продолжайте показывать увеличивающееся число (не добавляя данные на страницу).

Я ищу не решение WebSocket, а веб-сервер на Java.

Комментарии:

1. Да, вы ищете решение для WebSocket. Или решение на javascript, которое постоянно запрашивает у сервера новые данные и обновляет страницу, что является просто худшим решением для веб-сокета с большими накладными расходами и меньшей функциональностью.

2. Вы также можете попробовать ответить с помощью заголовка ниже в html. Я полагаю, что браузер по-прежнему поддерживает это: <head> <meta http-equiv=»refresh» content=»30″> </head> Ваш socket.accept сомнителен (и некоторые другие возможности для улучшений, таких как try-resource или не проглатывание трассировки стека). Возможно, вы захотите сделать его потоковым