SimpleHttpServerDataProvider.java Source code

Java tutorial

Introduction

Here is the source code for SimpleHttpServerDataProvider.java

Source

/* $Id: SimpleHttpServer.java 124 2010-09-23 16:25:36Z altdotua@gmail.com $ */

//package djudge.utils;

import java.net.ServerSocket;
import java.net.Socket;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

interface SimpleHttpServerDataProvider {
    public String getHtmlPage(String query);
}

public class SimpleHttpServer {

    final SimpleHttpServerDataProvider dataProvider;

    public SimpleHttpServer(SimpleHttpServerDataProvider dataProvider, int port) {

        class SocketProcessor implements Runnable {
            private Socket s;
            private InputStream is;
            private OutputStream os;
            private SimpleHttpServerDataProvider dataProvider;

            private SocketProcessor(Socket s, SimpleHttpServerDataProvider prov) throws Throwable {
                this.dataProvider = prov;
                this.s = s;
                this.is = s.getInputStream();
                this.os = s.getOutputStream();
            }

            public void run() {
                try {
                    readInputHeaders();
                    writeResponse("");
                } catch (Throwable t) {
                    /*do nothing*/
                } finally {
                    try {
                        s.close();
                    } catch (Throwable t) {
                        /*do nothing*/
                    }
                }

            }

            private void writeResponse(String s) throws Throwable {
                String response = "HTTP/1.1 200 OK\r\n" + "Server: DJudge.http\r\n" + "Content-Type: text/html\r\n"
                        + "Content-Length: " + s.length() + "\r\n" + "Connection: close\r\n\r\n";
                String result = response + dataProvider.getHtmlPage("");
                os.write(result.getBytes());
                os.flush();
            }

            private void readInputHeaders() throws Throwable {
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                while (true) {
                    String s = br.readLine();
                    if (s == null || s.trim().length() == 0) {
                        break;
                    }

                }
            }
        }

        this.dataProvider = dataProvider;
        try {
            ServerSocket ss = new ServerSocket(port);

            while (true) {
                Socket s = ss.accept();

                new Thread(new SocketProcessor(s, dataProvider)).start();
            }
        } catch (Exception e) {

        } catch (Throwable e) {

        }
    }

}