import java.io.* ; import java.net.* ; import java.util.* ; final class HttpRequest implements Runnable { final static String CRLF = "\r\n"; Socket socket; // Constructor public HttpRequest(Socket socket) throws Exception { this.socket = socket; } // Implement the run() method of the Runnable interface. public void run() { try { processRequest(); } catch (Exception e) { System.out.println(e); } } private void processRequest() throws Exception { // Set up output stream DataOutputStream os = new DataOutputStream(socket.getOutputStream()); // Set up input stream filters. BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); // Get the request line of the HTTP request message. String requestLine = br.readLine(); // Extract the filename from the request line. StringTokenizer tokens = new StringTokenizer(requestLine); tokens.nextToken(); // skip over the method, which should be "GET" String fileName = tokens.nextToken(); // Prepend a "." so that file request is within the current directory. fileName = "." + fileName ; // Open the requested file. FileInputStream fis = null ; boolean fileExists = true ; try { fis = new FileInputStream(fileName); } catch (FileNotFoundException e) { fileExists = false ; } // Debug info for private use System.out.println("Incoming!!!"); System.out.println(requestLine); String headerLine = null; while ((headerLine = br.readLine()).length() != 0) { System.out.println(headerLine); } // Construct the response message. String statusLine = null; String contentTypeLine = null; String entityBody = null; if (fileExists) { statusLine = "HTTP/1.0 200 OK" + CRLF; contentTypeLine = "Content-Type: " + contentType(fileName) + CRLF; } else { statusLine = "HTTP/1.0 404 Not Found" + CRLF; contentTypeLine = "text/html" + CRLF; entityBody = "" + "