public class WebServer
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: }