GWT und SOP

Die SOP (Same Origin Policy) ist wohl eines der Probleme mit dem schon eine Menge Webentwickler konfrontiert wurden. Eine Suche bei Google führt zu einer GWT Seite auf der die Nutzung von

<add-linker name="xs"/>

empfohlen wird. Leider führte das Einbinden dieses Linkers nicht zu dem gewünschten Ergebnis. So war es nicht mehr möglich den Development Modus zu nutzen. Die Lösung ist das Einbinden des xsiframe-Linkers. Dieser ermöglicht es, wie auch schon der xs-Linker, die [Modulname].nocache.js einfach in einer auf einem anderen Server liegenden HTML einzubinden allerdings bietet der xsiframe-Linker zusätzlich noch die Nutzung des Development Mode.

Also einfach folgende zwei Zeilen in die .gwt.xml einfügen:


<inherits name="com.google.gwt.core.Core" />
<add-linker name="xsiframe" />

Und schon kann man die Modulname.nocache.js per URL z.B. http://127.0.0.1:8888/Modulename/Modulename.nocache.js referenzieren ohne das einem SOP im Wege steht.

‘Drag and Drop’-Dateiexport mit GWT

Um eine Datei schnell exportierbar zu machen, bietet sich die neue HTML5 File-API an. Google Chrome unterstützt derweil sogar den direkten Export von Dateien per ‘Drag and Drop’ aus dem Browser heraus auf den Desktop oder in einen Ordner. Um das ganze im Google Web Toolkit zu realisieren, benötigt man GWT 2.4 und die Datei als Data-URL. Danach ist es quasi ein Kinderspiel:


final Anchor drag = new Anchor();
drag.setText("my xml export");
drag.getElement().setAttribute("data-downloadurl", "text/xml:export.xml:data:text/xml;charset=utf-8," + "export here");
drag.getElement().setDraggable("true");
drag.getElement().getStyle().setProperty("userSelect", "none");
drag.getElement().getStyle().setCursor(Cursor.MOVE);
drag.addDragStartHandler(new DragStartHandler() {

	@Override
	public void onDragStart(final DragStartEvent event) {
		event.getDataTransfer().setData("DownloadURL", event.getRelativeElement().getAttribute("data-downloadurl"));
	}
});

Hier exportieren wir als Beispiel eine XML-Datei. “export here” muss durch den String ersetzt werden, in dem die XML-Inhalte stehen. Man kann auch einfach die “data-downloadurl” nach dem : vor ‘data’ durch eine komplette Data-URL ersetzen, z.B. ein Bild aus einem Clientbundle. Die CSS3-Property “user-select” sorgt dafür, dass beim Draggen der Text nicht markiert wird. Zudem haben wir einen “Move”-Cursor eingebaut.

Java: URLConnection und CookieManager

Um mit dem CookieManager arbeiten zu können, muss man eigentlich nicht viel beachten. Wichtig ist, dass man weiß, dass man den CookieManager nicht direkt mit der URLConnection bekannt zu machen braucht. Die URLConnection füllt den CookieManager im Hintergrund über den CookieHandler.

Wie man diese Klassen ineinander steckt zeigt dieser kleine Beispielcode:


	// create CookieManager
	CookieManager manager = new CookieManager();
	manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
	CookieHandler.setDefault(manager);
	CookieStore cookieJar = manager.getCookieStore();

	// get the url connection
	HttpsURLConnection urlConn = (HttpsURLConnection) new URL("foobar").openConnection();

Man sieht, dass man den CookieManager nur initialisieren und ihm eine CookiePolicy geben muss um an Cookies einer Seite zu kommen. In diesem Beispiel akzeptiert der CookieManager alle Cookies.
Man macht dann den CookieManager mit dem CookieHandler per setDefault-Methode bekannt und kann sich schonmal den CookieStore besorgen, denn dieser enthält schlussendlich die Cookie-Informationen.


	// set all necessary cookies
	for(HttpCookie cookie : cookieJar.getCookies()){
		urlConn.setRequestProperty("Cookie", cookie.toString());
	}

Nachdem alles registriert wurde, lassen sich die Cookies nun einfach aus dem CookieStore auslesen und weiterverwenden.

Jetty-Runner

Wer eine JavaEE-Anwendung, z.B. mit dem Google Web Toolkit, geschrieben hat und diese einmal kurz anstarten möchte, muss keinen kompletten Java-Server starten. Es gibt einen sogenannten Jetty-Runner, der dies ungemein vereinfacht:

Java muss natürlich auf dem Rechner lauffähig sein. Ansonsten braucht man nur die “deployable” .war-Datei und Jetty-Runner. Beides speichert man im selben Verzeichnis und führt dann
java -jar jetty-runner.jar myWar.war
aus. Der Rest spielt sich dann im Browser ab. Für kurze Tests völlig ausreichend.

Jetty-Runner bekommt man z.B. aus den mvn2-Repositorys: Jetty-Runner

Apple aktualisiert Java für OSX

Über die Softwareaktualisierung können Mac-Nutzer das aktuelle Java herunterladen. Da Apple selbst die Pflege von Java unter Mac OS X übernommen hat, kommen Updates meist einige Zeit später. Heute hat Apple Java SE 6 auf die Version 1.6.0 Update 20 für OS X 10.6 freigegeben. Auch die Version für OS X 10.5 wurde veröffentlicht. Updates für J2SE 5.0 sind auch dabei, für J2SE 1.4.2 gibt es keinen Support mehr.

Die Installation wird vor allem Entwicklern angeraten, aber auch sonst sollte man sein System aktuell halten. Immerhin ist die Softwareaktualisierung nur zwei Klicks entfernt und läuft automatisch ab. Das System muss dafür nicht neu gestartet werden.
Continue reading