Über http eine Verbindung aufbauen & Seite auslese

Hallo, ich beginne demnächst, ein größeres Programm in Java zu schreiben. Dafür habe ich in den letzten Wochen intensiv Java gelernt (mehr als 1000 DIN-A4 Seiten gelesen) und kleinere (eigentlich nutzlose) Programme geschrieben. Das Programm wird über eine grafische Benutzeroberfläche verfügen und soll auf allen Betriebssystemen (Windows, Linux, Mac) sowohl im Browser (Applet) als auch als heruntergeladenes Programm (Application) funktionieren. Aus diesem Grund habe ich Java gelernt, extra für dieses Projekt. Alles andere, was ich brauche kann ich bereits (z.B. brauche ich PHP und ein Datenbanksystem, ich denke, ich werde MySQL verwenden). Wie man dem wahrscheinlich schon entnehmen konnte, soll das Programm intensiv mit einem Server kommunizieren. Der Server steht bereits bereit und kann so weit alles, was ich brauche. Alles, worauf das Programm zugreifen soll, wird in Unicode kodiert, so ist es zumindest geplant. Falls dies für Java ungeeignet sein sollte, werde ich eine andere Kodierung wählen. Das Programm wird während der Laufzeit mehrere hunderte Male auf den Server zugreifen. Dabei werden in GET-Variablen Informationen übertragen. Sollte Java dies aus irgendeinem Grund nicht können, so werde ich ModRewrite einsetzen, um diese zu vermeiden. Ohne ModRewrite wäre es mir allerdings lieber. Dagegen unvermeidbar ist, dass ich die Resultate der Anfragen in einem String gespeichert brauche. So weit ist dies für manches, was man per Google findet, kein Problem, jetzt kommt jedoch noch eine andere Sache: Ist es möglich, mehrere Verbindungen gleichzeitig zu haben? Also ein Beispiel: Ein Button löst ein Event zum Laden einer Seite aus, ein anderer für eine andere. Beides Mal werden Informationen übergeben. Die Buttons werden so schnell hintereinander geklickt, dass Seite 1 noch läd, wärend schon die 2. Seite angefordert wird. Es würde mich sehr freuen, wenn jemand, der gut Java kann, dafür eine Methode schreiben würde. Wenn der Verbindungsaufbau fehl schlug, dann soll die Methode, die normal den Inhalt der Seite als String zurück liefert, eine „0“ (also auch als String) zurück liefern.

Das ist alles kein Problem. Schau dir http://download.oracle.com/javase/6/docs/api/java/ne… an.

Natürlich ist auch das Laden von mehreren Seiten gleichzeitig kein Problem, allerdings bist Du dann in einer Multithread-Umgebung. Pro Verbindung würde dann ein Worker-Thread das Laden und Verarbeiten der Seite übernehmen und das Ergebnis zur Anzeige bereitstellen. Wenn Du gerade erst mit Java angefangen hast, solltest Du bei mehreren Threads entsprechend vorsichtig agieren.

Da der Server schon fertig ist, besteht wohl nicht die möglichkeit, für die Kommunikation mit dem Server einen echten Webservice zu nutzen, oder ist das wirklich nur eine reine Anzeige der Serverausgaben? Die einzige Kommunikation besteht im Anfügen von Parametern an die URL? Oder parsed Du die Ausgabe des Servers und reagierst Du darauf? Dann hoffe ich, dass die Ausgabe ein XML- oder JSON- oder jedenfalls ein gut strukturiertes Dokument und kein HTML ist…

Das ist alles kein Problem. Schau dir
http://download.oracle.com/javase/6/docs/api/java/ne…
an.

Vielen Dank!

Wenn Du gerade
erst mit Java angefangen hast, solltest Du bei mehreren
Threads entsprechend vorsichtig agieren.

Auch Abseits der Serverkommunikation ist ein Verzicht auf Multithreading in meinem geplanten Programm unmöglich.

Da der Server schon fertig ist, besteht wohl nicht die
möglichkeit, für die Kommunikation mit dem Server einen echten
Webservice zu nutzen

Ich will keine stetige Verbindung, sondern immer nur kleine Datensätze. Das http-Protokoll bietet sich hier super an, auch, weil ich dazu PHP nutzen kann.

oder ist das wirklich nur eine reine
Anzeige der Serverausgaben?

