#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 или не проглатывание трассировки стека). Возможно, вы захотите сделать его потоковым