Beispiel: HTTP-Server auf HttpServlet-Basis

class ServletHttp

import java.io.IOException;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.Hashtable;
import javax.servlet.ServletException;

public class ServletHttp
{ // Liest die Parameter und startet den Server-Thread
 int port = 0; // Der Port, an dem der Server warten soll
 Context env; // Konfiguration,
     // implementiert ServletContext und ServletConfig

 public static void main(String args[])
 { // wie in CgiHttp
  try
  {
   new ServletHttp(args[0]);
  }
  catch (ArrayIndexOutOfBoundsException e)
  {
   System.err.println("Parameter fehlt! Konfigurations-Datei)");
  }
  catch (IOException e)
  {
   System.err.println("Konnte Konfigurations-Datei nicht lesen.");
  }
// Konsole auflassen bis Eingabe
  System.out.println("Beenden mit <ENTER>.");
  try
  { System.in.read(); }
  catch (IOException e) {}
 
  System.exit(0);
 }

 public ServletHttp(String file) throws IOException
 { // entsprechend CgiHttp
  System.out.print( "Starte Server ..." );
// Server starten
  try
  {
   ReadConfig(file);
   new Receiver(port, env).start();
// Rueckmeldung
   System.out.println( " Ok. Port: "+ port);
  }
  catch (Exception e)
  { System.out.println( "ServletHttp: " + e ); }
 }

 void ReadConfig(String file) throws IOException, ServletException
 { // Einlesen der gesamten Konfiguration und Erzeugen des Context
  Hashtable mime = new Hashtable();  // MIME-Types
  Hashtable servlets = new Hashtable(); // Mapping der Servlets
  String docroot = ".";      // Root des Servers
  String servletroot = ".";  // Servlet-Verzeichnis
  String indexfile = "index.html";

  String get, value;
  FileInputStream fis = new FileInputStream(file);
  BufferedReader br = new BufferedReader(new InputStreamReader(fis));
  while ((get = br.readLine()) != null)
  {
   value = get.substring(get.indexOf('=')+1,get.length());
   if (get.startsWith("PORT"))
   {
    port = Integer.parseInt(value);
    if (port < 0 || port > 65535)
     port = 0;
   }
   else if (get.startsWith("DOCROOT")) docroot = value;
   else if (get.startsWith("INDEXFILE")) indexfile = value;
   else if (get.startsWith("SERVLETROOT")) servletroot = value;
   else if (get.startsWith("MIME"))
     ReadSection(br, mime, "/MIME");
  }
  fis.close();
  br.close();
  env = new Context(servlets, mime, docroot, indexfile);
 }

 void ReadSection(BufferedReader br, Hashtable hash, String end)
  throws IOException
 { // Einlesen eines Abschnittes der Konfiguration in hash
  String get = br.readLine();
  String key, value;
  while ( (get != null) && !get.startsWith(end) )
  {
   key = get.substring(0, get.indexOf('=')).trim();
   value = get.substring(get.indexOf('=')+1,get.length()).trim();
   hash.put(key,value);
   get = br.readLine();
  }
 }

}