Haben Sie schon einmal versucht, eine von Wicket generierte Url auszusprechen? Das ist eine ziemlich mühsame Arbeit, und oft möchten die Endbenutzer verständliche URLs haben (selbst wenn die URL keine Bedeutung hat). Es ist ganz einfach, normale Url's in Wicket zu erhalten. In diesem Artikel zeige ich Ihnen mehrere Lösungen, die ersten beiden mit einfachem Wicket und die letzte Lösung mit wicketstuff-annotations.
Vor kurzem habe ich einen Artikel mit dem Titel "Wicket Creating RESTful URLs" gelesen. Es ist ein nützlicher Artikel, aber es fühlte sich trotzdem nicht richtig an. Es sollte einfacher sein und an der richtigen Stelle stehen.
Ganz von vorne anfangen
Um wsa (Wicketstuff annotation) zu demonstrieren, werde ich Maven 2 eine einfache Wicket-Anwendung von Grund auf generieren lassen. Um diese Anwendung zu erstellen, besuchen Sie die Apache Quickstart Seite
Führen Sie diese Anweisung in der Befehlszeile aus und Sie haben innerhalb von Sekunden eine funktionierende Wicket-Anwendung. Fügen Sie einen Link zu HomePage.html hinzu, damit Sie sehen können, welche URLs Wicket generiert und wie Sie diese verbessern können:
<wicket:link> <a href="HomePage2.html?page=133¶graph=25"> Link zum Wicket-Dokument HomePage2.html </a> </wicket:link>
Erstellen Sie eine Kopie von HomePage.java und HomePage.html und nennen Sie die Dateien HomePage2.java und HomePage2.html. Ändern Sie die href zu HomePage2.html in der Datei HomePage2.html in HomePage.html. Wenn Sie die Anwendung erneut bereitstellen, sehen Sie die unlesbare URL, von der ich vorhin gesprochen habe:
https://xebia.com/blog:8080 /wicketstuff-test/?wicket:bookmarkablePage=:com.xebia.HomePage2¶graph=25&page=133
Ich habe die Seite mit den Parametern und den Absatz hinzugefügt, um zu zeigen, dass auch diese Parameter besser lesbar gemacht werden können. Eine weitere schlechte Sache ist, dass wir unsere Paketstruktur offenlegen. Den Endbenutzern ist es egal, in welchem Paket sich die Seite befindet und Sie sollten potenziellen Hackern keine Informationen geben.
Die einfache Wicket-Lösung
Die einfachste Lösung ist die Zuordnung eines Pakets zu einem Pfad. Wir können zum Beispiel das gesamte Paket com.xebia auf xebia.com/blog:8080/wicketstuff-test/web zuordnen. Leider können wir nicht auf das Stammverzeichnis (/) der Anwendung zugreifen. Um ein Paket einzubinden, fügen Sie die folgende Zeile in den Konstruktor von WicketApplication ein:
mount("web",PackageName.forClass(HomePage.class));
Die hässliche Url sieht jetzt viel besser aus:
xebia.com/blog:8080/wicketstuff-test/web/HomePage2/paragraph/25/page/133/
Auch die Parameter page und paragraph wurden verbessert. Angenommen, Sie möchten den Namen Ihrer WebPage (HomePage2) nicht preisgeben und auch die Parameternamen ausblenden. Dies können Sie erreichen, indem Sie eine MixedParamurlCodingStrategy in die Anwendung einbauen:
public WicketApplication() {String[] parameterNames = new String[] {"Seite", "Absatz"};MixedParamUrlCodingStrategy mixedParamUrlCodingStrategy = new MixedParamUrlCodingStrategy("h2", HomePage2.class, parameterNames);mount(mixedParamUrlCodingStrategy);}
Das Problem bei dieser Lösung ist, dass Sie alle Parameter übergeben und alle Klassendateien in der Anwendungsdatei ablegen müssen. Die URL-Struktur und die Seitenparameter beziehen sich auf die Seite, nicht auf die Anwendung, daher sollten sie sich auf der WebPage befinden. Aber das Ergebnis ist eine sehr schöne Url, ohne dass Sie eine zusätzliche Abhängigkeit zu wsa hinzufügen müssen:
https://xebia.com/blog:8080/wicketstuff-test/h2/133/25/
Die Wicketstuff Annotation Lösung
Um die wsa-Unterstützung zu Ihrer Anwendung hinzuzufügen, müssen Sie eine Abhängigkeit zu Ihrer pom.xml hinzufügen:
<Abhängigkeit><groupId>org.wicketstuff</groupId><artifactId>wicketstuff-annotation</artifactId><Version>1.1</version></dependency>
Der nächste Schritt besteht darin, die alte Lösung aus dem Konstruktor von WicketApplication zu löschen. Fügen Sie die folgende Zeile hinzu: new AnnotatedMountScanner().scanPackage("com.xebia").mount(this); Diese Zeile durchsucht das Paket com.xebia nach Anmerkungen zum Einhängen von URLs. In einer Produktionsumgebung ist es wahrscheinlich klüger, dies auf das Paket zu beschränken, in dem sich alle WebPage-Klassen befinden (d.h. com.xebia.web). Jetzt können wir endlich Anmerkungen zu HomePage2 hinzufügen:
@MountPath(Pfad = "h2")@MountMixedParam(parameterNames = { "Seite", "Absatz" })public class HomePage2 extends WebPage {...}
Das funktioniert genauso wie vorher, nur an der richtigen Stelle. Es gibt mehrere Varianten der zweiten Anmerkung:
@MountPath (und keine zweite Annotation) https://xebia.com/blog:8080/wicketstuff-test/h2/paragraph/25/page/133/ @MountPath und @MountMixedParam https://xebia.com/blog:8080/wicketstuff-test/h2/133/25/ @MountPath und @MountQueryString https://xebia.com/blog:8080/wicketstuff-test/h2?paragraph=25&page=133
Es gibt verschiedene andere Kodierungsstrategien, die Sie verwenden können. In der wsa javadoc gibt es nicht viele Informationen. Wenn Sie mehr wissen möchten, sollten Sie die Wicket-Javadocs konsultieren und nach dem Paket org.wicket.request.target.coding suchen. Die hier verwendeten Namen sind ähnlich wie die für wsa.
Fazit
Die Wicketstuff-Anmerkung ist eine sehr schöne Ergänzung zu Wicket. Sie hilft Ihnen, Ihre Url's an der richtigen Stelle zu kodieren. Der einzige kleine Nachteil ist die Abhängigkeit von Spring Core. Eine so kleine Bibliothek wie wsa sollte auch ohne Spring funktionieren (nicht, dass Spring etwas Schlechtes wäre, ich mag nur nicht viele Abhängigkeiten). Seien Sie also nicht beunruhigt, wenn Sie ein Spring jar zwischen Ihren Bibliotheken auftauchen sehen. Beachten Sie auch, dass die Lösung mount(path, packageName) die sicherste ist, wenn Sie die Paketstruktur nicht offenlegen wollen. Wenn Sie vergessen, Anmerkungen hinzuzufügen, landen Sie bei den hässlichen URLs und geben die Paketstruktur trotzdem preis. Ich habe versucht, mehrere Einhängepunkte hinzuzufügen, aber das war nicht möglich.
Quellen
Wicketstuff Annotation Wicketerstellen restful urls url coding strategies
Verfasst von
Jeroen van Wilgenburg
Unsere Ideen
Weitere Blogs
Contact



