Я пытаюсь создать простой HTML-сервер, который будет читать запрос из моего браузера, анализировать запрошенный файл из запроса, а затем отправлять соответствующий HTML обратно в браузер. Мне нужно иметь возможность обрабатывать несколько запросов, поэтому в настоящее время у меня есть класс Server, выступающий в роли родителя другого исполняемого класса RequestHandler. Каждый раз, когда устанавливается соединение с сервером, запускается новый экземпляр исполняемого класса RequestHandler.
package server;
import java.io.IOException;
import java.net.ServerSocket;
public class Server {
public static void main(String[] args){
try{
ServerSocket serverSocket = new ServerSocket(8000);
for(;;){
Object block = new Object();
RequestHandler handler = new RequestHandler(block, serverSocket);
handler.start();
try{
synchronized(block){
System.out.println("Server thread paused...");
block.wait();
System.out.println("Server thread creating new RequestHandler...");
}
}catch(InterruptedException e){
System.out.println("Can't be interrupted!");
e.printStackTrace();
}
}
}catch(IOException e){
System.out.println("IOException!");
e.printStackTrace();
}
}
}
package server;
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 RequestHandler extends Thread {
Object block;
ServerSocket serverSocket;
BufferedReader socketReader;
PrintWriter socketWriter;
public RequestHandler(Object block, ServerSocket serverSocket){
this.block = block;
this.serverSocket = serverSocket;
}
@Override
public void run() {
try{
System.out.println("Waiting for request...");
Socket clientSocket = serverSocket.accept();
System.out.println("Connection made.");
synchronized(block){
System.out.print("Notifying server thread...");
block.notify();
System.out.println("...done");
}
socketReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
socketWriter = new PrintWriter(clientSocket.getOutputStream(), true);
String input;
while((input = socketReader.readLine()) != null){
System.out.println(input);
}
}catch(IOException e){
System.out.println("IOException!");
e.printStackTrace();
}
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, как объединить все строки запроса, чтобы я мог проанализировать запрошенный файл. Если он просто постоянно ожидает ввода запроса, я никогда не доберусь до точки, где я смогу проанализировать весь запрос. Как я могу решить эту проблему?