Nein, das Programm macht die meiste Arbeit, der Server sorgt nur dafür, dass mehrere User aktiv sein können.

Oder parsed Du die
Ausgabe des Servers und reagierst Du darauf?

Ja, selbstverständlich. Sonst wäre es mir nicht so wichtig, das genaue Resultat zu kennen.

Dann hoffe ich,
dass die Ausgabe ein XML- oder JSON- oder jedenfalls ein gut
strukturiertes Dokument und kein HTML ist…

Ich habe eigentlich geplant, einen Klartext mit eigener Formatierung zu verwenden.

Wenn Du gerade
erst mit Java angefangen hast, solltest Du bei mehreren
Threads entsprechend vorsichtig agieren.

Auch Abseits der Serverkommunikation ist ein Verzicht auf
Multithreading in meinem geplanten Programm unmöglich.

Gut, dann musst Du Dir darüber ja sowieso schon Gedanken machen. Dann macht der (relativ kleine) Teil mit der multithread Kommunikation wahrscheinlich nicht mehr viel aus.

Da der Server schon fertig ist, besteht wohl nicht die
möglichkeit, für die Kommunikation mit dem Server einen echten
Webservice zu nutzen

Ich will keine stetige Verbindung, sondern immer nur kleine
Datensätze. Das http-Protokoll bietet sich hier super an,
auch, weil ich dazu PHP nutzen kann.

Hm, ich hab noch nicht ganz verstanden, wofür du PHP einsetzen willst. Wie der Server implementiert wird, ist für mich erstmal uninteressant. Hauptsache er liefert Dir die Ergebnisse, die Du erwartest.

Btw, ein Webservice ist genau für eine Abfrage von Daten gedacht. Ob das eine große oder kleine Menge ist, macht keinen Unterschied. Und auch der Webservice wird über HTTP abgefragt, aber auf Basis einer standardisierten Beschreibungssprache (such mal nach WSDL). Aber wie gesagt: Wenn der Server schon existiert und eben *nicht* als Webservice mit WSDL und dem ganzen Zeug arbeitet, dann ist das keine Option.

oder ist das wirklich nur eine reine
Anzeige der Serverausgaben?

Nein, das Programm macht die meiste Arbeit, der Server sorgt
nur dafür, dass mehrere User aktiv sein können.

Ok, ich war vom Standard ausgegangen: Client ist „dummes“ Anzeigeprogramm, auf dem Server wird die Arbeit erledigt. das verlagert sich durch die web2.0-Anwendungen wieder etwas mehr zum Client. Gute Gründe können natürlich auch die Arbeit auf dem Client notwendig machen.

Dann hoffe ich,
dass die Ausgabe ein XML- oder JSON- oder jedenfalls ein gut
strukturiertes Dokument und kein HTML ist…

Ich habe eigentlich geplant, einen Klartext mit eigener
Formatierung zu verwenden.

Ok, wenn das hinreichend einfach ist. Ich würde da sonst eher einen Standard einsetzen, für den es schon genug Implementierungen gibt.

Tja, im Prinzip hast Du dann ja alles zusammen. Ich glaub, jetzt kann dir W-W-W erst weiterhelfen, wenn Du konkrete Fragen hast.

Klasse fertig
So, ich hatte einige Schwierigkeiten (ich bin ja noch am Java lernen, noch würde ich mich nicht als Javaprogrammierer bezeichnen), aber nun ist die perfekte Klasse fertig. Da der Code relativ lang ist, poste ich ihn hier nicht, wer will, kann sich bei mir aber per PN aber sowohl den Code, als auch die fertig kompilierte .class-Datei abholen.

Ich habe die Klasse so geschrieben, dass man sowohl
String rueckgabewert = (new Reader()).read("http://example.com/page.html");
schreiben kann, als auch ein Objekt mehrmals verwenden kann. Für mich ist das sehr praktisch, wenn ich mehrere Verbindungen gleichzeitig brauche. Vor und nach dem Sring wird weder ein Zeilenumbruch, oder null (das ist bei sehr vielen Scripten, die man per Google findet so) zurück gegeben. Auch der Bug, dass Zeilenumbrüche ignoriert werden, ist nicht vorhanden. Eine Definition der Fehlermeldung, falls die Seite nicht existiert, ist auch möglich.