import java.io.* ; import java.net.* ; // This "Web server" will return HTML files (only) that it finds in // the directory where it is run (or its subdirectories). // You must specify port 8080 in the URL entered into your browser. public class TrivialHTTPD { public static void main(String [] args) throws Exception { ServerSocket server = new ServerSocket(8080); while (true) { Socket sock = server.accept() ; BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream())); String req = in.readLine(); readRemainder(in) ; System.out.println("Got request header: " + req) ; String fileName = getFileName(req) ; DataOutputStream out = new DataOutputStream(sock.getOutputStream()); byte [] fileContents = readBytes("." + fileName) ; if(getExtension(fileName).equals("html") && fileContents != null) { out.writeBytes("HTTP/1.0 200 OK\r\n"); out.writeBytes("Content-Length: " + fileContents.length + "\r\n"); out.writeBytes("Content-Type: text/html\r\n\r\n"); out.write(fileContents); } else out.writeBytes("HTTP/1.0 404 Not Found\r\n\r\n"); out.close(); } } /** * Skips over remaining lines of HTTP header, till empty line. */ static void readRemainder(BufferedReader in) throws IOException { while(true) { String line = in.readLine(); if(line == null || line.length() == 0 || line.charAt(0) == '\r' || line.charAt(0) == '\n') break ; } } /** * Gets the file name from the method field. */ static String getFileName(String header) { String result = header.substring(4); // Strip off "GET " int i = result.indexOf(' '); return result.substring(0, i); // Strip off protocol version } /** * Naively extracts extension from a filename */ static String getExtension(String fileName) { int j = fileName.indexOf('.'); return fileName.substring(j + 1); // file extension } /** * Reads all bytes in a file. */ static byte [] readBytes(String name) { try { File f = new File(name) ; DataInputStream din = new DataInputStream(new FileInputStream(f)); byte[] bytes = new byte[(int) f.length()]; din.readFully(bytes); din.close(); return bytes ; } catch (IOException e) { return null ; } } }