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();
}
}
}