Frage

Ich habe eine struts2 Anwendung mit einer einzigen Seite, die in einer Datenbank gespeichert ist aus einer Anzahl von Werten zeigen. Die Anwendung ist für eine Schule mit vielen Abteilungen und jede Abteilung hat viele Programme. Die Abteilung Seite wird mit einer URL wie folgt zugegriffen

department.action?id=2

und die DepartmentAction wird die Abteilung lädt mit id = 2 für die Anzeige. Das alles ist in Ordnung, wenn der Benutzer nur um den Ort Surfen, aber es wird unangenehm, wenn ich einen Link zur Verfügung stellen möchten in den Zeitungen der Engineering-Abteilung zu sagen. Der Link muss www.myschooldomain.com/department.action?id=2 werden. Ich sehe eine Reihe von Problemen mit diesem.

Zunächst einmal ist es nicht benutzerfreundlich. Zweitens ist es anfällig gebrochen werden, weil die Abteilungen dynamisch gehalten werden, und die ID für eine Abteilung könnte ohne Vorwarnung ändert die Verbindung instabil wird.

Ich würde es vorziehen, eine URL wie folgt drucken:?. Www.myschooldomain.com/department/engineering und haben das irgendwie department.action gehen id = 2

Meine Gedanken so weit: Erstellen Sie eine Aktion, die die URL für die Abteilungsnamen am Ende wird dann analysiert sie nach Namen suchen. Vielleicht für jede Abteilung konnte ich ein friendlyurl Feld der Datenbank hinzufügen.

Aber die Frage ist: Gibt es einen besseren Weg, dies in struts2 zu tun

Danke.

Update (Mai 2009): Ich bin zufällig gerade über diese Frage zu stolpern und dachte, ich würde sagen, was ich tue, es zu lösen.

Ich habe ein neues Paket in den struts.xml genannten Abteilungen. In diesem Paket gibt es nur eine Aktion zugeordnet *. So ist es, alle Anfragen fängt an mydomain.com/departments/anything.html.

In der Action-Klasse analysiert ich einfach die URL und suchen Sie den Teil zwischen den Abteilungen / und .html und das ist der Name der Abteilung, damit ich eine Suche in der Datenbank für sie tun kann. Dies wurde für fast 5 Monate arbeitet gut jetzt, und ich habe es auch für andere Bereiche der Website implementiert.

War es hilfreich?

Lösung

Dies wird normalerweise durch die Zuordnung einen Servlet getan in Ihrem Fall ‚/ Abteilung‘,, und dann mit dem Pfad Informationen (zB '/ Engineering') innerhalb des Servlet die ID zu bestimmen.

Da die Struts2 Dispatcher dieses Verhalten nicht implementiert, kann es sein einfachsten Ihre eigene Servlet zu schreiben. Dieses Servlet würde mit einer Karte von gültigen „freundlich“ Namen an die unfreundlichen numerischen Kennungen konfiguriert werden. Dies könnte eine tatsächliche Map sein oder es könnte mit einer Datenbank Finder-Methode durchgeführt werden.

Das Ergebnis getPathInfo() würde verwendet werden, um die ID zu suchen, und die Anforderung wäre zum department.action weitergeleitet . Behandeln Sie den null Fall zu, was bedeutet, dass der Benutzer versucht, das /departments/ Verzeichnis zu suchen.

Andere Tipps

könnten Sie verwenden die URL Rewrite Filter

Dies vermeidet die Notwendigkeit für eine zusätzliche Servlet oder Java-Code, sondern erfordert XML-Deskriptoren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top