Source of WebServer.java


  1: //WebServer.java
  2: //Serves static HTML web pages from a local subdirectory called "webpages".

  4: import java.net.ServerSocket;
  5: import java.net.Socket;
  6: import java.io.BufferedReader;
  7: import java.io.File;
  8: import java.io.FileReader;
  9: import java.io.InputStreamReader;
 10: import java.io.IOException;
 11: import java.io.PrintWriter;
 12: import java.util.StringTokenizer;

 14: public class WebServer
 15: {
 16:     public final static int WEB_PORT = 7080;
 17:     public final String docRoot = "webpages";
 18:     BufferedReader in;
 19:     PrintWriter out;

 21:     public static void main(String[] args)
 22:     {
 23:         WebServer ws = new WebServer();
 24:         ws.waitForRequest();
 25:     }

 27:     public void waitForRequest()
 28:     {
 29:         try
 30:         {
 31:             ServerSocket server = new ServerSocket(WEB_PORT);
 32:             try
 33:             {
 34:                 while (true)
 35:                 {
 36:                     Socket socket = server.accept();
 37:                     serviceRequest(socket);
 38:                     socket.close();
 39:                  }
 40:             }
 41:             catch (IOException e)
 42:             {
 43:                 server.close();
 44:                 System.err.println(e);
 45:             }
 46:         }
 47:         catch (IOException e)
 48:         {
 49:             System.err.println(e);
 50:         }
 51:     }
 52: 
 53:     public void serviceRequest(Socket socket)
 54:     {
 55:         try
 56:         {
 57:             in = new BufferedReader(new
 58:                 InputStreamReader(socket.getInputStream()));

 60:             out = new PrintWriter(socket.getOutputStream(), true);
 61:             String line = in.readLine();
 62:             StringTokenizer st = new StringTokenizer(line);
 63:             String command = st.nextToken();
 64:             if (command.equals("GET"))
 65:             {
 66:                 sendFile(st.nextToken());
 67:                 skipRemainder();
 68:             }
 69:             else
 70:                 notImplemented();
 71:             socket.close();
 72:         }
 73:         catch (IOException e) {}
 74:     }

 76:     public void sendFile(String fileName)
 77:     {
 78:         try
 79:         {
 80:             String completeName = docRoot + fileName;
 81:             BufferedReader file = new BufferedReader(new
 82:                 FileReader(completeName));
 83:             sendHeader((new File(completeName)).length());
 84:             String line;
 85:             while ((line = file.readLine()) != null)
 86:                 out.println(line);
 87:         }
 88:         catch (IOException e)
 89:         {
 90:             fileNotFound();
 91:         }
 92:     }

 94:     public void sendHeader(long length){out.println("\nHTTP/1.1 200 OK" +
 95:         "\nContent-length: " + length + "\nContent-type: text/html\n");}
 96:     public void skipRemainder()        {}
 97:     public void fileNotFound()         {}
 98:     public void notImplemented()
 99:     {
100:         out.println("<html><head><title>Not Implemented</title></head>");
101:         out.println("<body><h1>HTTP Error 501:" +
102:                     "Not Implemented</h1></body></html>");
103:     }
104: }