FreeDB - Anfrage eleganter

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ravenheart
User
Beiträge: 70
Registriert: Mittwoch 10. November 2010, 18:41

Gleich mal im Voraus:

ich bin gänzlich neu in Sachen Netzwerkprogramierung und weiß manchmal gar nicht, was ich technisch gesehen mache.
Deswegen kann es sein, dass meine Fragen ein wenig naiv oder irreführend sind.

Code: Alles auswählen

 import socket
 host = "freedb.freedb.org"
 port = 8880
 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 s.connect((host,port))
 s.send("cddb hello username hostname clientname version\n")
 s.send("cddb lscat\n")
 d = s.recv(2048)
SO kann ich bei einem freedb-Server die verschiedenen Genres abfragen.
Ich wollte das ganze aber auch mal ohne SOckets machen. Es gibt ja noch httplib.

Deswegen: Ist das was ich mache ein HTTPRequest?
Und wenn ja, wie kriege ich das dann als solchen zum Laufen?

Oder wenn nicht:
Was genau mache ich? (ausser mich mit einem server zu verbinden, dem daten zu senden und welche zu empfangen), hat das irgendeinen Namen (ala HTT-Request?)

Und wie könnte ich das selbe Programm auf höherer ABstraktionsebene schreiben?
Ich glaube nicht, dass Sockets unbedingt manuell verwendet werden müssen.

Danke schonmal,
Ravenheart

Falls jmd gute EInstiegsliteratur weiß für mich, bitte posten.
Möchte mich endlich mal mit ein paar Begriffen auseinandersetzen, die ich zwar ständig höre/lese, mit denen ich aber noch nichts verbinden kann:
Webserver/CGI/Servlet == Ist das alles das selbe?
Tomcat / Apache = was macht das Zeug genau, ich kann Xammp bei mir starten, weiß aber nicht was ich dann genau hab.
JavaEE -> was zur Hölle soll das sein?

Natürlich hab ich schon ein gaaanz klein wenig AHnung (google sei Dank), aber ich denke mir mangelt es noch an Grundlagen zum ganzen Thema
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Webserver/CGI/Servlet == Ist das alles das selbe?
Tomcat / Apache = was macht das Zeug genau, ich kann Xammp bei mir starten, weiß aber nicht was ich dann genau hab.
JavaEE -> was zur Hölle soll das sein?
Da gibt es so zwei Studenten, die haben vor 10 Jahren oder so eine ziemlich gute Suchmaschine erfunden, die Bagle oder so heißt...

Ein Webserver beantwortet Anfragen von Webclients gemäß es HTTP-Protokolls. Ein Server ist allgemein ein Programm, dass Anfragen beantwortet, ein Client ein Programm, dass Anfragen stellt. HTTP ist das Hypertext transfer Protocol und das, was das WWW (oder wie viele fälschlich gleichsetzen Leute sagen, das Internet) ausmacht. Im einfachsten Fall wird hier nach HTML-Seiten gefragt.

CGI steht für das Common Gateway Interface und ist ein IMHO veralteter Standard, wie man eigene Programme in einen Webserver integrieren kann. Wenn der Webserver eine Anfrage bekommt, startet er ein Programm und übergibt diesem in der Unix-typischen Umgebung den Request und füttert in die Unix-typische Standardeingabe die Request-Daten ein. Das Programm muss dann über die Unix-typische Standardausgabe die Antwort liefern, die dann der Server an den Client weiterleitet. Das ist ein sehr ineffizientes Verfahren.

Ein Servlet ist ein Plugin, also ein nicht eigenständig läuffähiger Programmteil für einen Webserver, der den Java EE Standard erfüllt.

Tomcat ist ein in Java geschriebener Webserver und Servlet-Container, der den Java EE Standard erfüllt. Er kann Servlets ausführen. Bekommt Tomcat eine Anfrage von einem Webclient, ermittelt der Server, welches Servlet für diese Anfrage zuständig ist und leitet die Anfrage in Form eines HttpServletRequest-Objekts an eine Methode des Servlets weiter, die daraufhin ein HttpServletResponse-Objekt ausfüllen muss. Das ist noch ein bisschen komplizierter, soll aber hier reichen.

Apache ist ein in C geschrieber Webserver und war AFAIK einer der ersten. Er könnte CGI-Programme ausführen, jedoch keine Servlets. Apache ist außerdem eine Foundation unter deren Namen viele Web-relevante Opensource-Projekte laufen, insbesondere auch viele Java-Projekte und Tomcat ist z.B. ein Projekt der Apache-Foundation.

Ein besserer Servlet-Container ist IMHO aber Jetty, der inzwischen Teil der Eclipse Foundation ist, der zweiten großen Dachorganisation für Opensource-Java-Projekte. Eclipse ist zudem auch eine Java-Entwicklungsumgebung (IDE).

Java EE ist die Java Enterprise Edition und eine Erweiterung der Java Standard Edition (SE) welches wiederum die Java-Version ist, die man sich so normal als SDK (Software Development Kit) ziehen kann. EE besteht aus einem Berg von Standards und zugehörigen implementierenden Bibliotheken für alles, was Java im Unternehmensumfeld so interessant macht. Die Servlet-Spezifikation ist nur eine (und ein ganz kleiner Teil davon). JSP (Java Server Pages) oder jede andere beliebige dreibuchstabige Abkürzung gehören auch dazu.

Ein Konkurrent von EE ist Spring, was mal klein und mit der Idee, Java EE zu vereinfachen anfing, aber inzwischen ein ebenso großer Moloch geworden ist und - was ich noch viel schlimmer finde - das beharrlich leugnet.

Ein Servlet-Container ist übrigens wieder nur ein kleiner Teil eines Java Application Servers, der u.A. den Java Enterprise Beans-Standard unterstützen muss und meist auch noch BPL-Sachen und viel XML. Und dann ist da natürlich noch OSGI als Industrie-Standard für Modularisierung im Java-Umfeld mit noch mehr XML und Ant und Maven mit XML und...

Mach lieber Python, das ist einfacher.

Stefan
Antworten