# HTTP Requests verarbeiten und Response senden mit Java



## Marcus1 (7. Apr 2007)

Hallo Ihr,

bevor ich mich an die Arbeit mache wäre es schön wenn ein paar Leute hier ihre Meinung zu folgedem Projekt abgeben würden:

Ich brauche ein Java Programm, dass HTTP Requests (also Anfragen, die von einem Browser kommen) entgegennimmt und die übergebenen Parameter ausliest. Entsprechend der übergebenen Parameter soll dann eine Response erzeugt werden und an den Browser zurückgesandt werden.

Was denkt ihr wie aufwändig ist das? Es soll kein voll funktionsfähiger Webserver sein, sondern nur die oben genannte Funktionalität haben.

Bye
Marcus


----------



## kleiner_held (7. Apr 2007)

Für sowas würde ich ein Servlet bauen und einen Tomcat aufsetzen. Siehe auch:
Java ist auch eine Insel - Kapitel 17 JavaServerPages und Servlets


----------



## Guest (7. Apr 2007)

Hier mal ein Echo an Browser. Fehlerbehandlung, Multithreading, Requestheader-Auswertung etc.  kannst du mal selber machen.
Das Ermitteln vom Ende des Request-Headers ist hier auch nur provisorisch implementiert.
	
	
	
	





```
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpEcho
{
   public static void main(String[] args) throws Exception
   {
      ServerSocket serverSocket = null;
      try
      {
         serverSocket = new ServerSocket(88);
         for (;;)
         {
            Socket client = serverSocket.accept();

// Dieser Part hier gehört in einen vernünftigen RequestHandler (im getrennten Thread) mit Fehlerbehandlung 
// und sonstigen coolen Features

            BufferedInputStream in = new BufferedInputStream(client.getInputStream());
            ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
            int nlc = 0, c;
            while(nlc<4 && (c=in.read())!=-1 ) 
            {
               nlc = ("\n\r".indexOf(c)>=0)? nlc+1:0;
               buffer.write(c);
            }
            BufferedOutputStream out = new BufferedOutputStream(client.getOutputStream());
            out.write("HTTP/1.1 200 OK\n\n".getBytes());
            out.write(buffer.toByteArray());
            out.flush();
            client.close();
// ------
         }
      }
      finally
      {
         if (serverSocket != null)
         {
            serverSocket.close();
         }
      }
   }
}
```


----------



## Marcus1 (7. Apr 2007)

@kleiner_held: Im Moment ist es als Servlet/JSP realisiert aber ich möchte mir den Applicationserver sparen, da der für meine Zwecke totaler Overkill ist. 

@Gast: Danke für deinen Code!


----------



## Marcus1 (7. Apr 2007)

Gibts vielleicht eine Library die den Umgang mit HTTP vereinfacht außer natürlich den standard Java Libraries ?


----------



## Verjigorm (7. Apr 2007)

httpclient von jakarta


----------



## Marcus1 (7. Apr 2007)

Ist HTTPClient nicht eher für einen Client gedacht? Zumindest der Name legt sowas nahe...


----------



## AlArenal (7. Apr 2007)

Ist ein Client nicht 50% einer Client-Server-Lösung?


----------



## Marcus1 (8. Apr 2007)

AlArenal hat gesagt.:
			
		

> Ist ein Client nicht 50% einer Client-Server-Lösung?


Klar, aber ich hab im ersten Posting geschrieben dass ich die Serverseite brauche. Der Client soll ein Browser sein.


----------



## Verjigorm (8. Apr 2007)

Marcus1 hat gesagt.:
			
		

> Ist HTTPClient nicht eher für einen Client gedacht? Zumindest der Name legt sowas nahe...



püh, nimms doch nicht so genau  

dann verhiss mein Posting einfach ^^


----------



## AlArenal (8. Apr 2007)

Jigsaw?

Ansonsten ist ein einfacher HTTP-Server relativ einfach zu bauen. Schnapp dir ein Tutorial zur Netzwerkprogrammierung, lass das Teil auf Port 80 lauschen und der Rest ist eben Anfragen parsen und daraus Aktionen ableiten.

Du fängst mit GET an und sollte das Ding noch mehr können müssen, erweiterst du sukzessive.

http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol
http://tools.ietf.org/html/rfc2616

Lustig übrigens, dass der Link im Wikipedia-Artikel zur Uni Frankfurt auf "Osama's Homepage" führt


----------



## Wildcard (8. Apr 2007)

AlArenal hat gesagt.:
			
		

> Ansonsten ist ein einfacher HTTP-Server relativ einfach zu bauen. Schnapp dir ein Tutorial zur Netzwerkprogrammierung, lass das Teil auf Port 80 lauschen und der Rest ist eben Anfragen parsen und daraus Aktionen ableiten.


Da würde ich eher einen Jetty nehmen. Wer will das denn selbst schreiben?
http://jetty.mortbay.org/


----------



## Marcus1 (8. Apr 2007)

Hab da was gefunden was genau dem entspricht was ich gesucht habe: http://www.blommers-it.nl/libhttpd/


----------



## AlArenal (8. Apr 2007)

Wildcard hat gesagt.:
			
		

> AlArenal hat gesagt.:
> 
> 
> 
> ...



Auf Jigsaw hatte ich ja auch schon hingeweisen. Ich weiß ja nicht ob er nur was braucht was funktioniert, oder ob er es halbwegs selbst schreiben muss. Der Autor war ja etwas erklärungsgeizig.


----------



## Gast (23. Mai 2007)

hi, sowas in der art mache ich auch. bloss dass ich dies mit einem webservice versuche, da der service später evtl noch ausgebaut werden soll.
jedoch verstehe ich noch nicht, wie ich dem client im browser daten zukommen lassen kann. 
wäre für jegliche hilfe sehr dankbar!


----------

