среда, 27 июня 2018 г.

java_konsole_öffnen

Java Tutorial für Einsteiger (Teil 2) Teil 2 des Java-Tutorials: Kernelemente von Java. Kernelemente der Programmiersprache Java. Ein Java-Programm ist zunächst einmal eine Reihe von Anweisungen, die dem Computer vorgeben, was zu tun ist. Der Prozessor arbeitet diese Anweisungen dann der Reihe nach ab. Nachdem die letzte Anweisung ausgeführt wurde, terminiert das Java-Programm (d.h. das Programm wird beendet). Viele der Anweisungen zielen darauf ab, Variablen zu verändern. Eine Variable ist einfach eine Speichereinheit, die irgend einen Wert enthalten kann, z.B. eine Zahl oder eine Zeichenkette (also ein Wort oder einen Satz). Eine Veränderung an einer Variablen könnte z.B. bedeuten, dass man zu einer Zahl eine andere hinzu addiert oder an eine Zeichenkette eine andere Zeichenkette anhängt. Wir schreiben zunächst nur Programme, die auf der sogenannten Konsole bzw. Kommandozeile ausgeführt werden. Bei Windows-Rechnern ist dies die Eingabeaufforderung. Programme, die auf der Konsole ausgeführt werden, können dort Text ausgeben. Wir werden uns im Rahmen dieses Tutorials einige der Kernelemente eines Java-Programmes mal an einem einfachen Beispiel ansehen: Anm: Die gezeigten Anweisungen sind so für sich genommen noch kein komplettes, ausführbares Java-Programm, dazu fehlt noch der Klassenrahmen. Doch dazu kommen wir in diesem Tutorial später noch. Den Zweck dieses Java-Programmes können Sie vielleicht auch ohne Programmierkenntnisse bzw. ohne das ganze Tutorial durchgearbeitet zu haben schon erkennen: es sollen zwei Zahlen addiert werden und die Summe über die Kommandozeile an den Programmbenutzer ausgegeben werden. Das Programm besteht aus 4 Anweisungen, pro Zeile schreibt man in der Regel eine Anweisung und schließt diese mit Semikolon (;) ab. Das ist übrigens in vielen Programmiersprachen so. Die erste Anweisung nennen wir eine Variablendeklaration mit gleichzeitiger Zuweisung. Es wird hierbei eine neue Variable angelegt, dieser geben wir den Namen summand1 . Den Namen können wir beliebig wählen, bis auf einige Einschränkungen, die bei der Namenswahl zu beachten sind, z.B. dass der Name mit einem Buchstaben beginnen muss. Um ein Java-Programm verständlich zu halten, sollte man möglichst immer sinnvolle Namen wählen. Man sollte nach Möglichkeit am Namen einer Variable ablesen kann, was ihr Zweck ist. Variablen in Java haben immer einen festgelegten Typ: der Typ gibt an, um was für eine Art von Variable es sich handelt. Im Beispiel verwenden wir den Typ int für die Variable summand1 . Das steht für Integer und bedeutet Ganzzahl. In der Variable summand1 können nun also ganzzahlige Werte gespeichert werden, nicht aber z.B. Kommazahlen wie 2,5. Andere wichtige Datentypen, die einem in Java sehr oft begegnen werden, sind double , float (in diesen Typen können Kommazahlen gespeichert werden, die beiden Typen unterscheiden sich lediglich in Genauigkeit und Wertebereich) und String für Zeichenketten. Wir werden diese später noch kennen lernen. Im Beispiel wird bei der Variablendeklaration der Variable schon direkt ein Wert zugewiesen. Das hätte man auch später noch machen können, z.B. Allgemein lautet die Syntax für die Deklaration einer Variable. und die Syntax für die Wertzuweisung. Doch was bedeutet <AUSDRUCK> an dieser Stelle? Nun, bei einer Wertzuweisung muss nicht immer ein konkreter Wert angegeben werden, so wie das bei unserem Beispiel in diesem Tutorial in der ersten und zweiten Zeile der Fall ist, sondern man kann auch einen komplexen Ausdruck angeben, dessen konkreter Wert dann bei der Zuweisung automatisch berechnet wird. Das geschieht z.B. in der dritten Zeile unseres Tutorial-Beispiels: Es wird wiederum eine Variable vom Typ „int“ angelegt. Dieser Variable wird nun nicht direkt ein Wert zugewiesen, sondern es wird der Ausdruck summand1 + summand2 angegeben. Wenn der Prozessor beim Programmablauf an diese Stelle kommt, wird er diesen Ausdruck dann auswerten. D.h. in diesem Fall, er wird bestimmen, welcher Wert in der Variable summand1 gespeichert ist, er wird bestimmen, welcher Wert in der Variable summand2 gespeichert ist und dann die Summe aus diesen Werten bilden. Dieser Wert wird dann der neu angelegten Variable summe zugewiesen. Da in den beiden Variablen summand1 und summand2 die Werte 5 und 10 gespeichert sind, wird die Variable summe also den Wert 15 enthalten. Programmieren mit Java - Einige unserer Empfehlungen. Die vierte Zeile unterscheidet sich deutlich von den vorherigen Zeilen, denn hier wird keine Variable angelegt. Sondern es wird eine Funktion aufgerufen. Java besitzt eine gewisse „Grundfunktionalität“, die wir jederzeit einsetzen können, gewissermaßen eine Bibliothek von wichtigen Funktionen, die oft benötigt werden. In diesem Fall ist das eine Funktion, die etwas auf der Kommandozeile ausgeben kann. Die Syntax für einen Funktionsaufruf (bzw. korrekt heißt das eigentlich Methodenaufruf) ist in Java die folgende: Von Objekten hatten wir zu Beginn des Tutorials bereits kurz gesprochen, als wir über die Objektorientierung sprachen. Wir wollen an dieser Stelle des Tutorials die Besprechung der Objekte noch nicht zu sehr vertiefen, jedoch ist es wichtig zu wissen, dass in Java Funktionsaufrufe immer an konkrete Objekte gekoppelt sind. Um das mal an einem Beispiel aus der echten Welt zu veranschaulichen: Unser Objekt könnte ein Herd sein und der Herd hätte eine Methode kochen . Beim Aufruf dieser Methode müsste man als Parameter das Objekt übergeben, das gekocht werden soll. In Java-Syntax sähe das dann so aus: p>Dieser Aufruf würde also bewirken, dass vom Objekt meinHerd die Methode kochen mit dem Parameter meinFruehstuecksEi aufgerufen wird. Oder auf gut deutsch: Mein Frühstücksei wird auf meinem Herd gekocht. Doch zurück zu unserem echten Java-Programmbeispiel. In der vierten Zeile finden wir also diesen Methodenaufruf: Der Funktionsaufruf findet demnach auf einem Objekt System.out statt. Dieses Objekt gehört gewissermaßen zur Grundausstattung von Java, wir müssen es nicht anlegen, es ist einfach da. Das Objekt stellt einige Funktionalität zur Ausgabe von Informationen auf der Kommandozeile bereit. Eine der Methoden, die dieses Objekt besitzt, ist demnach die Methode println . Der Aufruf dieser Methode bewirkt, dass der Inhalt der übergebenen Variablen auf der Kommandozeile ausgegeben wird und nach der Ausgabe ein Zeilenumbruch eingefügt wird. In diesem Fall wird also der Inhalt der Variablen summe (15) ausgegeben. Die einzig sichtbare Aktion, die das Programm ausführt, wenn wir es starten, ist die Ausgabe des Ergebnisses der Summation. Die anderen Aktionen (das Anlegen der Variablen und die Berechnung der Summe) finden lediglich intern statt und wir bekommen davon nichts mit. Programmieren mit Java - Einige unserer Empfehlungen. Das Java-Programmbeispiel ausführbar machen. Um das Beispielprogramm, das wir in diesem Tutorial gerade kennen gelernt haben, ausführbar zu machen, müssen wir einen Klassenrahmen hinzufügen. Wir wollen an dieser Stelle die Frage, was eine Klasse ist, noch nicht weiter vertiefen, sondern müssen nur wissen, dass in Java jeglicher Code innerhalb von Klassen gekapselt werden muss. Daher benötigen wir eine erste Klasse, um unseren Code auszuführen. In Java muss jede öffentliche Klasse in einer eigenen Datei gespeichert werden, dabei ist durch den Namen, den man der Klasse gibt, der Name der Datei vorbestimmt, nämlich KLASSENNAME.java. Wenn wir nun unserem Beispielprogramm einen Klassenrahmen mit der Klasse MeineTestanwendung hinzufügen, muss der gesamte Code in der Datei MeineTestanwendung.java gespeichert werden. Und der Klassenrahmen für unser Java-Programm sieht dann ganz konkret so aus: Hierbei wird eine Klasse MeineTestanwendung angelegt. Einziger Sinn dieser Klasse ist es, einen Ausführungsrahmen für unser Programm bereit zu stellen. Die Klasse besteht nun nur aus einer einzigen Methode, nämlich der Hauptmethode. Die Hauptmethode wird vom Java-Interpreter aufgerufen, wenn ein Java-Programm ausgeführt wird. Um ein Java-Programm ausführbar zu machen muss es also in mindestens einer Klasse eine Hauptmethode geben. Die Hauptmethode muss immer main genannt werden. Den restlichen Teil der Methodendefinition (also die Wörter public , static , void und den Ausdruck String[] args) können Sie an dieser Stelle erstmal noch ignorieren, darauf kommen wir später zu sprechen. An dieser Stelle im Tutorial geht es nur darum, das Java-Programm ausführbar zu machen. Nützlich ist es an dieser Stelle, die Bedeutung der geschweiften Klammern ( ) zu kennen. Mit geschweiften Klammern fasst man zusammenhängende Blöcke zusammen, also jeweils ein Klammerpaar für einen zusammenhängenden Block, wobei ein Block mit einer öffnenden Klammer beginnt und mit einer schließenden endet. Im obigen Beispiel fasst zum Beispiel die erste öffnende Klammer (in der zweiten Zeile) und die letzte schließende Klammer (in der letzten Zeile) die Klasse MeineTestanwendung zusammen. Alles was innerhalb dieser Klammern steht, gehört zu dieser Klasse. Ebenso verhält es sich mit der definierten Methode main : auch diese wird wiederum durch eine öffnende und eine schließende Klammer begrenzt. Programmieren mit Java - Einige unserer Empfehlungen. Sie können diese Codezeilen nun schon in einer Datei „MeineTestanwendung.java“ speichern und können diese Datei dann mit dem Java-Compiler übersetzen und danach das Programm ausführen. Wenn Sie das über die Kommandozeile machen, geht das folgendermaßen: „javac“ ruft also den Compiler auf, der den Quelltext in den Zwischencode, den Bytecode übersetzt. Der Bytecode wird dann in einer Datei MeineTestanwendung.class gespeichert. Diese Datei können Sie nun mit Hilfe des Java Interpreters „java“ ausführen, wobei Sie darauf achten müssen, dass Sie die Dateiendung auslassen, also nur den Klassennamen angeben. Komfortabler ist es übrigens, wenn Sie das mit einer Entwicklungsumgebung wie Eclipse machen. Programm in Eclipse erstellen und ausführen. Alle Programmierbeispiele in diesem Tutorial können Sie von unserer Website herunter laden und direkt in Eclipse importieren und dort ausführen. Sie brauchen die Codebeispiele also nicht selbst abzutippen. In Kapitel 20 finden Sie den Download-Link sowie eine Anleitung, wie der Import zu bewerkstelligen ist. (Für den Zugriff auf den Code-Download müssen Sie sich registrieren.) Einmalig wollen wir an dieser Stelle jedoch auch besprechen, wie Sie ein eigenes Projekt direkt in Eclipse erstellen können. Wählen Sie im Eclipse Menü „File“ → „New“ → „Java Project“. Im sich öffnenden Assistenten geben Sie als Projektnamen „testprojekt“ an. Alle anderen Voreinstellungen können Sie belassen und klicken nun unten auf „Finish“. Jetzt können Sie das neu angelegte Testprojekt im Package Explorer sehen. Erweitern Sie die Ansicht und führen einen Rechtsklick auf den Ordner „src“ aus. Nun wählen Sie „New“ → „Class“. Im sich nun öffnenden Assistenten geben Sie als Klassennamen MeineTestanwendung an. Im Bereich „Which method stubs would you like to create?“ aktivieren Sie die erste Option „public static void main(String[] args)“. Danach klicken Sie auf „Finish“. Wie sie sehen, wurde nun eine Klasse MeineTestanwendung erzeugt und automatisch im Editor-Fenster geöffnet. Auch die Hauptmethode main() , die wir im vorherigen Abschnitt besprochen haben, ist bereits vorhanden. Erweitern Sie die Hauptmethode nun durch eine einfache Ausgabe-Routine, z.B. (Die automatisch generierte Zeile, die mit „// TODO“ beginnt können Sie einfach löschen. ) Nun haben Sie ein erstes einfaches Programm mit Eclipse erstellt, das Sie direkt ausführen können. In der Toolbar von Eclipse (unterhalb des Menüs) sehen Sie ein Symbol, das aus einem grünen Kreis mit einem weißen, nach rechts zeigenden Pfeil besteht. Rechts neben dem Symbol finden Sie einen nach unten zeigenden schwarzen Pfeil, mit dem Sie ein Kontext-Menü öffnen können. Aus diesem Kontext-Menü wählen Sie „Run As“ → „Java Application“. Das Programm wird nun ausgeführt. Im unteren Teil der Arbeitsfläche öffnet sich ein Fenster „Console“, hier werden alle Ausgaben die ein Programm macht (also wenn Sie im Code System.out.println() verwenden) angezeigt. Sie sollten dort also jetzt die Ausgabe Hallo Welt! sehen. Beginnend mit dem zweiten Kapitel haben wir Übungsaufgaben für jedes in diesem Tutorial behandelte Thema erstellt. Programmieren lernt man am besten, indem man tatsächlich auch selbst etwas programmiert („Learning by Doing“). Die Übungen sind so aufgebaut, dass Sie jeweils die neu gelernten Konzepte selbst anwenden müssen. Wir empfehlen, dass Sie sich jeweils nach der Lektüre eines Kapitels an den Übungen, die für dieses Kapitel erstellt wurden, versuchen. Möglicherweise kommen Sie nicht bei allen Übungen ohne Hilfe auf die Lösung. Das ist nicht schlimm, versuchen Sie dennoch bei jeder Übung, zunächst selbst eine Lösung zu finden bevor Sie sich unsere Beispiellösungen ansehen. In Kapitel 20 erhalten Sie Zugriff auf die Übungen für alle vorhergehenden Kapitel. (Hinweis: Für den Zugriff auf die Übungen müssen Sie sich zunächst registrieren.) Weiter geht es in Teil 3 des Tutorials mit Bedingungen und Schleifen. Teil 2 des Java-Tutorials: Kernelemente von Java. Java-Tutorial Kapitel: 2. Kernelemente: Variablen und Ausdrücke. Wenn Sie noch kein Benutzerkonto bei programmierenlernen24.de haben, müssen Sie sich zunächst registrieren, um vollen Zugriff auf unser Java-Tutorial zu bekommen. zeemans Küstengemurmel. Über die 3 Ps im Leben: Parties, PCs und Politik (und was mir noch so einfällt) Artikelnavigation. iPhone – Produktivitaetskiller. Nach langer Absenz dann doch mal wieder ein Beitrag. In letzter Zeit ging dann doch sehr viel Zeit fuer meinen Transfer in die USA drauf. Einerseits cool dass ich jetzt endlich drueben. Andererseits musste ich meine Schwarzbeere jetzt abgeben und habe – ganz amerikanisch – ein iPhone verpasst bekommen: Weiterlesen → Neuer Server. Nach langer, langer Zeit war es mal wieder Zeit für eine Grundsanierung des Rootservers. Nicht das es für Centos keie Sicherheitsupdates gab – aber am Ende aktualisiert man ja nicht das Basissystem und die Verwaltungssoftware über Majorgrenzen hinweg. Daher nun beim Hoster das selbe Produkt bestellt – aber dafür mit aktueller Hardware 😀 Dazu ein paar Reminder an misch selber zu Owncloud, DNS und IPV6. Radsaison 2013 beendet. Am Ende des Jahres kommt dann doch eine Liste an lustigen Modifikationen zusammen. Einerseits natürlich das Bike selber: JEE-Umgebungen aufbauen. Um ein paar passesnde JEE-Umgebungen aufzubauen ist leider der (VM-)Server nur der leichteste Schritt auf dem Weg zum Erfolg. Daher hier ein paar Tutorials, die auch malfunktionieren (alles für Ubuntu 8.04 – dafür kann ich nix 😉 ): ProFTPd mit TLS. Wie in Artikel Rootserver-Serie I: ProFTPd mit TLS betreiben (FTPS) beschrieben ist das Konfigurieren von TLS alles andere als trivial. Wenn noch eine Firewall hinzukommt wird es dann perfekt: FTP-Clients bekommen keine Verbindung im Passivmodus (was wohl jeder Verwendet) da der Daten-Port auf dem Server nicht erreichbar ist. Üblicherweise sollte das iptables-Modul die entsprechenden Ports bei einer FTP-Verbindung öffnen. Bei einer FTPS-Verbindung kann das Modul den (verschlüsselten) Datenstrom aber nicht mehr lesen und auch entsprechend keine Ports mehr öffnen. Abhilfe schafft das Vergeben eines fixen Portbereiches, den man statisch auch in der Firewall freischaltet: Wichtig ist hierbei, dies in der Global-Konfiguration einzutragen. Nach Doku soll es zwar auch im Server- und VirutalHost-Teil gehen, das hatte bei mir aber keien Wirkung gezeigt: PassivePorts 49152 49162. <limit ALL SITE_CHMOD> Diese 10 Ports (und damit 10 parallele Client wie ich glaube) müssen noch in der Firewall als TCP-Ports freigegeben! chroot-Script. Als glücklicher Hetzner-Kunde freue ich mich immer wieder über die Auswahl ans Tools und Funktionen zum Warten des Rootservers. Hin und wieder bedarf es dann doch mal der Rescue-Konsole – Zum Beispiel wenn man wieder mit Kernel-Module rumgespielt hat ohne die VGA-Konsole anzufordern 😉 Für solche Fälle sollte immer ein chroot-Script in /root liegen. So erspart man sich lästiges googeln welche virtuellen Dateisysteme man mal wieder vergessen hat… SSL-Zertifikatfehler in Java ignorieren. Immer wieder darf man mit Servern zusammenarbeiten, die zwar eine SSL/TLS-Verbindung anbieten, dabei aber auf müllige Zertifikate setzen: Unbekannte/selbstgebaute CA Komische CA-Chains bei der die Zwischenzertifikate fehlen Servername passt nicht zum OU/DN. Dass man mit solchen Zertifikaten den ganzen Sicherheitsaskept ad-absurdum führt interessiert die Serverbetreiber meist nicht. Trotz allem will/muss man mit solchen Diensten aber kommunizieren. MIttels folgendem Code ignoriert man sowohl ungültige CA-Ketten als auch unpassende Zertifikate zum Server selber: EJB3 MDB und Eclipse 3.4 generiert falchen Code. Alle mögen Eclipse, viel mehr Leute (als früher) mögen EJB 3. Nur leider fabriziert Eclipse 3.4 falschen Code – zumindestens für das Deployment JBoss 5.1. Java-Programme kompilieren und ausführen. In dieser Lektion wird das erste einfache Java-Programm vorgestellt und erklärt, wie man Java-Programme kompiliert und ausführt. Vorarbeit unter Windows. Voraussetzung ist, dass die PATH-Variable wie beschrieben geändert wurde. Zusätzlich sollten unbedingt folgende Einstellungen vorgenommen werden: Einen beliebigen Ordner (z.B. durch Doppelklick auf Arbeitsplatz) öffnen auf Extras > Ordneroptionen klicken (bei Win9x Ansicht > Ordneroptionen) Dort Ansicht (den mittleren der drei Reiter) wählen und folgende Einstellungen vornehmen Dateinamen in Großbuchstaben erlauben Dateiendungen von bekannten Dateien NICHT verstecken. Unter Linux sind keine Vorarbeiten notwendig. Man startet einen Texteditor (Notepad, Editor, TextPad, UltraEdit, kate, gedit, emacs, vi oder ein anderes Programm, das "plain text" (unformatierten Text) speichern kann) und tippt das Java-Programm ein. Auf keinen Fall Wordpad, Word oder OpenOffice verwenden, denn wenn man die Datei mit Formatierungen speichern würde, wäre sie unbrauchbar. Folgendes Programm wird einfach Hallo Welt! im DOS-Fenster / auf der Konsole ausgeben: Der Datei- und Klassenname. Man speichert es unter dem Namen der Hauptklasse, hier also HalloWelt.java . (Je nach Windowsversion ist es evtl. notwendig, beim Speichern Anführungszeichen um den Namen zu setzen, damit Notepad/Editor kein .txt anhängt.) Der Name darf keine Leerzeichen und keine Sonderzeichen enthalten (außer _ und $, die aber auch nicht erwünscht sind). Umlaute sind zwar erlaubt, sollten aber vermieden werden, falls man nicht der einzige ist, der diese Klasse benutzen wird, denn auf anderen Betriebs- oder Dateisystemen kann es sonst zu Problemen kommen. Achtung: Java unterscheidet Groß- und Kleinschreibung ! HalloWelt, Hallowelt, hallowelt und HALLOWELT sind für Java 4 verschiedene Klassen/Programme. Kompilieren (javac) Nun müssen wir mit dem Java-Compiler, javac genannt, aus der Quelltextdatei HalloWelt.java eine Byte-Code-Datei HalloWelt.class machen. javac ist ein Kommandozeilenprogramm, d.h. wir müssen erstmal ein DOS-Fenster (unter Windows) oder eine Konsole (unter Linux) öffnen. Windows: MS-DOS-Eingabeaufforderung (Überspringen) Die MS-DOS-Eingabeaufforderung (DOS-Prompt, DOS-Fenster, DOS-Box) befindet sich je nach Windows-Version unter Start > Programme oder Start > Programme > Zubehör. Man kann auch auf Start > Ausführen gehen und unter Windows 9x/ME COMMAND oder unter Windows NT/2000/XP CMD eingeben. Jetzt sieht man ein DOS-Fenster, ein schwarzes Fenster mit weißer Schrift. Dort steht voraussichtlich. oder etwas Ähnliches. Das ist die Eingabeaufforderung oder Prompt. Man muss nun in das Verzeichnis wechseln, in dem die Datei HalloWelt.java gespeichert ist. Verzeichnisse wechselt man mit dem Befehl cd (change directory). Mit cd.. geht man ein Level nach oben (mit cd. zwei Level etc.). Ist die java-Datei beispielsweise im Verzeichnis C:\Java, gibt man also. ein (und drückt natürlich jeweils Enter). Ist die java-Datei im Verzeichnis D:\Java, muss erst das Laufwerk gewechselt werden. Dazu gibt man einfach. ein, und dann wie oben. Um Verzeichnisnamen mit Leerzeichen muss man Anführungszeichen setzen, z.B. Eine Möglichkeit, schnell in einen Ordner zu wechseln, ist, cd (mit Leerzeichen nach cd) einzutippen und dann das Ordnersymbol von der linken oberen Ecke des Ordnerfensters in das DOS-Fenster zu ziehen. Hat man nun zum Verzeichnis mit der HalloWelt.java-Datei navigiert, kann man dir (für directory ) eingeben - das listet die Dateien im Verzeichnis auf, da sollte auch HalloW. 1.jav oder HalloWelt.java zu sehen sein. Linux: Konsole (Überspringen) Die meisten Linux-Nutzer haben die Konsole vermutlich schon einmal benutzt. Falls nicht: im Menü unter System nach Konsole, Terminal (auch X-Terminal oder GNOME-Terminal ist richtig), Shell oder Bash suchen. Je nach System ist das Terminal-Fenster meist entweder schwarz mit weißer Schrift oder auch weiß mit schwarzer Schrift, aber es gibt auch andere Farben und durchscheinende Fenster. Je nach System steht in diesem Fenster etwas wie. benutzername ist der Name, mit dem man gerade eingeloggt ist, der computername wurde meist bei der Installation vergeben. steht für das Homeverzeichnis, dort erscheint stets das jeweils aktuelle Verzeichnis. Das $ ist die Prompt (Eingabeaufforderung). Je nach System kann es sein, dass der Benutzername und/oder der Computername und/oder das aktuelle Verzeichnis nicht angezeigt wird, so dass unter Umständen nur die Prompt angezeigt wird. Statt $ kann die Prompt auch %, # oder ein anderes Symbol sein. Man muss nun in das Verzeichnis wechseln, in dem die Datei HalloWelt.java gespeichert ist. Verzeichnisse wechselt man mit dem Befehl cd (change directory). Mit cd .. geht man ein Level nach oben (mit cd ../.. zwei Level etc.). Beachte das Leerzeichen nach cd. Ist die java-Datei beispielsweise im Verzeichnis /home/benutzername/meinjava, gibt man also. ein (und drückt natürlich Enter). Um Verzeichnisnamen mit Leerzeichen muss man Anführungszeichen setzen, z.B. oder die Leerzeichen mit einem Backslash (\) escapen (maskieren): Man gelangt schneller in den gewünschten Ordner, wenn man jeweils nur die Anfangsbuchstaben tippt und dann die Tabulatortaste drückt (das ist die Taste links neben dem Q mit den beiden entgegengesetzten Pfeilen). Unter KDE ist es auch möglich, im Konqueror rechtszuklicken und Aktion -> Terminal öffnen zu wählen. Hat man nun zum Verzeichnis mit der HalloWelt.java-Datei navigiert, kann man ls (für list ) eingeben - das listet die Dateien im Verzeichnis auf, da sollte auch HalloWelt.java zu sehen sein. Nun ist man im DOS-Fenster / in der Konsole im richtigen Verzeichnis mit der zu kompilierenden Datei HalloWelt.java. Jetzt einfach. Wenn keine Fehlermeldung kommt und einfach wieder die Eingabeaufforderung erscheint, ist alles in Ordnung. Wenn nicht, sollte man überprüfen, ob man javac und nicht java geschrieben hat, an das .java am Ende gedacht und sich auch sonst nicht vertippt hat. Typische Fehlerquellen im Programmtext, die es zu überprüfen gilt: Groß- und Kleinschreibung (String, nicht string, System, nicht system), das Semikolon (;) nach System.out.println("Hallo Welt!") und dass sowohl vor als auch nach Hallo Welt! ein Anführungszeichen (Shift+2) steht. Wenn also alles glatt geht, erscheint eine Datei namens HalloWelt.class im selben Verzeichnis. Das ist die Byte-Code-Datei. Die kann jetzt weitergegeben werden und unverändert unter Windows, Linux, Mac und auf Solaris-Rechnern laufen. (Wenn in der .java-Datei mehrere Klassen sind, entstehen mehrere .class-Dateien.) Ausführen (java) Jetzt wollen wir die Datei natürlich auch ausführen. Dafür ist die JRE (Java Runtime Environment) bzw. JVM (Java Virtual Machine, in der JRE enthalten) zuständig. Diese wird einfach mit dem Befehl java aufgerufen. Man gibt also in der DOS-Eingabeaufforderung bzw. in der Konsole. ein. (Es ist darauf zu achten, dass es hier java, nicht javac heißt, auf die Groß- und Kleinschreibung, und dass es einfach HalloWelt, nicht HalloWelt.class oder HalloWelt.java heißt.) Jetzt wird das Programm ausgeführt und es erscheint Hallo Welt! im DOS-Fenster / auf der Konsole. Danach ist es sofort zu Ende und es folgt wieder die Eingabeaufforderung. Wenn man etwas am Programm ändert, muss man es erneut kompilieren (mit javac), bevor man es ausführt (mit java). Es gibt Entwicklungsumgebungen wie Eclipse, die einem das abnehmen, so dass man nur noch einen Button drücken muss, aber für den Anfang wollen wir es von Hand machen. Fehler einbauen und sich anschauen (und möglichst merken oder evtl. sogar notieren) bei was für Fehlern der Compiler welche Fehlermeldung ausgibt. Dann kommt man später viel leichter mit den Fehlermeldungen zurecht. Also einfach mal ausprobieren, was entweder der Compiler oder aber erst die JRE sagt. wenn man das ; weglässt wenn man versehentlich ein ; hinter public static void main(String[] args) setzt wenn man Class statt class schreibt wenn man Main statt main schreibt wenn man string statt String schreibt wenn man system statt System schreibt wenn man die [] hinter String weglässt wenn man eine zu viel oder zu wenig hat (man probiert am besten alle Kombinationen aus, die Fehlermeldungen sind sehr verwirrend und man sollte später unbedingt wissen, dass man bei solchen Fehlermeldungen nach seinen geschweiften Klammern schauen sollte) wenn man an verschiedene Stellen einfach lgjklgja hinschreibt wenn man das erste, das zweite oder beide Anführungszeichen vergisst. args (für arguments ) kann man übrigens beliebig umbenennen, manche Leute schreiben argv, und man könnte auch hugo nehmen. Das ist bloß ein Variablenname. args ist am üblichsten. Man kann nicht nur Strings (Zeichenketten, eingeschlossen in Anführungszeichen) mit println ausgeben, sondern z.B. auch Berechnungen. Probiere etwa. Dort werden keine Anführungszeichen gesetzt! System.out.println("1+2") würde 1+2 ausgeben, während System.out.println(1+2) 3 ausgibt. Man kann um Zahlen und Operatoren herum beliebig Leerzeichen setzen, etwa. Diese werden nicht mit ausgegeben. Sie würden nur ausgegeben werden, wenn sie innerhalb eines Strings, also zwischen zwei Anführungszeichen wären, etwa das Leerzeichen zwischen Hallo und Welt! . println steht für print-line, also ausgeben und eine Zeile tiefer gehen. Man kann auch System.out.print(". ") verwenden, dann kommt die nächste Ausgabe auf dieselbe Zeile. Probier damit etwas herum. Vorwiegend hilft es dir, mit dem Kompilieren und Ausführen vertraut zu werden. Ruf die Java-API auf, die du entweder heruntergeladen hast oder von der du dir den Link gespeichert hast. Falls du das vergessen hast, nimm diesen Link: Java-API. Oben links ist ein kleiner Frame mit den Packages, unten links ist ein längerer Frame mit den Klassen und Interfaces im aktuellen Package (so lange noch kein Package ausgewählt ist, alle Klassen und Interfaces), rechts ist ein großer Frame mit der aktuell angeklickten Klasse (oder Interface, im Moment noch Package-Übersicht). Wähle links oben das Package java.lang. Das ist das Standard-Package, das immer automatisch importiert wird. Im Frame links unten findest du die Klasse String. Außerdem siehst du dort die Klasse System. Klick sie an. Sie erscheint rechts. Dort siehst du, dass sie ein Attribut namens out hat. Klick auf den Typ davor, also auf PrintStream . Du gelangst zur Klasse java.io.PrintStream . Dort siehst du, dass diese Klasse viele print - und printlnfile:///home/monika/Javatutorial/Website/2007/javaerst0020.html -Methoden (Funktionen) hat. Erläuterungen zum HalloWelt-Programm (Überspringen) Sich merken muss man eigentlich erstmal nur. dass man mit System.out.println etwas auf dem Bildschirm ausgibt dass man seine Befehle in ein class Name > einpackt dass man nach jedem Befehl ein Semikolon setzt. Aber manche Leser sind jetzt vielleicht von Neugier geplagt, was der Rest heißt. Wie gesagt ist es nicht schlimm, wenn man das anfangs nicht genau versteht, einiges kann man jetzt noch gar nicht verstehen. public static void main(String[] args) definiert man eine Methode (= Funktion, Prozedur, Subroutine, Unterprogramm, . ) mit dem Namen Name , dem Rückgabetyp Rückgabetyp und den Parametern name1, name2, . vom Typ Typ1, Typ2, . ist der Name der Methode main, ihr Rückgabetyp ist void (was bedeutet, dass sie nichts zurückgibt), sie erhält einen Parameter namens args vom Typ String-Array (String[]). Dieser Parameter enthält übrigens die auf der Kommandozeile übergebenen Argumente (Kommandozeilenparameter). public ist ein Access Modifier (Zugriffsmodifizierer), der öffentlich bedeutet. Es gibt außerdem private , protected und wenn man nichts hinschreibt "package level access". static kann man erst verstehen, wenn man Objektorientierung ein bisschen versteht. Auf eine static Methode oder Variable kann man einfach über den Klassennamen zugreifen, man muss nicht erst ein Objekt erzeugen. Wenn das Programm gerade gestartet wird, gibt es noch keine Objekte, deshalb muss main static sein. (Bei Applets ist das anders, deren Methoden sind nicht static, es gibt von Anfang an ein Applet-Objekt.) Wenn man java Klassenname aufruft, sucht die JRE in der Klassenname.class eine Methode mit Namen main, Rückgabetyp void und einem Parameter vom Typ String[] und ruft diese auf. Konvention: Methodennamen werden klein geschrieben, innere Wörter aber groß, z.B. lastIndexOf. Das nennt man Camel Case. In Java besteht alles aus Klassen. Eine Klasse ist ein Programm, eine Sammlung von Methoden, ein Typ, eine Datenstruktur und mehr. definiert man eine Klasse namens Klassenname . So haben wir im Beispiel eine Klasse namens HalloWelt definiert. Konvention: Klassennamen werden groß geschrieben, innere Worte ebenfalls. System.out.println. System ist, wie String auch, eine der vordefinierten Klassen im Standardpackage java.lang. Dieses Package muss man nicht explizit importieren, es wird immer automatisch importiert. Man hätte auch java.lang.System.out.println und java.lang.String[] schreiben können (tut man aber nicht). out ist eine Variable in der Klasse System. Sie ist vom Typ PrintStream. (PrintStream ist eine Klasse im Package java.util.) println() ist eine Methode in der Klasse PrintStream. Konvention: Variablennamen (wie out ) werden klein geschrieben, innere Worte wiederum groß. Konstantennamen werden in ALL_CAPS (komplett groß mit Unterstrichen zur Unterteilung) geschrieben. Ansonsten werden keine Unterstriche zur Unterteilung verwendet. Warum sollte es nur Doppelstunden in der Schule geben? 7 Antworten. Damit die Lehrer mehr Möglichkeiten haben in ihren Stunden den Schülern den Stoff zu vermitteln, oft sind 45 Minuten einfach zu kurz dafür, so hätten sie auch die Zeit um besser Projekte durchzuführen, wie z.B. Gruppenarbeiten, Filme gucken, am Computer arbeiten oder auch draußen zu arbeiten. Für die Schüler hätte das ganze auch den Vorteil , dass sie nicht so viel mitschleppen müssen (weniger Fächer an einem Tag-weniger Bücher). Ich denke es ist sicher auch leichter da man sich nicht so viel verschiedenes an einem Tag merken muss. Ich habe es geliebt, als ich beim Fachabi nur noch Doppelstunden hatte. Das lag nicht daran,d ass man etwas weniger Kram hätte mitschleppen müssen, das ist nicht zwangsweise der Fall, genau so wie die Menge an Hausaufgaben. Aber es ist einfach angenehmer die 90 Minuten durchzuarbeiten. Man hat keine nervige fünf Minuten Pause in denen man den Raum verlassen und/oder seine Arbeit unterbrechen muss. Man, ging mir das auf den Keks. Die Schüler müssten nicht mehr so viele Bücher und Hefte mitnehmen und die Lehrer haben mehr Zeit, den Unterricht durchzuführen. Ist einfacher, sind nicht soviele unterschiedliche Fächer, auf die man sich vorbereiten muss, man muss nicht soviele Mappen und Bücher mitschleppen etc. Ich freue mich immer wieder wenn wir Kurzstrecken haben 35 Minuten Es ist viel Abwechslung drinn und man kann sich auf zB Mathe und Physik keine 2h konzentrieren. Das ist individuell verschieden. Ich hatte damit keinerlei Probleme. Weil 45 Minuten einfach zu kurz sind um gewisse Inhalte zu vermitteln. Weil man weniger Sachen mithat und weniger Hausaufgaben aufkriegt. Auch interessant. Wie kann ich einen Text den ich auf dem wordpad geschrieben habe in eine PDF datei umwandeln? Ich frage mich schon länger, wie man diese kleinen quadratischen, bunten Tücher nennt, ich meine es sind Glückstücher aus Nepal oder so, kann das sein? Danke :) Was kann ich tun ich kann nichts mehr mit Java öffnen, hab aber die richtige Version Java 8 uptade 25 hab es gegtestet auf der Java Website.da steht wenn ich was mit Java öffnen will : Stellen sie sicher, dass die Befehle gültig sind, versuchen sie es erneut. In ein paar Wochen erscheint ja Battlefield 1. Ich werde es mir für meinen PC kaufen. Ein Freund von mir käuft es sich für die XBox 1S (Wenn sie erschienen ist). Jetzt wollte ich wissen ob wir beide zusammen online spielen können. Wäre das möglich? Danke im Vorraus :D. Hi :) Wir haben im Moment Blockstunden (unsere Schule will das dieses Jahr mal testen) Jetzt nach 3 Monaten haben wir schon keine Lust mehr auf diese Blockstunden, da uns einafch die 5 Minuten fehlen, auch wenn wir dadurch eher frei und längere Pausen haben. Was findet ihr besser? Und was ist sinnvoller? Ich habe eine Freundin und bin mit ihr schon über ein halbes Jahr zusammen. Sie sagt immer nach dem "Fingern", dass es sich so anfühlen würde als ob dort ein Steinchen drin wäre und es für sie sehr unangenehm ist. Gibt es da Möglichkeiten um das zu umgehen? Bitte um Antwort👍 wie heißen diese Maschinen die es im Yogurtland gibt. Für Frozen Joghurt bzw. Softeis wo man wie bei einer Zapfanlage Softeis bekommt. Das Messer springt per Knopfdruck aus dem Gehäuse und lässt sich per Knopfdruck auch wieder einfahren. Immer wenn ich Labymod mit der Java datei öffne kommt so ein fenster da drück ich dann Ja und danach kommt eine Fehlermeldung und die fehlermeldung enthaltet dies: Java kann nicht installiert werden In den folgenden Switches sind Fehler vorhanden: ''C:/Users/Karagz/Desktop/yunus/LabyMod_v2.7.7_mc1.8.8.jar'';. Stellen Sie sicher, dass die Befehle gültig sind, versuchen Sie es erneut. Ich habe java bereits habe java auch deinstalliert und wieder installiert habe auch die neueste version habe überprüfen lassen und habe schon mit der 1.8.8 gespielt im internet finde ich keinerlei lösunge. Bitte hielft mir LG. ich schreibe Dienstag Schulaufgabe. Unser Lehrer hat und gesagt, er nimmt einen Text von Nepos. Kann mir jemand so circa ein Liste von den am häufigst benutzen Wörtern von Nepos geben. Wäre seeeeehr Dankbar. was muss man da alles sagen? sollen morgen eine eröffnungsrede halten zum Thema: Fairtrade gesetzlich festlegen oder nicht? ich bin contra, also dagegen, dass nur fairtrade handel betrieben wird. Hallo was denkt ihr wie oft sollte man sich in einer doppelstunde in der schule melden? Und wie oft in einer stunde? Danke im vorraus. wie nennt man einen weiblichen zimmermann? Habe bisher viele verschiedene Begriffe gefunden (Fachkraft - Gastgewerbe, Kellner, Restaurantfachmann/frau, Gastronomiefachkraft. ), doch was ist jetzt die offizielle Bezeichung? AWS Management Console. Über eine einfache und intuitive browserbasierte Benutzeroberfläche können Sie auf Amazon Web Services zugreifen und diese verwalten. Sie können auch die mobile AWS-Konsolen-App verwenden, um Ressourcen unterwegs nachzuverfolgen. Kostenlos bei AWS einsteigen. Erhalten Sie 12 Monate lang Zugriff auf das kostenlose Nutzungskontingent von AWS sowie AWS Support-Funktionen der Stufe ''Basic'' mit Kundenservice rund um die Uhr, Support-Foren und vielen weiteren Vorteilen. Funktionen. Verwalten Ihres AWS-Kontos. Die Konsole vereinfacht die Cloud-Verwaltung sämtlicher Aspekte Ihres AWS-Kontos, so z. B. Zugriff auf Ihre monatlichen Ausgaben pro Service, Verwaltung von Anmeldeinformationen oder Einrichtung neuer IAM-Benutzer. Suchen von Services in der AWS-Konsole. Es gibt mehrere Methoden zum Suchen und Finden der benötigten Services. Auf der Startseite der Konsole können Sie die Suchfunktion nutzen, Services im Abschnitt Recently visited services auswählen oder den Abschnitt All services erweitern, um die Liste aller von AWS angebotenen Services zu durchsuchen. Außerdem können Sie jederzeit das Menü Services in der oberen Navigationsleiste auswählen. Dort finden Sie die Suchfunktion und die Liste aller Services – gruppiert oder alphabetisch sortiert. Weitere Informationen zu AWS. Die Startseite der AWS-Konsole bietet verschiedene Ressourcentypen, sodass Sie Informationen zu den von AWS angebotenen Services und Funktionen erhalten und erste Schritte für das schnellere Erstellen Ihrer Lösungen unternehmen können. Im Abschnitt "Build a solution" finden Sie verschiedene einfache automatische Assistenten und Workflows, mit denen Sie die Ressourcen, die Sie für die gewünschte Lösung benötigen, erstellen können. Im Abschnitt "Learn to build" finden Sie verschiedene zusammengefasste, nach Lösungstyp und Anwendungsfall organisierte Lern- und Schulungsressourcen. Diese Ressourcen umfassen Tutorials, Videos, Übungen für das Selbststudium sowie Projekthandbücher und Dokumentationen. Erstellen von Service-Verknüpfungen. Personalisieren Sie Ihre AWS-Konsole durch das Erstellen von Verknüpfungen zu den am häufigsten verwendeten Services. Wenn Sie auf das Pin-Symbol in der globalen Navigationsleiste (die Symbolleiste ganz oben) klicken, können Sie Service-Links auf die Symbolleiste ziehen, um Verknüpfungen zu erstellen. Ressourcengruppen. Mithilfe von Ressourcengruppen können Sie Sammlungen von Ressourcen mit gemeinsamen Tags (Kategorien) anzeigen. Optimieren Sie die Nutzung der Konsole, indem Sie eine Ressourcengruppe für alle Anwendungen, Services oder Sammlungen zusammengehöriger Ressourcen erstellen, mit denen Sie regelmäßig arbeiten. Navigieren Sie im Menü "AWS" schnell zu jeder gespeicherten Ressourcengruppe. Ressourcengruppen sind spezifisch für jede Identität, sodass jeder Benutzer unter einem Konto eindeutige Ressourcengruppen für häufig verwendete Ressourcen und allgemeine Aufgaben erstellen kann. Benutzer können auch eine URL zur gemeinsamen Nutzung von Definitionen von Ressourcengruppen mit anderen Benutzern im selben Konto verwenden. Tag Editor. Verwenden Sie den Tag Editor zum einfachen Verwalten von Tags (Kategorien) für alle Ressourcentypen, die Tags in beliebigen Regionen unterstützen. Wenden Sie Tag-Schlüssel und -Werte auf mehrere Ressourcen auf einmal an. Der Tag Editor unterstützt die globale Tag-Suche und Massenbearbeitung, sodass es einfach ist, alle Ressourcen mit einem bestimmt Tag zu finden oder über ein paar Mausklicks Tag-Änderungen auf mehrere Ressourcen anzuwenden. Verwalten von AWS-Ressourcen auf Ihrem Mobilgerät. Die mobile App für die AWS-Konsole bietet Ihnen schnell und einfach einen Überblick über Ihre Ressourcen, einschließlich CloudWatch-Alarme, und ermöglicht die Ausführung von Aufgaben auf Ihrem Mobilgerät. Laden Sie unsere mobile App aus Amazon Appstore, Google Play oder iTunes herunter. Voraussetzungen. Erfordert ein vorhandenes AWS-Konto. Wenn Sie sich mit einem Benutzerkonto für AWS Identity and Access Management (IAM) anmelden, müssen Sie den Konto-Alias verwenden, den Sie mit der E-Mail-Adresse von Ihrem Administrator erhalten haben. In unseren häufig gestellten Fragen finden Sie eine vollständige Liste unterstützter Browser und Plattformen. Wir würden uns freuen, von Ihren Erfahrungen mit der AWS Management Console zu hören. Informieren Sie uns über Ihre Erfahrungen, indem Sie nach dem Anmelden unten in der Konsole auf die Schaltfläche "Feedback" klicken. Amazon Web Services stellt ein. Amazon Web Services (AWS) ist ein dynamischer, wachsender Geschäftsbereich von Amazon.com. Wir stellen derzeit u. a. ein: Software-Entwickler, Produktmanager, Account Manager, Lösungsarchitekten, Support-Techniker, Systemtechniker und Designer. Weitere Informationen finden Sie auf unserer Seite Karrieren oder auf der für Entwickler spezifischen Seite "Karrieren". Amazon Web Services ist ein Arbeitgeber, der Chancengleichheit und Gleichbehandlung fördert.

Java konsole öffnen

Technische-Probleme mit dem 6Chat? Manche schicken Meldungen per Kontaktformular, dass sie nicht mehr in den 6Chat kommen ohne eigenes Verschulden. Unbedingt beachten wenn per Kontaktformular angefragt wird: - 1. Immer den exakten Nicknamen angeben, mit dem man das letzte mal im 6Chat war. - 2. Immer die eigene IP (InternetProtokoll) Nummer mitsenden. Die eigene IP Nummer findet man z.B. HIER heraus. Ohne diese Angaben ist eine Anfrage vergebene MпїЅhe bzw. eine AbklпїЅrung nicht mпїЅglich! Auf unvollstпїЅndige Anfragen oder wenn es klar eigenes Verschulden ist, wird keine Antwort kommen. Hinweis an alle Mozilla Firefox Browser BenпїЅtzer. Firefox Mozilla Browser unterstпїЅtzt Java NUR noch bis Version 51.0.1 ! ERGO: Wenn man das neue Browser-Update von Version 51.0.1 >auf> Version 52 macht, funktioniert Java nicht mehr! Also entweder das Update nicht machen, oder eine alte Version auf dem PC behalten, oder man kommt nur noch mit Internet Explorer 11 (I.E.11) in die Java- Version des 6Chat hinein. (Deshalb gibt es ja auch die neue, "javafreie" Version vom 6Chat) Besten Dank an unsern Co-Admin "TпїЅtowiertER29", der das freundlicherweise erstellt hat. (die letzte Version, mit der Java noch funktioniert) Die 32 Bit und die 64 Bit Version. Falls Java nicht funktioniert, stellen Sie im Tab der Add-ons-Verwaltung sicher, dass das Plugin aktiviert ist: Klicken Sie oben im Firefox-Fenster auf die SchaltflпїЅche FirefoxKlicken Sie in der MenпїЅleiste auf ExtrasKlicken Sie oben im Firefox-Fenster auf das MenпїЅ Extras und wпїЅhlen Sie Add-ons. Diese Version haben die meisten standardmпїЅssig installiert. Da wird Java problemlos unterstпїЅtzt und das Java Plugin (Add-on) gleich beim Installieren des Browsers eingerichtet. Man muss dann nur noch "Java zulassen" und "Einstellung merken" klicken, wenn danach gefragt wird beim 1.ten Mal Java-Chat laden. Diese Version unterstпїЅtzt das Java Plugin (Add-on) NICHT. - Firefox Browser starten (kann auch leer sein ohne geladene Website) - 3 Tasten Kombi drпїЅcken: "CTRL + ALT + DEL" - dann dort "Task Manager" auswпїЅhlen. - dort sieht man dann das Firefox Symbol und dahinter steht entweder (32 Bit) oder (64 Bit) - (im I.E. beim Sicherheits Popup Java "einmal benпїЅtzen" klicken, sonst kommt wieder die Java Download Seite) - Es ist aber immer gut, den Aufforderungen zur Installation der neusten Java-Versionen jeweils Folge zu leisten. Oracle-Java verпїЅffentlicht ca. 1/4 jпїЅhrlich ein Update-Paket. Man kann auch jederzeit manuell Java auf seinem PC updaten via >>> http://www.java.com/de/ Nach der Installation muss man wahrscheinlich den Webbrowser neu starten um Java im Browser wieder zu aktivieren. Sollte es danach immer noch Probleme geben, lпїЅscht euren Browsercache und startet danach den Browser neu. Ein fпїЅhiger Webbrowser fпїЅr Android Smartphones der gut mit 6Chat funktioniert. An alle Chatter die plпїЅtzlich nicht mehr in den 6Chat kommen. (ohne dass sie gesperrt wurden) Das Problem scheint ausgelпїЅst zu werden durch das neue "Java 7" Update. Manche die "Java7" schon upgedatet haben sind betroffen davon, andere wiederum aber nicht. Es handelt sich um ein Ausnahmefehler, der nur bei wenigen auftritt. 1. Java Steuerpanel im System пїЅffnen (doppelklick auf Kaffetasse) 2. Unter "Allgemein" > "TemporпїЅre Internet-Dateien" den Button "Einstellungen" klicken. Dort den Button "Dateien lпїЅschen" klicken. Im folgenden Fenster ALLE Haken setzen, bzw. ALLES lпїЅschen. Dann nochmal versuchen in den Chat zu gelangen. Das hat bei manchen das Problem gelпїЅst, bzw. die kommen so wieder in den 6Chat. Wenn Vorschlag 1 nichts nпїЅtzt und wer schon "Java 7" auf dem PC installiert hat und nicht mehr in den Chat kommt, kann noch versuchen "Java7" komplett zu de-installieren, dann einen PC Neustart und danach eine der letzten "Java6" Versionen zu installieren. (z.B. Java 6 Update 33 ) Die bekommt man auf http://www.oldapps.com/java.php. Das aber auf eigene Verantwortung! Java-Updates konfigurieren - Automatische Aktualisierungseinstellungen пїЅndern. Java-Updates werden standardmпїЅssig automatisch installiert sobald der PC online ist. Die Anleitung um diese Einstellung zu пїЅndern, bzw. Java so einzustellen, dass vor der Installation gefragt wird und man das Update auf Wunsch abbrechen kann, siehe unter dem Link http://java.com/de/download/help/java_update.xml#howto. Diese Einstellung muss, falls man zuerst um Erlaubnis fпїЅr die Installation gefragt werden will, nach jeder Update-Installation erneut gemacht werden! Empfohlene Einstellung um Benachrichtigungsoptionen zu пїЅndern: " Vor dem Herunterladen und vor der Installation " Wenn alles nichts nпїЅtzt. Der Browser funktioniert mit Windows, erstaunlicherweise ab Win98 bis Win7 und allen Versionen dazwischen. 6Chat bietet keinen privaten PC Support fпїЅr einzelne Chatter an. Die Chatsoftware-Programmierer arbeiten an einer LпїЅsung. Ganz generell: Individuelle Ausnahmeprobleme sind nicht "mal eben" ganz leicht zu beheben! Wer also trotz befolgen der untenstehenden RatschlпїЅge Probleme hat und sachlich an weitergehender Hilfe interessiert ist, mпїЅsste folgende Angaben mit dem 6Chat Kontaktformular machen: 2. PC, Smartphone oder iPad? 3. Exakte Angabe, welches Betriebssystem benпїЅtzt wird. Windows? Apple-OS? oder sonstige? 4. Exakte Version-Nummer des Betriebssystems. 5. Welcher Browser? plus genaue Version-Nummer dieses Browsers. 6. der Name des ISP (Internet Service Provider) Damit kann dieser dann versuchen herauszufinden, durch welche Konfigurationen die Probleme ausgelпїЅst werden. Bitte aber zuerst die RatschlпїЅge befolgen, welche die hпїЅufigsten Probleme lпїЅsen werden. Du kannst keine PM's (Private Messages - Private Nachrichten) schreiben? Du kommst zwar in den Chat hinein, kannst da auch im пїЅffentlichen Raum Texte schreiben, aber Privatnachrichten im Privat-Chatfenster gehen nicht. Es hat sich gezeigt das bei machen Browsern standardmпїЅssig aktivierte (eingeschaltete) POPUP-BLOCKER der Grund fпїЅr dieses Problem sind. Also, wenn dieses Problem mit dem PM schreiben auftritt, unbedingt mal den POPUP-Blocker deines Browsers ausschalten und nochmal versuchen eine PM zu schreiben. Es geht trotz befolgen von LпїЅsungsvorschlag 1 nicht? Du kannst gar nicht einloggen, weil kein Login Formular erscheint? Das Java Applet lпїЅdt also gar nicht? Es kommt eine Error-Meldung, dass das "Plugin" nicht geladen werden kann? Geh unbedingt auf die Webseite von: http://www.java.com/de/ Die Software ist kostenlos erhпїЅltlich und auch fпїЅr viele andere Anwendungen im Web erforderlich! Auf der oben angegebenen Webseite wird dir geholfen! - Kostenloser Java downloaden und gleich installieren. - Checken ob du eine aktuelle Java Version hast. - Sonstige ErklпїЅrungen, was Java eigentlich ist. Es geht trotz befolgen von LпїЅsungsvorschlag 1+2 nicht? BenпїЅtzst du auf deinem PC eine Firewall, oder Firewall Software? Wenn ja, deaktiviere mal vorпїЅbergehend die Firewall. Wenn nun der Login klappt, dann mпїЅsste hпїЅchstwahrscheinlich eine Einstellung bei deiner Firewall geпїЅndert werden. Weiteren Support zu Firewalls kann ich nicht geben, weil zu unterschiedlich und komplex. Es geht trotz befolgen von LпїЅsungsvorschlag 1+2+3 nicht? Eventuell ist dein Internetbrowser selbst das Problem. Probier einfach mal einen andern Browser. Die Teile gibt es ja alle kostenlos im www. Hier gleich die URLs zu den Downloadseiten der gпїЅngigsten Browser. LпїЅsungsvorschlag 4 fпїЅr Smartphones: Ein fпїЅhiger Webbrowser fпїЅr Android Smartphones der gut mit 6Chat funktioniert. Es geht trotz befolgen von LпїЅsungsvorschlag 1+2+3+4 nicht? Weitere mпїЅgliche GrпїЅnde: - Auf deinem PC besteht ein Konflikt mit irgendwelchen Einstellungen. - Deine Internetverbindung ist zu langsam. - Dein Internetprovider hat irgend ein Problem. Diese von 6Chat benпїЅtzte Chatsoftware ist nicht irgend ein exotisches Produkt, sondern wird weltweit von vielen Chatbetreibern erfolgreich eingesetzt und lпїЅuft bei den allermeisten Usern tadellos. Ausnahmefehler werden von aussergewпїЅhnlichen Betriebssystem-Konfigurationen ausgelпїЅst und sind nicht "mal eben" ganz leicht zu beheben! Die Benutzung des 6Chat ist vпїЅllig kostenlos und freiwillig. Daher existiert natпїЅrlich auch kein Recht auf irgendwelche AnsprпїЅche.

Java konsole öffnen

Der Begriff "REST" (Representational State Transfer) wurde im Jahr 2000 von Roy Thomas Fielding geprдgt und definiert allgemeine Grundlagen eines Architekturstils, der auf identifizierbaren Ressourcen, verschiedenen Reprдsentationen, Hypermedia und einheitlichen Schnittstellen basiert. Dieser Architekturstil ist nicht auf HTTP beschrдnkt, aber das auf HTTP basierende Web ist die bekannteste Implementierung. In Konkurrenz zu "SOA" (Service Oriented Architecture) wird auch manchmal von " ROA " (Resource Oriented Architecture) gesprochen. Eine Einfьhrung zu REST finden Sie im englischsprachigen Wikipedia. Wдhrend REST sehr allgemeine Grundlagen definiert, steht der Begriff "RESTful Web Services" fьr konkretere Definitionen fьr auf REST basierender Kommunikation, zum Beispiel das im JSR 370 definierte "JAX-RS: The Java API for RESTful Web Services". Diese Webseite behandelt JAX-RS 2.1, meistens mit Jersey 2.26. Die meisten Demos funktionieren auch mit JAX-RS 2.0 und mit anderen Jersey 2.x-Versionen. Falls Sie Infos zu JAX-RS 1.1 und Jersey 1.x suchen, sehen Sie sich bitte an: REST mit JAX-RS 1.1. RESTful Web Services konkurrieren mit SOAP Web Services, siehe hierzu den Vergleich weiter unten. Architekturstile. Insbesondere im SOA-Umfeld wird oft zwischen folgenden Architekturstilen unterschieden, obwohl die Grenzen flieЯend sind: Der Schwerpunkt liegt analog zur Programmierung auf aufzurufenden Operationen und zu ьbergebenen typgesicherten Parameter-Objekten (RPC, Remote Procedure Call). Jeder Service hat seine eigene Schnittstelle. Die Kommunikation erfolgt bevorzugt synchron, meistens ьber statisch gebundene Services und ьber eine direkte physische Verbindung. Das Nachrichtenformat kann der SOAP-Webservice-Spezifikation entsprechen und die Schnittstelle kann per WSDL definiert sein. Nachrichtenorientiert: Der Schwerpunkt liegt auf auszutauschenden Nachrichten/Dokumenten. Die Kommunikation erfolgt bevorzugt asynchron, zum Beispiel indirekt ьber vermittelnde MOM-Systeme (Message-oriented Middleware), was zu einer lockereren Kopplung fьhrt. Das Nachrichtenformat kann der SOAP-Webservice-Spezifikation entsprechen und die Schnittstelle kann per WSDL definiert sein. Ressourcenorientiert: Besser bekannt unter REST (Representational State Transfer). Der Schwerpunkt liegt analog dem Web und seinem HTTP-Protokoll auf per URI (z.B. URL) identifizierbaren Ressourcen und per Content-Type unterscheidbaren Reprдsentationen sowie auf Hypermedia und einheitlichen Schnittstellen. Ressourcen kцnnen in beliebiger Form Informationen, Daten und auch Dienste zur Verfьgung stellen. Die Ressource ist nicht das gespeicherte Objekt oder der Dienst selbst, sondern eine abstrakte Schnittstelle fьr eine konzeptuelle Zuordnung einer URI zu einem Objekt oder Dienst. Ressourcen werden nicht direkt, sondern in Form von Reprдsentationen ьbertragen und stellen einen derzeitigen oder beabsichtigten Zustand dar. Die Auswahl des Reprдsentationsformats kann ьber "Content-Negotiation" erfolgen. Vergleich zwischen REST und SOAP. Vergleiche zwischen REST und anderen Architekturstilen oder Technologien sind nicht einfach und schwer objektivierbar. Es gibt sicherlich nicht eine pauschal "bessere" Technologie, sondern es kommt auf den Einsatzfall an. Auch der folgende Vergleich ist sicherlich diskussionswьrdig: ressourcenorientiert mit generischer uniformer Schnittstelle (GET, PUT, POST, DELETE) POST kann eventuell durch "POST Once Exactly (POE)" abgesichert werden; verteilte Transaktionen ьber mehrere Ressourcen sind theoretisch durch den Einsatz von als Transaktionsmanager agierenden Ressourcen organisierbar. REST-konforme Verwendung von GET, PUT, POST und DELETE sowie Assoziationen zu CRUD. Die vier am hдufigsten benutzten HTTP-Verben sind GET, PUT, POST und DELETE. Seltener verwendet werden HEAD und OPTIONS. Die folgende Tabelle zeigt ьbliche Assoziationen zu CRUD (Create, Read, Update, Delete) und Beispiele fьr REST-konforme Verwendungen: --> Liste aller Bьcher; --> Informationen zu dem per ID ausgewдhlten Buch; --> Informationen zu dem per Suchkriterium ausgewдhlten Buch. --> Update (oder Create) des per ID identifizierten Artikels. --> Neuen Artikel hinzufьgen (mit neuer ID) (dabei wird ьblicherweise die automatisch vergebene ID returniert) --> Diesen per ID identifizierten Artikel lцschen. Versionierung von REST-Schnittstellen. Damit per REST kommunizierende Systeme bei Дnderungen an der REST-Schnittstelle weiter funktionieren, ist es ьblich, bei inkompatiblen Дnderungen fьr eine gewisse Zeit sowohl die alte als auch die neue REST-Schnittstelle zu unterstьtzen, so lange, bis alle Systeme auf die neue Schnittstellenversion umgestellt sind. Hierzu ist eine Versionierung der REST-Schnittstelle erforderlich, damit geziehlt die passende Version genutzt werden kann. Dazu gibt es verschiedene Verfahren, beispielsweise: Die Versionsbezeichnung ist Teil der Basis-URI, z.B.: Die Versionsbezeichnung ist einer der Query-Parameter, z.B.: Die Versionsbezeichnung ist Teil des Media-Typs, z.B.: Accept: application/vnd.meinmediatyp- v1 +xml XSD-Schema / Namespace: Falls die REST-Kommunikation ьber XML-Dateien erfolgt, kann die Versionierung ьber den Namespace erfolgen, z.B.: Infos zu JAX-RS und Jersey. Jersey ist die JAX-RS (JSR 370) Reference Implementation und wird in den meisten der folgenden Programmierbeispiele verwendet. Infos zu JAX-RS, JSR 370 und Jersey gibt es unter: JAX-RS-REST-HelloWorld-Programmierbeispiel, vorerst ohne Maven. Das folgende Beispiel zeigt eine minimale Implementierung eines RESTful-Webservices mit JAX-RS inklusive Server und Client. Um das Beispiel einfach zu halten, werden der REST-Client und der REST-Service im selben Modul implementiert. In realen Anwendungen sind Client und Service in getrennten Systemen. JAX-RS ist in Java EE (Enterprise Edition) enthalten. Aber fьr dieses erste simple Beispiel wollen wir uns auf Java SE (Standard Edition) beschrдnken, wo JAX-RS nicht enthalten ist. Deshalb wird eine JAX-RS-Implementierung benцtigt: Wir wдhlen die Referenzimplementierung Jersey. Siehe hierzu auch den Jersey User Guide. Als besonders einfacher Webserver wird Grizzly verwendet, der als embedded Server temporдr ad-hoc gestartet wird. In anderen Beispielen werden benцtigte Bibliotheken automatisch ьber Maven hinzugefьgt, aber in diesem ersten Beispiel soll alles manuell ohne Maven erfolgen. Installieren Sie ein aktuelles Java SE JDK (Java 8 oder Java 9). Legen Sie ein Projektverzeichnis an (z.B. \MeinWorkspace\JaxRsHelloWorld ), und darunter mehrere Verzeichnisse: Die Projektstruktur sieht jetzt so aus: Entzippen Sie das Jersey-Archiv in ein temporдres Verzeichnis und kopieren Sie in das JaxRsHelloWorld/lib -Verzeichnis entweder einfach alle 32 .jar-Libraries oder nur folgende 12: hk2-api-2.5.0-b42.jar , hk2-locator-2.5.0-b42.jar , hk2-utils-2.5.0-b42.jar , javax.annotation-api-1.2.jar , javax.inject-2.5.0-b42.jar , javax.json.bind-api-1.0.jar , validation-api-1.1.0.Final.jar , jersey-client.jar , jersey-common.jar , jersey-hk2.jar , jersey-server.jar . Bitte beachten Sie, dass die Versionen der jar-Libs zusammen passen mьssen, siehe hierzu auch beispielsweise Project Dependencies, sowie das folgende Programmierbeispiel und das " mvn dependency:tree "-Kommando. Legen Sie im src\minirestwebservice -Verzeichnis die folgenden drei Java-Dateien an. Wenn Sie nicht verschiedene Reprдsentationen (Ausgabeformate, hier: text/plain und text/html ) unterstьtzen wollen, genьgt nur eine der beiden GET-Methoden. Falls Sie weitere Reprдsentationen benцtigen (z.B. application/json , application/xml oder text/xml ), kцnnen Sie weitere Methoden hinzufьgen. Sehen Sie sich die GrizzlyHttpServerFactory-Klasse, die createHttpServer()-Methode und die resultierende HttpServer-Klasse, sowie die HttpServer-Doku an. Sehen Sie sich die Client- und WebTarget-Klassen an. Beachten Sie, dass auch asynchrone Clients erstellt werden kцnnen. Die Projektstruktur sieht jetzt so aus: Цffnen Sie ein Kommandozeilenfenster ('Windows-Taste' + 'R', 'cmd') und bauen Sie das Projekt: javac -cp bin;lib/* -d bin src/minirestwebservice/*.java. Mit Java 8 starten Sie so den den RESTful-Webservice-Server in einem eigenen Kommandozeilenfenster: start java -cp bin;lib/* minirestwebservice. HalloWeltTestServer. Mit Java 9 starten Sie so den den RESTful-Webservice-Server in einem eigenen Kommandozeilenfenster: start java --add-modules java.xml.bind -cp bin;lib/* minirestwebservice. HalloWeltTestServer. Warten Sie ca. eine Sekunde, bis der Server fertig gestartet ist, und starten Sie den RESTful-Webservice-Client. Ersetzen Sie dabei ich durch Ihren Namen. java -cp bin;lib/* minirestwebservice. HalloWeltTestClient ich. java --add-modules java.xml.bind -cp bin;lib/* minirestwebservice. HalloWeltTestClient ich. Sie erhalten im Kommandozeilenfenster: Rufen Sie folgende Webseiten auf: Im ersten Webbrowser-Fenster erscheint das Ergebnis der HTML-GET-Methode: Im zweiten und dritten Webbrowser-Fenster bieten MS Internet Explorer und Edge den Download der WADL-XML-Datei an, wдhrend einige Firefox-Versionen sie direkt anzeigen, und andere Firefox-Versionen zuerst nichts anzeigen, sondern erst beim Klick mit der rechten Maustaste und anschlieЯend auf "Seitenquelltext anzeigen". Weiter unten wird gezeigt, wie die WADL-Datei sehr einfach mit cURL angezeigt werden kann. Jersey produziert eine kurze und mit detail=true eine lange Variante der WADL-Datei. Die Kurzversion lautet: WADL (Web Application Description Language) ist ein XML-basiertes Dateiformat zur Beschreibung von Schnittstellen von HTTP-basierten Anwendungen (besonders RESTful-Webservices) in maschinenlesbarer Form (teilweise vergleichbar mit WSDL). Sie kцnnen leicht die Beschreibung der zwei implementierten GET-Methoden halloText() und halloHtml() mit den unterschiedlichen Mediatypen erkennen. Falls Sie die WADL-Datei um weitere Informationen ergдnzen wollen, sehen Sie sich WADL Support an. Sie kцnnen auch andere URLs beim HalloWeltTestServer - und HalloWeltTestClient -Aufruf ьbergeben, auch inklusive eines Web-Root-ContextPath-Anteils, beispielsweise http://localhost:4711/xyz . Sehen Sie sich weiter unten die Installationsbeschreibung zu cURL und die Erlдuterungen zu den folgenden cURL-Kommandos an. Fьhren Sie aus: curl -i -H "Accept:text/plain" "http://localhost:4434/helloworld?name=ich" curl -i -H "Accept:text/html" "http://localhost:4434/helloworld?name=ich" curl -i "http://localhost:4434/application.wadl" Sehen Sie sich auch weiter unten die anderen Kommandozeilen-Client-Tools sowie die Webbrowser-Client-Tools und die TCP/IP-Monitore zur Analyse der REST-Kommunikation an. Beenden Sie den HalloWeltTestServer mit: Strg+C. JAX-RS-REST-HelloWorld-Programmierbeispiel mit Maven. Das folgende Programmierbeispiel ist дhnlich wie obiges JAX-RS-REST-HelloWorld-Programmierbeispiel, vorerst ohne Maven. Allerdings werden diesmal die benцtigten Libs nicht manuel downgeloadet und hinzugefьgt. Stattdessen werden sie mit Hilfe des Build-Tools Maven automatisch hinzugefьgt. Es wird wieder ein RESTful-Webservice mit JAX-RS, Jersey und Grizzly erstellt. Auch hier sind wieder der Einfachheit halber REST-Client und REST-Service im selben Modul implementiert (weiter unten folgt ein Beispiel mit getrennten Modulen). Sie kцnnen die Programmierbeispiele entweder als Zipdatei downloaden oder Schritt fьr Schritt aufbauen, wie im Folgenden beschrieben wird. Installieren Sie Maven wie beschrieben in: maven.htm#Installation. Wechseln Sie in Ihr Workspace-Verzeichnis (z.B. \MeinWorkspace ) und fьhren Sie folgende Kommandos aus: Falls Sie das obige Programmierbeispiel JAX-RS-REST-HelloWorld-Programmierbeispiel, vorerst ohne Maven durchgefьhrt haben, kopieren Sie daraus die drei Java-Dateien: xcopy ..\JaxRsHelloWorld\src\minirestwebservice\*.java src\main\java\minirestwebservice\ Erstellen Sie im JaxRsMitMaven -Projektverzeichnis die Maven-Projektkonfigurationsdatei: pom.xml. Achtung: Beachten Sie die unterschiedliche Konfiguration fьr Java 8 und Java 9: Fьr Java 8 muss der oben gezeigte maven-surefire-plugin -Konfigurationsblock entfernt werden! Fьr Java 9 haben Sie zwei Mцglichkeiten: Enweder Sie fьgen den maven-surefire-plugin -Konfigurationsblock so wie oben gezeigt ein. Oder Sie fьgen den benцtigten Parameter bei jedem Maven-Aufruf auf der Kommandozeile hinzu, z.B. so: mvn -DargLine="--add-modules java.xml.bind" package. Erstellen Sie im src\main\webapp\WEB-INF -Verzeichnis die Servlet-Web-Konfiguration: web.xml. Unter dem Servlet-Parameter jersey.config.server.provider.packages sind drei Package-Angaben eingetragen: Fьr dieses erste Beispiel hдtte die Package-Angabe minirestwebservice genьgt. Die anderen beiden Packages werden erst in den weiter unten folgenden Beispielen verwendet. Fьgen Sie im src\test\java\minirestwebservice -Testverzeichnis eine JUnit-Modultestklasse hinzu: HalloWeltServiceTest.java. Bitte beachten Sie, dass Sie diesmal nicht manuell Libs zum Projekt hinzukopieren mьssen, weil sich darum Maven kьmmert. Die Projektstruktur sieht jetzt so aus (ьberprьfen Sie es mit tree /F ): Fьhren Sie den JUnit-Modultest aus: Beachten Sie, dass im JUnit-Modultest wдhrend der Dauer des Tests ein Grizzly-Webserver als embedded Server temporдr gestartet (" INFORMATION: [HttpServer] Started ") und anschlieЯend beendet wird. Sie kцnnen auch weiterhin den HalloWeltTestServer und den HalloWeltTestClient ьber die Kommandozeile betreiben: start java -cp target/JaxRsMitMaven/WEB-INF/classes;target/JaxRsMitMaven/WEB-INF/lib/* minirestwebservice. HalloWeltTestServer. java -cp target/JaxRsMitMaven/WEB-INF/classes;target/JaxRsMitMaven/WEB-INF/lib/* minirestwebservice. HalloWeltTestClient ich. Auch cURL kцnnen Sie weiter verwenden (bei laufendem HalloWeltTestServer ): curl -i -H "Accept:text/plain" "http://localhost:4434/helloworld?name=ich" curl -i -H "Accept:text/html" "http://localhost:4434/helloworld?name=ich" curl -i "http://localhost:4434/application.wadl" Beenden Sie den Grizzly-Webserver mit: Strg+C. Die WAR-Datei im target -Verzeichnis kцnnen Sie in Java EE Webserver, Application Server und Servlet-Container deployen. Kopieren Sie die WAR-Datei ins Tomcat- webapps -Verzeichnis, warten Sie ein paar Sekunden, und rufen Sie den REST-Service auf: copy target\ JaxRsMitMaven.war D:\Tools\ Tomcat\webapps\ curl -i -H "Accept:text/plain" "http://localhost:8080/JaxRsMitMaven/rest/helloworld?name=ich" curl -i -H "Accept:text/html" "http://localhost:8080/JaxRsMitMaven/rest/helloworld?name=ich" curl -i "http://localhost:8080/JaxRsMitMaven/rest/application.wadl" Kopieren Sie die WAR-Datei ins WebLogic- autodeploy -Verzeichnis, warten Sie ein paar Sekunden, und rufen Sie den REST-Service auf: copy target\ JaxRsMitMaven.war C:\ WebLogic \user_projects\domains\MeineDomain\ autodeploy\ curl -i -H "Accept:text/plain" "http://localhost:7001/JaxRsMitMaven/rest/helloworld?name=ich" curl -i -H "Accept:text/html" "http://localhost:7001/JaxRsMitMaven/rest/helloworld?name=ich" curl -i "http://localhost:7001/JaxRsMitMaven/rest/application.wadl" Falls Sie statt des gewьnschten Ergebnisses die Fehlermeldung " HTTP Status 404 - Not Found " erhalten, ьberprьfen Sie Folgendes: Ist die URL und insbesondere die GroЯ/Kleinschreibung in der URL korrekt? Entspricht der erste Teil in der URL nach der Portnummer (im Beispiel JaxRsMitMaven ) dem Namen der WAR-Datei? Entspricht der sich anschlieЯende URL-Teil (im Beispiel rest ) dem Eintrag in der web.xml unter url-pattern ? Entspricht der sich daran anschlieЯende URL-Teil (im Beispiel helloworld ) dem @Path -Eintrag in der REST-Service-Java-Datei (im Beispiel HalloWeltService.java )? Ist das Package des REST-Services in der web.xml unter jersey.config.server.provider.packages eingetragen? Falls Sie Eclipse einsetzen wollen, bereiten Sie Eclipse vor wie unter maven.htm#Eclipse beschrieben: Fьhren Sie entweder das Kommando " mvn eclipse:eclipse " aus oder verwenden Sie M2Eclipse, und laden Sie das JaxRsMitMaven -Projekt in Eclipse, und fьhren Sie den JUnit-Modultest innerhalb von Eclipse aus. Falls Sie Java 8 verwenden und folgende Fehlermeldung erhalten: [ERROR] The forked VM terminated without properly saying goodbye. VM crash or System.exit called? [ERROR] Command was cmd.exe /X /C ""C:\Program Files\Java\jdk1.8\jre\bin\java" --add-modules java.xml.bind -jar . Dann haben Sie den Parameter " --add-modules java.xml.bind " verwendet, der nur unter Java 9 verwendet werden darf. Sehen Sie sich die obigen Erlдuterungen an. Falls Sie Java 9 verwenden und folgende Fehlermeldung erhalten: Caused by: java.lang.ClassNotFoundException: javax.xml.bind.PropertyException. Dann fehlt der Parameter " --add-modules java.xml.bind ", der unter Java 9 fьr diese Demo benцtigt wird. Sehen Sie sich die obigen Erlдuterungen an. JAX-RS mit XML-Daten per JAXB. Mit RESTful-Webservices kцnnen Java-Objekte nicht direkt, aber zum Beispiel als XML-Reprдsentation ьbertragen werden, sowohl als Input-Argument, als auch als returniertes Ergebnis. Das Marshalling und Unmarshalling erfolgt vorzugsweise mit JAXB. Dies demonstriert das folgende Beispiel, welches der Einfachheit halber auf dem letzten aufbaut. Erstellen Sie im JaxRsMitMaven -Projekt im Verzeichnis src\main\java das neue Unterverzeichnis xmljaxb und darin folgende drei Java-Klassen. Erstellen Sie im Testverzeichnis src\test\java das neue Unterverzeichnis xmljaxb und darin die JUnit-Modultestklasse: XmlJaxbServiceTest.java. Sehen Sie sich die Client- und WebTarget-Klassen sowie die post()-Methode an. Die Projektstruktur sieht jetzt so aus (ьberprьfen Sie es mit tree /F ): Fьhren Sie die JUnit-Modultests aus: Falls Sie vor dem Stoppen des Testservers eine Warteschleife hinzufьgen (z.B. Thread.sleep( 20000 ); ), kцnnen Sie den REST-Service auch mit cURL ansprechen: Bitte beachten Sie, dass beim cURL-Kommando auf der Kommandozeile hinter " POST -d " XML ьbergeben wird und das Resultat ebenfals XML ist (" <?xml . > "). Falls Sie das Input-XML nicht wie gezeigt als Textstring ьbergeben wollen, sondern stattdessen aus einer XML-Datei beziehen wollen, mьssen Sie beim " -d "-Parameter dem Pfad ein "@" voranstellen und das cURL-Kommando wьrde lauten: curl -i -H Content-type:text/xml --request POST -d " @ meinpfad\MeineXmlDatei.xml" "http://localhost:4434/xmljaxb" Falls Sie das korrekte Character-Encoding mit cURL testen wollen, mьssen Sie Umlaute und Sonderzeichen in Unicode ьbergeben, zum Beispiel so: Wenn Sie die resultierende x.xml in einen Webbrowser oder in einen auf UTF-8 umschaltbaren Editor laden, erhalten Sie: Sie kцnnen mit mvn package eine WAR-Datei im target -Verzeichnis erzeugen und diese WAR-Datei in einen Java EE Webserver, Application Server oder Servlet-Container deployen. Dann kцnnen Sie den REST-Service beispielsweise folgendermaЯen ansprechen: curl -i -H Content-type:text/xml --request POST -d "<inputTO><i>42</i><s>abc xyz</s></inputTO>" "http://localhost:8080/JaxRsMitMaven/rest/xmljaxb" Z.B. mit WebLogic: curl -i -H Content-type:text/xml --request POST -d "<inputTO><i>42</i><s>abc xyz</s></inputTO>" "http://localhost:7001/JaxRsMitMaven/rest/xmljaxb" Falls Sie nicht mit Java-Dateien beginnen wollen ("Code-First"), sondern mit Schema-XSD-Dateien ("Contract-First"), dann kцnnen Sie die Java-Datentransferobjektklassen auch mit xjc generieren lassen: Sehen Sie sich hierzu das folgende Beispiel an. "Contract-First"-REST-Service (ausgehend von Schema-XSD-Datei) Bei den bisherigen Programmierbeispielen wurde ohne explizite Schnittstellendefinition direkt mit der Java-Programmierung begonnen ("Code-First"). "Contract-First" dagegen bedeutet, dass nicht mit der Programmierung begonnen wird, sondern stattdessen zuerst Schnittstellenbeschreibungen inklusive der Schema-XSD-Dateien erstellt werden. Dies ist zwar fьr den Java-Programmierer etwas umstдndlicher, aber bietet einige Vorteile: Falls der Server- und der Clientteil von verschiedenen Personen oder Teams programmiert werden, kцnnen beide Teams sofort beginnen und parallel entwickeln. Die Schnittstelle kann unabhдngig von der zu verwendenden Programmiersprache definiert werden (eventuell werden Server und Client in verschiedenen Programmiersprachen erstellt oder die Programmiersprache steht zu Beginn noch nicht fest). Die Schnittstelle kann genauer spezifiziert werden, als es in Java mцglich wдre (z.B. durch "Restriktionen"). Дhnlich wie bei SOAP-Webservices kцnnen auch fьr RESTFul-Webservices Java-Klassen aus Schema-XSD-Dateien generiert werden. Wechseln Sie in Ihr Workspace-Verzeichnis (z.B. \MeinWorkspace ) und fьhren Sie folgende Kommandos aus: copy ..\JaxRsMitMaven\src\main\webapp\WEB-INF\web.xml src\main\webapp\WEB-INF\web.xml. Alternativ kцnnen Sie die Dateien natьrlich auch neu anlegen, siehe web.xml und pom.xml . Ersetzen Sie im neuen JaxRsContractFirstService -Projektverzeichnis in der kopierten pom.xml die Zeile. " <artifactId>JaxRsMitMaven</artifactId> " durch " <artifactId>JaxRsContractFirstService</artifactId> ". Erstellen Sie im src\main\webapp -Verzeichnis folgende Contract-First-Schema-XSD-Datei: MeinInpResSchema.xsd. Bitte beachten Sie, dass die Schema-XSD-Datei den Namespace mein.ns enthдlt (der in realen Anwendungen mit Ihrer umgekehrten Domain-Adresse beginnen sollte). Generieren Sie mit dem beim Java-JDK mitgelieferten JAXB-xjc-Tool aus der Schema-XSD-Datei Java-Klassen: xjc -d src/main/java -p contractfirstgenerated src/main/webapp/ MeinInpResSchema.xsd. Die Projektstruktur sieht jetzt so aus: Sehen Sie sich die generierten Klassen im src\main\java\contractfirstgenerated -Verzeichnis an. Beachten Sie, dass package-info.java keine Java-Klasse enthдlt, sondern nur Package-bezogene Annotationen mit XML- und Namespace-Informationen, und beachten Sie die beiden JAXBElement-create. () -Methoden in ObjectFactory.java , mit denen Objekte erzeugt werden kцnnen, die zusдtzlich zum Transferobjekt auch XML- und Namespace-Informationen enthalten. Fьgen Sie im src\main\java\contractfirstgenerated -Verzeichnis in der generierten Klasse ResultTO.java vor dem Klassennamen " public class ResultTO " folgende Zeile hinzu: Erstellen Sie im Verzeichnis src\main\java\contractfirstservice die Service-Klasse: ContractfirstService.java. Einen JUnit-Modultest kцnnten wir nahezu identisch wie oben gezeigt erstellen. Stattdessen wird diesmal der Test auf zwei Klassen aufgesplittet: Auf eine universelle wiederverwendbare REST-Server-Test-Util-Klasse (als AutoCloseable) und den eigentlichen JUnit-Modultest. Erstellen Sie im Testverzeichnis src\test\java\contractfirstservice die wiederverwendbare REST-Server-Test-Util-Klasse: RestServerTestUtil.java. Erstellen Sie im Testverzeichnis src\test\java\contractfirstservice die JUnit-Modultestklasse: ContractfirstServiceTest.java. Anders als bei der ResultTO -Klasse wurde der InputTO -Klasse keine @XmlRootElement -Annotation hinzugefьgt. Deshalb muss das inpTO -Objekt vor der Ьbergabe an die post() -Methode in ein JAXBElement umgewandelt werden. Dies erfolgt im Beispiel ьber " (new ObjectFactory()).createInputTO( inpTO ) ". Alternativ gibt es weitere Mцglichkeiten: a) Die Umwandlung hдtte auch erfolgen kцnnen ьber: " new JAXBElement ( new QName( "mein.ns", "inputTO" ), InputTO.class, inpTO ) ". b) Die Umwandlung kцnnte entfallen, wenn auch der InputTO -Klasse die @XmlRootElement -Annotation hinzugefьgt wьrde. Dann kцnnte der post() -Methode statt inpJaxb direkt das inpTO -Objekt ьbergeben werden. Falls Sie die Exception. javax.ws.rs.WebApplicationException: javax.xml.bind.UnmarshalException: unexpected element . Expected elements are . erhalten: Dann mьssen Sie der XmlRootElement -Annotation per name -Attribut den Namen des XML-Elements ьbergeben, beispielsweise so: @XmlRootElement( name="mein-xml-element" ) . Siehe hierzu auch: JAXB / XmlRootElement. Die Projektstruktur sieht jetzt so aus (ьberprьfen Sie es mit tree /F ): Fьhren Sie die JUnit-Modultests aus: Falls Sie in der REST-Server-Test-Util-Klasse RestServerTestUtil.java vor dem Stoppen des Testservers eine Warteschleife hinzufьgen (z.B. Thread.sleep( 20000 ); ), kцnnen Sie den REST-Service auch mit cURL ansprechen: Bitte beachten Sie, dass Sie diesmal den korrekten Namespace xmlns='mein.ns' angeben mьssen. Sie kцnnen mit mvn package eine WAR-Datei im target -Verzeichnis erzeugen und diese WAR-Datei in einen Java EE Webserver, Application Server oder Servlet-Container deployen. Dann kцnnen Sie den REST-Service beispielsweise folgendermaЯen ansprechen: curl -i -H Content-type:text/xml --request POST -d "<inputTO xmlns='mein.ns'><i>42</i><s>abc xyz</s></inputTO>" "http://localhost:8080/JaxRsContractFirstService/rest/contractfirst" Z.B. mit WebLogic: curl -i -H Content-type:text/xml --request POST -d "<inputTO xmlns='mein.ns'><i>42</i><s>abc xyz</s></inputTO>" "http://localhost:7001/JaxRsContractFirstService/rest/contractfirst" Da die Schema-XSD-Datei im src\main\webapp -Verzeichnis liegt, kцnnen Sie sie per cURL oder per Webbrowser abfragen, beispielsweise fьr WebLogic mit Port 7001: Falls Ihr Standard-Webbrowser die XSD-Datei nicht sinnvoll darstellt, und falls Sie den Microsoft-Edge-Browser installiert haben, verwenden Sie folgenden Aufruf: Falls Sie nicht das gewьnschte Ergebnis erhalten, prьfen Sie, ob Ihr Input-XML-Format wirklich dem XSD-Schema entspricht: Fьhren Sie eine Validierung durch, beispielsweise mit: XsdValidation.java. Alternativ kцnnen Sie auch das inputTO-XML-Rootelement erweitern um die Attribute " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='mein.ns MeinInpResSchema.xsd' ": Dann kцnnen Sie auch in Eclipse validieren (mit der rechten Maustaste). Falls Sie eine vollstдndige WADL-Datei haben, kцnnen Sie daraus Client-seitige Stubs mit wadl2java generieren. Falls Sie keine Schema-XSD-Datei haben, aber eine WSDL-Beschreibung, kцnnen Sie die Java-Klassen statt mit xjc auch mit wsimport generieren. Wenn Sie sowohl die vom Client versendeten XML-Anfragen als auch die XML-Server-Antworten analysieren wollen, sind so genannte HTTP-Monitore oder TCP/IP-Monitore sehr hilfreich, die als Proxy oder Tunnel zwischen Client und Server geschaltet werden. Um dies durchzufьhren, mьssen Sie allerdings in der Client-Anfrage-REST-URL (z.B. http://localhost:4435/contractfirst ) eine andere Portnummer als im REST-Server (z.B. http://localhost:4434 ) konfigurieren. Dies ist sehr einfach mцglich, indem Sie obigen ContractfirstServiceTest leicht modifizieren: Verwenden Sie den zweiten RestServerTestUtil -Konstruktor und ьbergeben Sie zwei verschiedene URLs, beispielsweise http://localhost:4434 und http://localhost:4435 . Konfigurieren Sie in einem beliebigen HTTP-Monitor oder TCP/IP-Monitor die beiden gewдhlten URLs als Server-Host und als Local-Port und fьhren Sie ContractfirstServiceTestMitHttpMonitor aus. Weiter unten unter TCP/IP-Monitore werden die einzelnen Schritte gezeigt, um dies in verschiedenen TCP/IP-Monitoren durchzufьhren. Sehen Sie sich dort die Screenshots an. "Contract-First"-REST-Client (ausgehend von Schema-XSD-Datei) Das letzte Beispiel JaxRsContractFirstService enthдlt einen REST-Service, aber keinen REST-Client. Anders als in den bisherigen Beispielen, soll diesmal der REST-Client in einem getrennten Modul implementiert werden, was natьrlich wesentlich realitдtsnдher ist. Das Besondere an diesem Beispiel ist, dass auch das REST-Client-Modul ьber einen JUnit-Modultest verfьgt, der wдhrend der Dauer des Tests einen Grizzly-Webserver als embedded Server temporдr startet und darin den REST-Service des anderen REST-Service-Modules ausfьhrt. Dies ist nicht immer mцglich. Aber es ist beispielsweise mцglich, falls: sowohl der Sourcecode des REST-Service als auch vom REST-Client zur Verfьgung steht (z.B. weil vom selben Team implementiert), oder wenn optional alternativ zum REST-Service ohnehin ein REST-Service-Mock fьr Tests erstellt wird (damit vielfдltige Testszenarien mцglich sind). Der im Folgenden gezeigte REST-Client benцtigt den REST-Service vom letzten Beispiel. Der Einfachheit halber werden auch einige Dateien aus dem letzten Beispiel kopiert (statt sie erneut per xjc zu generieren, was realitдtsnдher wдre). Wechseln Sie in Ihr Workspace-Verzeichnis (z.B. \MeinWorkspace ) und fьhren Sie folgende Kommandos aus: xcopy ..\JaxRsContractFirstService\src\main\java\contractfirstgenerated src\main\java\contractfirstgenerated\ /S. Fьhren Sie im neuen JaxRsContractFirstClient -Projektverzeichnis in der kopierten pom.xml zwei Дnderungen durch. Ersetzen Sie: a) die Zeile " <artifactId>JaxRsContractFirstService</artifactId> " durch " <artifactId>JaxRsContractFirstClient</artifactId> ", und. Damit im Client ein JUnit-Modultest implementiert werden kann, welcher den REST-Server startet, wird Zugriff auf zwei Klassen benцtigt, die beide im Server-Modul enthalten sind, auf die aber nicht so einfach zugegriffen werden kann, da es das Server-Modul bislang nur als WAR-Datei gibt: - Zum einen wird die REST-Server-Test-Util-Klasse RestServerTestUtil benцtigt. - Zum anderen wird die REST-Service-Klasse ContractfirstService benцtigt. Ergдnzen Sie fьr diese beiden Abhдngigkeiten im neuen JaxRsContractFirstClient -Projektverzeichnis in der kopierten pom.xml im " <dependencies> "-Block die folgenden beiden Dependencies: Beachten Sie die unterschiedliche spezielle Syntax: " <classifier>fuer-test</classifier> " und " <type>test-jar</type> ". Im REST-Service-Module JaxRsContractFirstService wird bislang lediglich eine WAR-Datei erzeugt, die fьr den Betrieb im Webserver verwendet wird. Diese WAR-Datei kann nicht fьr die genannten Abhдngigkeiten verwendet werden. Dafьr werden zwei zusдtzliche JAR-Dateien benцtigt, die mit Hilfe des maven-jar-plugin generiert werden. Ergдnzen Sie hierfьr in dem anderen JaxRsContractFirstService -Projektverzeichnis in der pom.xml hinter der Zeile " <plugins> " die Zeilen: Erlдuterungen zum maven-jar-plugin finden Sie unter maven.htm#Test-Jar und Maven JAR Plugin. Zurьck zum JaxRsContractFirstClient -Projekt: Erstellen Sie im Verzeichnis src\main\java\contractfirstclient die Client-Klasse: ContractFirstClient.java. Erstellen Sie im Testverzeichnis src\test\java\contractfirstclient die JUnit-Modultestklasse: ContractFirstClientTest.java. Die Projektstruktur des Client-Moduls sieht jetzt so aus (ьberprьfen Sie es mit tree /F ): Wechseln Sie in das REST-Service-Modulverzeichnis und fьhren Sie folgende Kommandos aus: mvn clean install. AuЯer der WAR-Datei JaxRsContractFirstService.war werden zusдtzlich die beiden JAR-Dateien JaxRsContractFirstService-fuer-test.jar und JaxRsContractFirstService-tests.jar erzeugt und in das lokale Maven-Repository kopiert. Wechseln Sie in das REST-Service-Modulverzeichnis und fьhren Sie folgende Kommandos aus: Der JUnit-Modultest ContractFirstClientTest.java im Client-Modul wird erfolgreich durchlaufen. Dafьr wurde wдhrend des Tests ein Grizzly-Webserver gestartet und der REST-Service ausgefьhrt. Falls Sie den REST-Service JaxRsContractFirstService im Tomcat deployt haben, kцnnen Sie folgendermaЯen den REST-Service mit dem neuen REST-Client ContractFirstClient per Kommandozeile abrufen (alles in einer einzigen Zeile): java -cp target/classes;../JaxRsContractFirstService/target/JaxRsContractFirstService/WEB-INF/lib/* contractfirstclient. ContractFirstClient http://localhost: 8080 /JaxRsContractFirstService/rest/contractfirst 33 aa. Falls Sie WebLogic verwenden: Tauschen Sie die Tomcat-Portnummer 8080 gegen die WebLogic-Portnummer 7001 aus. Authentifizierung, Integrationstest und Tomcat. Im folgenden Beispiel wird das JaxRsContractFirstService -Beispiel um Authentifizierung und um einen Integrationstest mit Tomcat erweitert. Installieren Sie Tomcat 9: Entzippen Sie den Inhalt des apache-tomcat-9.0.1 -Verzeichnisses beispielsweise nach D:\Tools\Tomcat . Fьhren Sie in Ihrem Projekte-Workspace-Verzeichnis folgende Kommandos aus: xcopy JaxRsContractFirstService JaxRsAuthentication\ /S. Ersetzen Sie im neuen JaxRsAuthentication -Projektverzeichnis den Inhalt der pom.xml durch: Passen Sie den Pfad in " <appsrv.srvhome> . </appsrv.srvhome> " an Ihre Tomcat-Installation an. Achtung: Beachten Sie die unterschiedliche Konfiguration fьr Java 8 und Java 9: Fьr Java 9 mьssen die beiden oben gezeigten kommentierten Konfigurationen wie gezeigt eingefьgt bleiben, aber fьr Java 8 mьssen sie entfernt werden! Ersetzen Sie im src\main\webapp\WEB-INF -Verzeichnis den Inhalt der web.xml durch: Erzeugen Sie im src\test\java\integrationstest -Verzeichnis folgende Testklasse: JaxRsAuthenticationIntegrTest.java. Beachten Sie, dass diesmal innerhalb der Integrationstestklasse kein Server gestartet wird, weil durch die Maven-Integrationstest-Konfiguration Tomcat gestartet wird. Fьgen Sie in Ihrer tomcat-users.xml in Ihrem Tomcat- conf -Verzeichnis (z.B. \Tools\Tomcat\conf ) die benцtigten Benutzer und Rollen hinzu, zum Beispiel so: Starten Sie den Integrationstest: Beachten Sie, dass Tomcat automatisch hoch- und wieder heruntergefahren wird. Falls Sie in der Integrationstestklasse JaxRsAuthenticationIntegrTest.java eine Warteschleife hinzufьgen (z.B. Thread.sleep( 20000 ); ), oder alternativ die WAR-Datei normal deployen, kцnnen Sie den REST-Service auch mit cURL ansprechen: curl -u "MeinName:MeinPasswort" -i -H Content-type:text/xml --request POST -d "<inputTO xmlns='mein.ns'><i>42</i><s>abc xyz</s></inputTO>" "http://localhost:8080/JaxRsAuthentication/rest/contractfirst" Bitte beachten Sie, dass Sie diesmal fьr die HTTP Basic Authentication mit -u den Benutzernamen und das Kennwort angeben mьssen (ansonsten wьrden Sie erhalten: " HTTP/1.1 401 Unauthorized "). AuЯerdem kцnnen Sie die Schema-XSD-Datei per cURL oder mit Edge abfragen: Dies ist mцglich, weil die Schema-XSD-Datei im src\main\webapp -Verzeichnis liegt. Falls Sie die Exception " Tomcat starting. java.lang.ClassNotFoundException: org.apache.catalina.startup.Catalina " erhalten: Prьfen Sie den in der pom.xml bei " <properties> . <appsrv.srvhome> . " eingetragenen Pfad zum Tomcat-Verzeichnis. Falls Sie Windows verwenden, sollte dieser Pfad inklusive Laufwerksbuchstabe angegeben sein. Falls Sie eine andere Exception erhalten, suchen Sie in der \Tools\Tomcat\logs\localhost.*.log -Datei die ursprьngliche Exception. Falls Sie WebLogic statt Tomcat verwenden wollen, sehen Sie sich die Hinweise zur Authentifizierung unter WebLogic an. JAX-RS-REST-Service mit embedded Jetty-Server. Die folgende Anwendung besteht aus nur zwei Java-Dateien und benцtigt keine web.xml . Trotzdem beinhaltet sie einen embedded Jetty-Webserver und einen JAX-RS-REST-Service mit Jersey, und ist direkt standalone ausfьhrbar. Der JAX-RS-REST-Service wird nicht in den Jetty-Webserver deployt, sondern stattdessen wird umgekehrt der Jetty-Webserver aus der Anwendung gestartet. Die Anwendung wird mit dem maven-shade-plugin zu einem direkt ausfьhrbaren Standalone-Fat-Jar gebьndelt, welches beispielsweise als Microservice ausgefьhrt werden kann. Doku zu Jetty finden Sie in: Jetty - The Definitive Reference. Das API ist beschrieben in der Jetty-API-Javadoc. Die in diesem Beispiel verwendete Jetty-Version setzt Java 8 voraus. Hinweise zu den verschiedenen Jetty-Versionen finden Sie unter: What Jetty Version Do I Use?. Doku zu Jersey finden Sie im Jersey User Guide. Wechseln Sie in Ihr Workspace-Verzeichnis (z.B. \MeinWorkspace ) und fьhren Sie folgende Kommandos aus: Erstellen Sie im JaxRsMitJetty -Projektverzeichnis die Maven-Projektkonfigurationsdatei: pom.xml. Erstellen Sie im Verzeichnis src\main\java\de\meinefirma\meinprojekt die Hauptanwendungsklasse mit der main() -Methode: MeineApp.java. Erstellen Sie im Verzeichnis src\main\java\de\meinefirma\meinprojekt die REST-Service-Klasse: MeinRestService.java. Die Projektstruktur sieht jetzt so aus (ьberprьfen Sie es mit tree /F ): Bauen Sie das Projekt: mvn clean package. Starten Sie die Anwendung. Dabei wird der embedded Jetty-Webserver mit dem JAX-RS-Jersey-REST-Service gestartet (statt der 8080 kцnnen Sie auch eine andere Portnummer wдhlen). Falls Sie Java 8 verwenden, rufen Sie auf: java -jar target/ JaxRsMitJetty.jar 8080. Falls Sie Java 9 verwenden, rufen Sie auf: java --add-modules java.xml.bind -jar target/ JaxRsMitJetty.jar 8080. Warten Sie bis der Webserver gestartet ist und folgende Zeile erscheint: Rufen Sie den REST-Service ab (ersetzen Sie "ich" durch einen Namen). Verwenden Sie entweder den Webbrowser: curl -H "Accept:text/plain" "http://localhost:8080/JaxRsMitJetty/rest/helloworld?name=ich" curl -H "Accept:text/html" "http://localhost:8080/JaxRsMitJetty/rest/helloworld?name=ich" Lassen Sie sich die WADL anzeigen: JAX-RS-REST-Service mit dem Jetty-Maven-Plugin. Die folgende Anwendung ist sehr дhnlich zum letzten Beispiel JAX-RS-REST-Service mit embedded Jetty-Server (JaxRsMitJetty). Anders als beim letzten Beispiel wird diesmal eine web.xml verwendet und das jetty-maven-plugin eingesetzt. Doku zu Jetty finden Sie in: Jetty - The Definitive Reference. Das API ist beschrieben in der Jetty-API-Javadoc. Die in diesem Beispiel verwendete Jetty-Version setzt Java 8 voraus. Hinweise zu den verschiedenen Jetty-Versionen finden Sie unter: What Jetty Version Do I Use?. Doku zu Jersey finden Sie im Jersey User Guide. Wechseln Sie in Ihr Workspace-Verzeichnis (z.B. \MeinWorkspace ) und fьhren Sie folgende Kommandos aus: Erstellen Sie im JaxRsMitJettyMavenPlugin -Projektverzeichnis die Maven-Projektkonfigurationsdatei: pom.xml. Erstellen Sie im Verzeichnis src\main\webapp\WEB-INF die Web-App-Konfiguration: web.xml. Erstellen Sie im Verzeichnis src\main\java\de\meinefirma\meinprojekt die REST-Service-Klasse: MeinRestService.java. Die Projektstruktur sieht jetzt so aus (ьberprьfen Sie es mit tree /F ): Bauen Sie das Projekt: mvn clean package. Sie erhalten eine WAR-Datei, die Sie in einen Servlet-Container oder Application Server (z.B. WebLogic 12.2.1) deployen kцnnten. Alternativ starten Sie mit dem jetty-maven-plugin einen Jetty-Server mit der deployten Anwendung. Falls Sie Java 8 verwenden, rufen Sie auf: Falls Sie Java 9 verwenden, rufen Sie auf: Warten Sie bis der Webserver gestartet ist und folgende Zeile erscheint: Rufen Sie den REST-Service ab (ersetzen Sie "ich" durch einen Namen). Verwenden Sie entweder den Webbrowser: curl -H "Accept:text/plain" "http://localhost:8080/JaxRsMitJettyMavenPlugin/rest/helloworld?name=ich" curl -H "Accept:text/html" "http://localhost:8080/JaxRsMitJettyMavenPlugin/rest/helloworld?name=ich" Lassen Sie sich die WADL anzeigen: Bьcherverwaltung-Programmierbeispiel mit @GET, @PUT, @POST, @DELETE, @PathParam, @QueryParam, @FormParam und @XmlRootElement. Maven-Webprojekt fьr die Bьcherverwaltung. Installieren Sie Tomcat 9: Entzippen Sie den Inhalt des apache-tomcat-9.0.1 -Verzeichnisses beispielsweise nach D:\Tools\Tomcat . Wechseln Sie in Ihr Workspace-Verzeichnis (z.B. \MeinWorkspace ) und fьhren Sie folgende Kommandos aus: Erstellen Sie im JaxRsBuecherverwaltung -Projektverzeichnis die Maven-Projektkonfigurationsdatei: pom.xml. Erstellen Sie im src\main\webapp\WEB-INF -Verzeichnis: web.xml. DO, TO, CRUD-DAO und Util fьr die Bьcherverwaltung. Erzeugen Sie im src\main\java\de\meinefirma\meinprojekt\buecher -Verzeichnis die Buch-Domainobjekt-Klasse: BuchDO.java. Erzeugen Sie im src\main\java\de\meinefirma\meinprojekt\buecher -Verzeichnis die Rueckgabe-Transferobjekt-Klasse: BuecherTO.java. Erzeugen Sie im src\main\java\de\meinefirma\meinprojekt\dao -Verzeichnis die CRUD-DAO-Klasse: BuchDoDAO.java. Erzeugen Sie im src\main\java\de\meinefirma\meinprojekt\dao -Verzeichnis die Util-Klasse: BuecherUtil.java. RESTful-Webservice. Erzeugen Sie im src\main\java\de\meinefirma\meinprojekt\rest -Verzeichnis die Java-Klasse BuecherRestService.java , in welcher die vier HTTP-Verben GET, PUT, POST und DELETE als RESTful-Webservice REST-konform implementiert werden: Erzeugen Sie im src\main\webapp -Verzeichnis die HTML-Seite: index.html. Test per Webseite. Die Projektstruktur sieht jetzt so aus (ьberprьfen Sie es mit tree /F ): Die Package-Struktur ist etwas ungewцhnlich, aber so kцnnen zum einen leichter die DO- und TO-Klassen aus Schema-XSD-Dateien generiert werden ("Contract-First") und zum anderen kann leichter zusдtzlich ein SOAP Webservice hinzugefьgt werden (siehe unten). Testen Sie den RESTful-Webservice (passen Sie die Pfade an). Falls Sie Java 8 verwenden, setzen Sie: Falls Sie Java 9 verwenden, setzen Sie: Fahren Sie fort mit: copy target\JaxRsBuecherverwaltung.war %TOMCAT_HOME%\webapps. Warten Sie ein paar Sekunden, bis das Deployment fertig ist. Klicken Sie auf der JaxRsBuecherverwaltung-Webseite auf die verschiedenen Links und sehen Sie sich die jeweiligen XML-Ergebnisse an. Leider zeigen neuere Versionen vom Firefox-Webbrowser die XML-Dateien nur noch verstьmmelt an. Verwenden Sie in diesem Fall entweder einen anderen Webbrowser, z.B. Edge, oder verwenden Sie ein Kommandozeilen-Tool, wie cURL, oder verwenden Sie einen eigenen Client, wie im folgenden Beispiel. Studieren Sie die WADL-Beschreibung. Fьgen Sie ьber "Neues Buch anlegen" verschiedene neue Bьcher hinzu. Finden Sie Bьcher ьber "Bьcher finden". Dabei genьgen in den ISBN- und Titel-Feldern auch Teil-Strings (z.B. ISBN '123' oder Titel 'meintit'), so dass mit einer Anfrage mehrere passende Bьcher gefunden werden kцnnen. Beenden Sie Tomcat: GET, PUT, POST und DELETE mit einem Java-Client. Erzeugen Sie im src\main\java\de\meinefirma\meinprojekt\client -Verzeichnis die RESTful-Webservice-Client-Klasse: BuecherRestClient.java. Speichern Sie folgende Kommandos in einer Batchdatei (z.B. run-Client.bat ), passen Sie darin die Pfade an und fьhren Sie die Batchdatei aus: Sehen Sie sich die Ausgaben von BuecherRestClient auf der Konsole an, und vergleichen Sie die beiden Webseiten (vorher bzw. nachher). Die ping -Kommandos dienen nur dazu, um kurze Pausen einzulegen. Der Browser-Prefix " microsoft-edge: " funktioniert natьrlich nur, wenn Sie den Microsoft-Edge-Webbrowser installiert haben. Falls Sie Java 9 verwenden: Beachten Sie, wie in der Batchdatei fьr den Tomcat-Aufruf die Umgebungsvariable JAVA_OPTS auf --add-modules=java.se.ee gesetzt wird. Und beachten Sie, dass der BuecherRestClient nicht mit --add-modules=java.se.ee gestartet werden kann, sondern stattdessen mit --add-modules=java.xml.bind gestartet werden muss, weil Sie sonst eine Exception erhalten wьrden: Caused by: java.lang.ClassNotFoundException: javax.annotation.Priority. Sehen Sie sich hierzu die Erlдuterungen an unter: Problem mit "add-modules". GET, PUT, POST und DELETE mit cURL. Die REST-konforme Verwendungen von GET, PUT, POST und DELETE ist oben unter GET, PUT, POST und DELETE erlдutert. Installieren Sie cURL wie weiter unten beschrieben. Lassen Sie sich nach jeder Дnderung die Liste aller Bьcher anzeigen ьber: Starten Sie Tomcat. Falls Sie Java 8 verwenden, setzen Sie: Falls Sie Java 9 verwenden, setzen Sie: Fahren Sie fort mit: POST: Fьgen Sie zwei neue Bьcher hinzu: curl --request POST -d "isbn=1234567891&titel=MeinTitel1&preis=12.34" "http://localhost:8080/JaxRsBuecherverwaltung/rest/Artikel/Buecher" curl --request POST -d "isbn=1234567892&titel=MeinTitel2&preis=22.34" "http://localhost:8080/JaxRsBuecherverwaltung/rest/Artikel/Buecher" Die neu angelegten Bьcher werden mit den neu erzeugten Buch-IDs returniert: GET per ID: Laden Sie das Buch mit der ID 4711: curl -i "http://localhost:8080/JaxRsBuecherverwaltung/rest/Artikel/Buecher/ 4711 " GET mit Suchparametern: Suchen Sie nach Titeln: curl -i "http://localhost:8080/JaxRsBuecherverwaltung/rest/Artikel/Buecher? titel=MeinTitel " PUT: Дndern Sie die Informationen eines vorhandenen Buches: curl --request PUT -d "isbn=1234567899&titel=PUT-Titel&preis=111" "http://localhost:8080/JaxRsBuecherverwaltung/rest/Artikel/Buecher/ 4712 " Das geдnderte Buch wird returniert: DELETE: Lцschen Sie ein vorhandenes Buch: curl --request DELETE "http://localhost:8080/JaxRsBuecherverwaltung/rest/Artikel/Buecher/ 4711 " Media Type: Falls Sie bei anderen REST-Diensten den Fehler " 415 Unsupported Media Type " erhalten, probieren Sie verschiedene Mediatypen. Falls Sie Daten (z.B. per XML ьber POST) ьbergeben, sollte auch " -H Content-type. " korrekt gesetzt werden. " -H Accept. " definiert nur den Mediatyp des erwarteten Ergebnisses. Bitte beachten Sie auch, dass bei XML manchmal text/xml und manchmal application/xml erwartet wird (siehe hierzu auch: IETF RFC 3023: XML Media Types, difference text/xml vs application/xml, application/xml or text/xml?). POST mit PostToUrl. Falls Sie einen POST-Request per Java, aber ohne Jersey, verschicken wollen, sehen Sie sich das Programmierbeispiel PostToUrl an. Zum Beispiel folgendermaЯen kцnnen Sie damit ein neues Buch anlegen: java PostToUrl http://localhost:8080/JaxRsBuecherverwaltung/rest/Artikel/Buecher "isbn=9876543213&titel=PostToUrl-Titel&preis=333" Das Programmierbeispiel ist auch auf GET, PUT und DELETE erweiterbar. Performance-Vergleich zwischen REST (mit JAX-RS) und SOAP (mit JAX-WS) Im Folgenden wird das letzte Beispiel (REST-Webservice mit JAX-RS) um einen SOAP-Webservice mit JAX-WS erweitert, um vergleichende Performance-Messungen durchfьhren zu kцnnen. Legen Sie eine Kopie in einem neuen Verzeichnis an: xcopy JaxRsBuecherverwaltung JaxRsJaxWsPerformance\ /S. Ergдnzen Sie in der pom.xml folgende Dependency: Erzeugen Sie im src\main\java\de\meinefirma\meinprojekt\buecher -Verzeichnis das SOAP-Webservice-Interface: BuecherSoapServiceIntf.java. Erzeugen Sie im src\main\java\de\meinefirma\meinprojekt\buecher -Verzeichnis die SOAP-Webservice-Implementierung: BuecherSoapServiceImpl.java. Ersetzen Sie im src\main\webapp\WEB-INF -Verzeichnis den Inhalt der web.xml durch: Erzeugen Sie im src\main\webapp\WEB-INF -Verzeichnis den JAX-WS-Deskriptor: sun-jaxws.xml. Erzeugen Sie im src\main\java\de\meinefirma\meinprojekt\client -Verzeichnis die fьr REST und SOAP gemeinsame Performance-Test-Klasse: BuecherRestAndSoapPerfTestClient.java. Die Projektstruktur sieht jetzt so aus (ьberprьfen Sie es mit tree /F ): Wenn Sie wie gezeigt die SOAP-Service-Klassen im buecher -Package speichern, kцnnen Sie das Beispiel leicht fьr andere neue generierte Klassen erweitern ("Contract-First"): Falls Sie eine Schema-XSD-Datei haben, kцnnen Sie BuchDO.java und BuecherTO.java mit xjc generieren. Falls Sie eine WSDL-Datei haben, kцnnen Sie BuchDO.java , BuecherTO.java und BuecherSoapServiceIntf.java mit wsimport generieren. Die Batchdateien run-*.bat sind im Source-Download enthalten. Starten Sie Tomcat, kopieren Sie die WAR-Datei in das Tomcat- webapps -Verzeichnis und starten Sie den Test (siehe auch run-RestSoapPerf.bat ): copy target\JaxRsBuecherverwaltung.war D:\Tools\Tomcat\webapps. Ca. 20 Sekunden warten, bis Deployment fertig. java de.meinefirma.meinprojekt.client.BuecherRestAndSoapPerfTestClient 1000 http://localhost:8080/JaxRsBuecherverwaltung. Je nach Geschwindigkeit Ihres PCs bzw. Ihres Netzwerks erhalten Sie sehr unterschiedliche Ergebnisse. Aber die Unterschiede zwischen REST und SOAP sind gering und eher zufдllig, weshalb die folgende Tabelle nur verschiedene Anbindungen zeigt: von 1000 Bьchern. von 1000 Bьchern. Falls Sie eine Exception erhalten, suchen Sie in der \Tools\Tomcat\logs\localhost.*.log -Datei die ursprьngliche Exception. JAX-RS-REST-Service mit Dropwizard. Dropwizard ist ein Java-Framework fьr die Entwicklung performanter Operating-freundlicher RESTful-Webservices. Es ist besonders gut zur Entwicklung von Microservices geeignet. In Teilbereichen konkurriert es mit Spring Boot. Dropwizard verwendet den Webserver Jetty, JAX-RS mit Jersey, JSON mit Jackson, Validierung mit Hibernate Validator, Resilience mit Hystrix und Tenacity, Metrics, OAuth2, Logback, SLF4J, und zur Konfiguration das YAML-Format. Das folgende Beispiel konzentriert sich auf nur wenige Features von Dropwizard. Hauptsдchlich implementiert es einen JAX-RS-Jersey-REST-Service, inklusive JUnit-Modultest, Health-Check und Ausgabe vieler Metriken. Die Ergebnisse werden im JSON-Format geliefert. Der JAX-RS-REST-Service wird nicht in den Jetty-Webserver deployt, sondern stattdessen wird umgekehrt der Jetty-Webserver aus der Anwendung gestartet. Die Anwendung wird mit dem maven-shade-plugin und dem maven-jar-plugin zu einem direkt ausfьhrbaren Standalone-Fat-Jar gebьndelt, welches beispielsweise als Microservice ausgefьhrt werden kann. Wechseln Sie in Ihr Workspace-Verzeichnis (z.B. \MeinWorkspace ) und fьhren Sie folgende Kommandos aus: Erstellen Sie im DropwizardDemo -Projektverzeichnis die Maven-Projektkonfigurationsdatei: pom.xml. Erstellen Sie im DropwizardDemo -Projektverzeichnis die Dropwizard-Konfigurationsdatei (im YAML-Format): local.config.yml. Erstellen Sie im Verzeichnis src\main\java\de\meinefirma\meinprojekt die folgenden fьnf Java-Klassen: Hauptanwendungsklasse mit der main() -Methode: MeineApp.java. Erstellen Sie im Testverzeichnis src\test\java\de\meinefirma\meinprojekt die JUnit-Modultestklasse: MeinRestServiceTest.java. Die Projektstruktur sieht jetzt so aus (ьberprьfen Sie es mit tree /F ): Bauen Sie das Projekt und fьhren Sie dabei den JUnit-Modultest aus, und starten Sie die Anwendung, dabei wird der embedded Webserver mit dem REST-Service gestartet. Falls Sie Java 8 verwenden, rufen Sie auf: mvn clean package. java -jar target/ DropwizardDemo-1.0-SNAPSHOT.jar server local.config.yml. Falls Sie Java 9 verwenden, rufen Sie auf: mvn -DargLine="--add-modules java.xml.bind" clean package. java --add-modules java.xml.bind -jar target/ DropwizardDemo-1.0-SNAPSHOT.jar server local.config.yml. Warten Sie bis der Webserver gestartet ist und folgende Zeile erscheint: Цffnen Sie folgende URLs im Webbrowser und sehen Sie sich die Ergebnisse im JSON-Format an: Beachten Sie, dass die Annotation @Timed in der REST-Service-Klasse MeinRestService.java dazu fьhrt, dass bei den Metriken die Laufzeiten dieser Methode unter "timers" angezeigt wird. Alternativ zur JSON-Webschnittstelle kцnnen Sie die Metriken auch ьber JMX-MBeans abrufen, beispielsweise mit JConsole: Der Kommandozeilen-JSON-Prozessor jp. "jp" ist ein "lightweight and flexible command-line JSON processor", also ein leichtgewichtiger flexibler Kommandozeilen-JSON-Prozessor. Sie kцnnen ihn downloaden unter https://stedolan.github.io/jq/. Im Folgenden wird nicht auf die vielen Features von jp eingegangen. Sehen Sie sich hierzu das jq Tutorial und das ausfьhrliche jq Manual an. Hier wird jp lediglich als sehr praktisches Tool vorgestellt, mit dem sehr einfach und bequem die Antworten von JSON-REST-Schnittstellen ausgewertet werden kцnnen. Es folgen ein paar konkrete Beispiele zur Anwendung von jp unter Windows (unter Linux ist die Syntax sehr дhnlich) (Infos zu den hier verwendeten JSON-REST-Schnittstellen finden Sie im folgenden Kapitel). Fragen Sie die unformatierte JSON-Antwort vom Euro-Kurs zum Dollar und zum Britischen Pfund ab, vom Fixer.io-JSON-REST-Service: Formatieren Sie die JSON-Ausgabe, damit sie leichter lesbar ist: curl -s http://api.fixer.io/latest?symbols=USD,GBP | jq-win64. Extrahieren Sie einen bestimmten Wert aus dem JSON-Ergebnis (in diesem Beispiel den Dollar-Kurs zum Euro): curl -s http://api.fixer.io/latest?symbols=USD,GBP | jq-win64 .rates.USD. Testen Sie analoge Kommandos fьr den Bitcoin-Kurs mit dem Blockchain.info-JSON-REST-Service: curl -s http://blockchain.info/de/ticker | jq-win64. curl -s http://blockchain.info/de/ticker | jq-win64 -r .EUR. curl -s http://blockchain.info/de/ticker | jq-win64 -r .EUR.last. curl -s http://blockchain.info/de/ticker | jq-win64 -r ".EUR|((.last|tostring)+\" \"+.symbol)" > Bitcoin.txt. Testen Sie analoge Kommandos fьr den Bitcoin-Kurs mit dem Coindesk.com-JSON-REST-Service: curl -s http://api.coindesk.com/v1/bpi/currentprice.json | jq-win64. curl -s http://api.coindesk.com/v1/bpi/currentprice.json | jq-win64 -r .bpi.EUR.rate. Testen Sie den JSON-REST-Service zur Ermittlung von Lдnderkьrzeln (im Beispiel zu "Fiji") mit dem GroupKT.com-JSON-REST-Service: curl -s http://services.groupkt.com/country/get/all | jq-win64 ".RestResponse.result[] | select(.name==\"Fiji\")" curl -s http://services.groupkt.com/country/get/all | jq-win64 ".RestResponse.result[] | select(.name==\"Fiji\") .alpha2_code" Testen Sie den JSON-REST-Service zur Ermittlung des Geschlechts zu Vornamen (im Beispiel zu "Kim") mit dem Genderize.io-JSON-REST-Service: curl -s curl https://api.genderize.io/?name=Kim | jq-win64. curl -s curl https://api.genderize.io/?name=Kim | jq-win64 -r .gender. JSON-REST-Client mit HttpURLConnection und JsonObject. AuЯer JAX-RS gibt es viele weitere Alternativen, um REST-Clients zu implementieren. Eine mцgliche Alternative ist, HttpURLConnection zu verwenden. Zur Auswertung der JSON-Ergebnisse ist JsonObject sehr gut geeignet. Das folgende Beispiel demonstriert: wie mit HttpURLConnection die HTTP-Abfrage fьr einen REST-Client implementiert werden kann, wie mit JsonObject ein JSON-REST-Client implementiert werden kann, was insbesondere dann sinnvoll ist, falls zur JSON-Rest-Schnittstelle keine Java-Klasse existiert, wie aus dem JsonObject einzelne Attribute und Arrays ermittelt werden kцnnen (sehen Sie sich hierzu das kurze Java JSON Tutorial an), wie der frei zugдngliche цffentliche JSON-REST-Service zur Ermittlung des Dollar-Kurses unter http://api.fixer.io/latest?symbols=USD,GBP damit abgefragt werden kann, Infos hierzu finden Sie unter: http://fixer.io, wie der frei zugдngliche цffentliche JSON-REST-Service zur Ermittlung des Bitcoin-Kurses unter http://api.coindesk.com/v1/bpi/currentprice.json damit abgefragt werden kann, Infos hierzu finden Sie unter: CoinDesk Bitcoin Price Index API und Powered by CoinDesk, und wie der frei zugдngliche цffentliche JSON-REST-Service zur Ermittlung von Lдnderkьrzeln unter http://services.groupkt.com/country/get/all damit abgefragt werden kann, Infos hierzu finden Sie unter: Free RESTful web services und RESTful web-services to search Countries. Unter Spring-Boot mit REST-Client mit JsonObject finden Sie sehr дhnliche Beispiele, allerdings wird dort nicht HttpURLConnection verwendet, sondern stattdessen das Spring RestTemplate. Projektbasis und JsonObject-/HttpURLConnection-Utility. Wechseln Sie in Ihr Workspace-Verzeichnis (z.B. \MeinWorkspace ) und fьhren Sie folgende Kommandos aus: Erstellen Sie im JsonRestClientMitHttpURLConnection -Projektverzeichnis die Maven-Projektkonfigurationsdatei: pom.xml. Erstellen Sie im src\main\java\restclient -Verzeichnis die JsonObject-/HttpURLConnection-Utility-Klasse: JsonObjectFromUrlUtil.java. JSON-REST-Client fьr den Dollar-Kurs. Erstellen Sie im src\main\java\restclient -Verzeichnis die REST-Client-Klasse: DollarKursRestClient.java. Bauen Sie das Projekt und fьhren Sie es aus: mvn clean package. java -cp target\RestClient-jar-with-dependencies.jar restclient.DollarKursRestClient. Sie erhalten (gekьrzt): JSON-REST-Client fьr den Bitcoin-Kurs. Erstellen Sie im src\main\java\restclient -Verzeichnis die REST-Client-Klasse: BitcoinRestClient.java. Bauen Sie das Projekt und fьhren Sie es aus: mvn clean package. java -cp target\RestClient-jar-with-dependencies.jar restclient.BitcoinRestClient. Da BitcoinRestClient in der pom.xml als Main-Klasse eingetragen ist, kann auch direkt die Jar-Datei ausgefьhrt werden: java -jar target\RestClient-jar-with-dependencies.jar. Sie erhalten (gekьrzt): JSON-REST-Client fьr Lдnderkьrzel. Erstellen Sie im src\main\java\restclient -Verzeichnis die REST-Client-Klasse: LaenderRestClient.java. Bauen Sie das Projekt und fьhren Sie es aus: mvn clean package. java -cp target\RestClient-jar-with-dependencies.jar restclient.LaenderRestClient. Sie erhalten (gekьrzt): Javax-MVC mit Ozark, JAX-RS und Jetty. Es gibt mehrere Webframeworks, die auf REST-Services und insbesondere auf JAX-RS aufsetzen. Eines davon ist das neue Webframework "MVC 1.0 (JSR 371)", welches ursprьnglich fьr Java EE 8 vorgesehen war, dann aber aus Zeitmangel verschoben wurde. Mittlerweile gibt es eine Early-Draft-Version, mit der erste Versuche gestartet werden kцnnen (Stand von 2017). MVC steht fьr "Model View Controller". Damit ist die Entkopplung des Datenmodells von der Prдsentation und der Steuerung gemeint. MVC-Webframeworks sind so genannte "aktionsbasierte Webframeworks", im Gegensatz zu den "komponentenbasierten Webframeworks" wie beispielsweise JSF. Die Referenzimplementierung von MVC 1.0 (JSR 371) ist Ozark. Javax-MVC konkurriert mit Spring MVC. Die folgende Javax-MVC-Demo zeigt einen ersten Einstieg unter Verwendung von MVC 1.0 (javax.mvc-api-1.0-edr2), Ozark (ozark-1.0.0-m02), Weld-CDI, Jersey-JAX-RS und Jetty. Das Besondere an dieser Demo ist, dass nicht nur eine in Java EE Application Servern deploybare WAR-Datei erzeugt wird, sondern eine im Jetty-Servlet-Container ausfьhrbare Version erstellt wird, die mit dem jetty-maven-plugin direkt ausgefьhrt werden kann. Wechseln Sie in Ihr Workspace-Verzeichnis (z.B. \MeinWorkspace ) und fьhren Sie folgende Kommandos aus: Erstellen Sie im OzarkJavaxMvcMitJetty -Projektverzeichnis die Maven-Projektkonfigurationsdatei: pom.xml. Sie kцnnen im Maven-Repository nachsehen, ob es mittlerweile neuere Versionen gibt: javax.mvc-api, ozark, jersey, jetty-maven-plugin, hk2-api. Erstellen Sie im src\main\webapp\WEB-INF -Verzeichnis die Web-Konfigurationsdatei: web.xml. Erstellen Sie im src\main\webapp\WEB-INF -Verzeichnis die Beans-Konfigurationsdatei: beans.xml. Erstellen Sie im src\main\webapp\WEB-INF\views -Verzeichnis die JSP-View: mvcdemo.jsp. Der Einfachheit halber verwendet die Demo fьr die View JSP (hier zusammen mit der Core-JSP-Tag-Bibliothek). Javax-MVC kann aber auch mit vielen anderen Template-Engines kombiniert werden, beispielsweise mit Thymeleaf. Mit den " $ "-EL-Ausdrьcken kцnnen direkt die in Models gespeicherten Objekte referenziert werden und logische Ausdrьcke ausgewertet werden. Es kцnnen alle mit @Named annotierten CDI-Beans in der View verwendet werden. Erstellen Sie im src\main\java\de\meinefirma\meinprojekt -Verzeichnis die Formulardaten-Klasse: MvcdemoForm.java. Mit der @FormParam -Annotation kцnnen ьbermittelte Formulardaten an Properties gebunden werden. @NotBlank , @Email und @Min bewirken eine Validierung der Formulardaten. Sehen Sie sich auch die vielen weiteren "Bean Validation constraints" und "Hibernate Validator constraints" an. Erstellen Sie im src\main\java\de\meinefirma\meinprojekt -Verzeichnis die REST- und MVC-Controller-Klasse: MvcdemoController.java. Durch die @Path -Annotation wird diese Klasse eine JAX-RS-Ressource mit REST-Services. Durch die zusдtzliche @Controller -Annotation wird daraus ein MVC-Controller. Dies bedeutet beispielsweise, dass der Rьckgabewert der REST-Methoden nicht an den Client geschickt wird, sondern stattdessen damit die darzustellende View ausgewдhlt wird. Durch die @BeanParam -Annotation werden Binding-Annotationen wie @FormParam gesucht und die Parameter gebunden. Die @Valid -Annotation bewirkt die Validierung der Formulardaten. Wдhrend bei JAX-RS-REST-Aufrufen ein Validierungsfehler zu einem "400 Bad Request" fьhren wьrde, erlaubt MVC ьber die BindingResult -Klasse die Fehlermeldungen zu sammeln und benutzerfreundlich anzuzeigen. Wenn die Daten ьber einen Redirect erhalten bleiben sollen, kann der spezielle MVC-Scope RedirectScoped eingesetzt werden. Um Angriffe per Cross Site Request Forgery (CSRF) zu verhindern, sollte die @CsrfValid -Annotation verwendet werden. Die Projektstruktur sieht jetzt so aus (ьberprьfen Sie es mit tree /F ): Bauen Sie das Projekt: mvn clean package. Falls Sie Java 8 verwenden, starten Sie Jetty mit: Falls Sie Java 9 verwenden, starten Sie Jetty mit: Warten Sie bis der Webserver gestartet ist und folgende Zeile erscheint: Rufen Sie die Ozark-Javax-MVC-Webseite auf: Kommandozeilen-Client-Tools. cURL als Kommandozeilen-Client. cURL ist ein Kommandozeilentool zum Downloaden von Dateien und vielen anderen URL- und HTTP-basierenden Aufgaben. entzippen Sie die Datei und kopieren Sie die resultierende curl.exe entweder in ein Verzeichnis, welches sich im PATH befindet, oder in Ihr Projektverzeichnis. Rufen Sie cURL in einem Kommandozeilenfenster auf und sehen Sie sich die installierte Version und die Liste der vielfдltigen Kommandozeilenoptionen an: Starten Sie obigen HalloWeltTestServer und lesen Sie folgendermaЯen die Ausgabe des HelloWorld-Beispiels: start java -cp bin;lib/* minirestwebservice. HalloWeltTestServer. Sie erhalten entweder die Text- oder die HTML-Antwort. Mit der Option "-H" kцnnen Sie Header-Informationen zum Server senden und so den Content-Type vorgeben: curl -H "Accept: text/plain " "http://localhost:4434/helloworld?name=ich" curl -H "Accept: text/html " "http://localhost:4434/helloworld?name=ich" Mit der Option "-i" geben Sie auch die empfangenen Header-Informationen aus: curl -i "http://localhost:4434/helloworld?name=ich" Sie erhalten u.a.: Mit der Option "-v" erhalten Sie noch mehr zusдtzliche Informationen. Lassen Sie sich die WADL-Datei ausgeben: curl -i "http://localhost:4434/application.wadl" curl -i "http://localhost:4434/application.wadl?detail=true" Beachten Sie den im Header ausgegebenen Content-Type: application/vnd.sun.wadl+xml : Das " vnd " steht fьr "Vendor-spezifisch" (also proprietдr). Wie Sie mit cURL PUT-, POST- und DELETE-Kommandos absetzen kцnnen, finden Sie weiter oben erlдutert. Wget als Kommandozeilen-Client. Ein anderes Kommandozeilentool zum Downloaden von Dateien ist Wget. Lesen Sie folgendermaЯen die Ausgabe des obigen HelloWorld-Beispiels (durch die Option " -O - " wird keine Datei angelegt, sondern nur auf StdOut ausgegeben): start java -cp bin;lib/* minirestwebservice. HalloWeltTestServer. wget -O - "http://localhost:4434/helloworld?name=ich" Sie erhalten entweder die Text- oder die HTML-Antwort: Mit der Option "--save-headers" geben Sie auch die empfangenen Header-Informationen aus: wget --save-headers -O - "http://localhost:4434/helloworld?name=ich" Sie erhalten u.a.: TShark als Kommandozeilen-Sniffer. Das bekannte mдchtige grafische Wireshark beinhaltet das Kommandozeilen-Netzwerk-Sniffer-Tool TShark. Die TShark-Kommandozeilenparameter sind unter den Manual Pages erlдutert. Anders als cURL und Wget zeigt TShark nicht nur die HTTP-Antwort, sondern auch die HTTP-Anfrage-Details. Beachten Sie die unten zu Wireshark aufgefьhrten Hinweise. Filtern Sie folgendermaЯen nach HTTP auf dem Port 4434, und beobachten Sie die Netzwerkaufrufe zu obigem HelloWorld-Programmierbeispiel: tshark -i any -Y "http and tcp.port==4434" Mit der Option " -V " geben Sie auch die Paket-Details aus: tshark -i any -Y "http and tcp.port==4434" -V. Sie erhalten u.a. (gekьrzt): Grafische Tools. Falls Sie statt der Kommandozeilentools grafische Tools bevorzugen, sehen Sie sich die Webbrowser-Client-Tools und die TCP/IP-Monitore an. Webbrowser-Client-Tools. Fьr den Webbrowser Mozilla Firefox stehen diverse Plug-ins zur grafischen Analyse der Webservice-Kommunikationen zur Verfьgung. Drei davon werden im Folgenden exemplarisch gezeigt. Damit kцnnen Sie auch das obige simple HelloWorld-Programmierbeispiel untersuchen. Da dabei jedoch wenig passiert, beziehen sich die im Folgenden gezeigten konkreten Screenshots auf das oben gezeigte JaxRsBuecherverwaltung-Programmierbeispiel. Den Firefox-Webbrowser kцnnen Sie um das Firebug-Plug-in erweitern. Klicken Sie dazu unter https://addons.mozilla.org/de/firefox/addon/1843 auf die Schaltflдche "Zu Firefox hinzufьgen" bzw. "Add to Firefox". Nach der Installation und dem Neustart sehen Sie unten rechts einen kleinen Kдfer. Um damit das JaxRsBuecherverwaltung-Programmierbeispiel zu analysieren, starten Sie Tomcat, цffnen http://localhost:8080/JaxRsBuecherverwaltung, klicken auf den Firebug-Kдfer, aktivieren unter 'Netzwerk' die 'Netzwerk'-Checkbox, und klicken auf der Bьcherverwaltungs-Webseite auf den Button 'Neues Buch anlegen'. Klicken Sie auf die drei Tabulatorreiter 'Header', 'Post' und 'Antwort', um in etwa Folgendes angezeigt zu bekommen: RESTClient. Den Firefox-Webbrowser kцnnen Sie um das RESTClient-Plug-in erweitern. Klicken Sie dazu unter https://addons.mozilla.org/en-US/firefox/addon/9780/ auf die Schaltflдche "Zu Firefox hinzufьgen" bzw. "Add to Firefox". Um damit das JaxRsBuecherverwaltung-Programmierbeispiel zu analysieren, starten Sie Tomcat, wдhlen in Firefox "Extras" | "REST Client", tragen unter REST Request "http://localhost:8080/JaxRsBuecherverwaltung/rest/Artikel/Buecher" und bei Request Body "isbn=9876543219&titel=RESTClient-Titel&preis=777" ein, wдhlen als Method "POST" und klicken auf den "Send"-Button. Sie erhalten in etwa Folgendes: Den Firefox-Webbrowser kцnnen Sie um das Poster-Plug-in erweitern. Klicken Sie dazu unter https://addons.mozilla.org/de/firefox/addon/2691 auf die Schaltflдche "Zu Firefox hinzufьgen" bzw. "Add to Firefox". Nach der Installation und dem Neustart sehen Sie unten rechts ein gelb hinterlegtes P. Um damit das JaxRsBuecherverwaltung-Programmierbeispiel zu analysieren, starten Sie Tomcat, klicken auf das P, tragen bei URL "http://localhost:8080/JaxRsBuecherverwaltung/rest/Artikel/Buecher", bei Content Type "text/plain" und bei Content to Send "isbn=9876543217&titel=Poster-Titel&preis=777" ein, wдhlen bei Actions "POST" und klicken auf das "GO" neben "POST". Sie erhalten in etwa Folgendes: TCP/IP-Monitore. Sowohl mit den oben genannten Kommandozeilen-Client-Tools (cURL und Wget) als auch mit den Webbrowser-Client-Tools (Firebug, RESTClient und Poster) lassen sich sehr gut die Antworten von REST-Services analysieren. Wenn Sie nicht nur die REST-Antworten, sondern zusдtzlich auch die von einem Client versendeten Anfragen analysieren wollen, sind so genannte HTTP-Monitore oder TCP/IP-Monitore besser geeignet, die als Proxy, Tunnel oder "Intermediate Listener" zwischen Client und Server geschaltet werden. Dies kann insbesondere interessant sein, wenn die HTTP-Header untersucht werden sollen, oder wenn nicht nur die REST-Antwort, sondern auch die REST-Anfrage komplexe Daten enthдlt, etwa als XML. AuЯer fьr Wireshark (und TShark) ist fьr die anderen genannten Tools Voraussetzung, dass Sie die Mцglichkeit haben, fьr die Dauer des Tests entweder beim Client oder beim Server eine andere Portnummer zu konfigurieren. Wireshark ist eigentlich kein TCP/IP-Monitor, sondern ein universeller Netzwerk-Sniffer, also ein Programm zur Analyse von Netzwerk-Kommunikation. Auch mit Wireshark kann die REST-Kommunikation beobachtet werden, sogar ohne dass eine Portnummer umgestellt werden muss. Sehen Sie sich den Wireshark User's Guide an. Windows: Falls Sie TCP/IP-Aufrufe vom PC zu sich selbst untersuchen wollen (localhost, 127.0.0.1): Dies ist unter Windows nicht so einfach mцglich, siehe hierzu: Loopback capture. Weiter oben wurde bereits gezeigt, wie mit dem in Wireshark enthaltenen Kommandozeilen-Netzwerk-Sniffer-Tool TShark die HTTP-Kommunikation beobachtet werden kann. Der folgende Screenshot zeigt einen Mitschnitt mit dem grafischen Tool Wireshark zum oben gezeigten Programmierbeispiel JaxRsHelloWorld . In der Filterleiste von Wireshark wurde als Filter " http and tcp.port==4434 " gesetzt. Darunter in der Paketliste sehen Sie die GET -Anfrage sowie das Antwortpaket mit 200 OK . Wenn Sie auf eines der beiden Pakete klicken, erscheinen darunter in den beiden Paketdetailfenstern Informationen zu den Paketen, hier im Beispiel der Ergebnistext " Plain-Text: Hallo ich " sowie weitere Informationen. Apache TCPMon. Ein schon etwas дlterer aber immer noch guter TCP/IP-Monitor ist Apache TCPMon. TCPMon wird zwar nicht lдnger supportet, funktioniert aber trotzdem hervorragend. Hinweise zur Benutzung finden Sie im Apache TCPMon Tutorial. Downloaden Sie die Datei tcpmon-1.0.jar , beispielsweise von Asjava TCPMon Tutorial oder Apache-Archive. Verwenden Sie nicht das sehr дhnliche Tool tcpmon-1.1.jar von https://code.google.com/p/tcpmon/, weil dieses weniger Features hat, z.B. keine XML-Darstellung. Wenn Sie beispielsweise beim weiter oben gezeigten Projekt "Contract-First"-REST-Service (JaxRsContractFirstService) zur Klasse ContractfirstServiceTestMitHttpMonitor die HTTP-Kommunikation analysieren wollen, starten Sie TCPMon mit folgenden Parametern: java -cp ./tcpmon-1.0.jar org.apache.ws.commons.tcpmon. TCPMon 4435 localhost 4434. (Alternativ kцnnen Sie die drei Parameter Listen Port, Target Hostname und Target Port auch innerhalb des TCPMon-GUIs setzen.) Klicken Sie im TCPMon-GUI oben auf den Port-4435-Tabulatorreiter, aktivieren Sie unten die Darstellung im XML-Format, und starten Sie die zu analysierende Anwendung, im Beispiel ContractfirstServiceTestMitHttpMonitor . Sie erhalten das folgende Ergebnis, welches die beiden HTTP-Header und sowohl die Anfrage-XML-Daten als auch die Antwort-XML-Daten anzeigt: Eclipse TCP/IP Monitor. Eclipse (mit installierten Web Tools) beinhaltet den Eclipse TCP/IP Monitor. Hinweise zur Benutzung finden Sie im Web Tools Platform User Guide. Aktivieren Sie den TCP/IP Monitor folgendermaЯen: Wдhlen Sie in Eclipse: Window | Show View | Other. | Debug | TCP/IP Monitor. In der TCP/IP Monitor View wдhlen Sie oben rechts das dritte Icon von rechts, ein nach unten zeigendes Dreieck: Zuerst aktivieren Sie darin die Option Show Header. AnschlieЯend wдhlen Sie ьber dasselbe Icon den Menьpunkt Properties. Im folgenden Dialog fьgen Sie mit Add. einen neuen Eintrag hinzu, beispielsweise wie hier gezeigt (passen Sie die Eintrдge an): Betдtigen Sie Start: Wenn Sie jetzt beispielsweise wieder aus dem weiter oben gezeigten Projekt Contract-First"-REST-Service (JaxRsContractFirstService) die Klasse ContractfirstServiceTestMitHttpMonitor ausfьhren, dann erhalten Sie folgendes Ergebnis, welches die beiden HTTP-Header und sowohl die Anfrage-XML-Daten als auch die Antwort-XML-Daten anzeigt: Ein auch schon etwas дlteres Tool ist TcpTrace von Simon Fell. Hinweise zur Benutzung finden Sie bei PocketSOAP. Downloaden Sie tcpTrace081.zip von der genannten Webseite, entzippen Sie die Datei, und rufen Sie TcpTrace auf ьber: tcpTrace.exe /listen 4435 /serverName localhost /serverPort 4434. Wenn Sie jetzt beispielsweise wieder aus dem weiter oben gezeigten Projekt Contract-First"-REST-Service (JaxRsContractFirstService) die Klasse ContractfirstServiceTestMitHttpMonitor ausfьhren, dann erhalten Sie: TCP/IP-Monitor-Konfiguration bei mehreren Rechnern. In den obigen Beispielen wurde der Einfachheit halber davon ausgegangen, dass sich der REST-Client, der TCP/IP-Monitor und der REST-Server alle drei auf demselben PC befinden ( localhost ). Das ist aber nicht notwendig. Es kцnnen auch drei verschiedene Rechner sein, was eher der Realitдt entspricht. Angenommen der REST-Client wьrde den REST-Server normalerweise ьber die URL http://resthost:4434/meinrestservice/. ansprechen, beim REST-Client besteht die Mцglichkeit, eine andere REST-URL zu konfigurieren, und der TCP/IP-Monitor lдuft auf einem PC mit dem Namen monitorpc . Dann muss im TCP/IP-Monitor beispielsweise konfiguriert werden (falls die Ports 4435 und 4434 verwendet werden sollen): Und der REST-Client muss wдhrend des Monitorings die URL http://monitorpc:4435/meinrestservice/. verwenden. Diese Vorgehensweise gilt unabhдngig davon, welchen TCP/IP-Monitor Sie verwenden (TCPMon, Eclipse TCP/IP Monitor, TcpTrace, . ).

Комментариев нет:

Отправить комментарий

Related Posts Plugin for WordPress, Blogger...