Question

J'ai une application struts2 avec une seule page pouvant indiquer l'une des valeurs stockées dans une base de données. L'application est pour une école avec de nombreux départements et chaque département a de nombreux programmes. Pour accéder à la page du service, utilisez une URL comme ceci

department.action?id=2

et DepartmentAction chargeront le département avec id = 2 pour l'affichage. Tout ceci est acceptable si l'utilisateur navigue simplement sur le site, mais cela devient inconfortable si je souhaite fournir un lien vers le service d'ingénierie dans les journaux. Le lien devra être www.myschooldomain.com/department.action?id=2. Je vois un certain nombre de problèmes avec cela.

Tout d’abord, ce n’est pas convivial. Deuxièmement, il est sujet aux pannes car les services sont maintenus de manière dynamique et l’identité d’un service peut changer sans préavis, ce qui rend le lien instable.

Je préférerais imprimer une url comme celle-ci: www.myschooldomain.com/department/engineering et la faire en quelque sorte aller à department.action? id = 2.

Mes pensées jusqu'à présent: créez une action qui analysera l'URL du nom du département à la fin, puis rechercherez-la par son nom. Je pourrais peut-être ajouter un champ convivial à la base de données pour chaque service.

Mais la question est la suivante: existe-t-il un meilleur moyen de le faire dans struts2?

Merci.

Mise à jour (mai 2009): Je suis tombé sur cette question et je me suis dit que je dirais ce que j'ai fait pour la résoudre.

J'ai créé un nouveau paquet dans le struts.xml appelé départements. Dans ce package, une seule action est mappée sur *. Donc, il intercepte toutes les demandes sur mydomain.com/departments/anything.html.

Dans la classe d'action, j'analyse simplement l'URL et recherche la partie entre départements / et .html. Il s'agit du nom du département afin que je puisse effectuer une recherche dans la base de données. Cela fonctionne bien depuis près de 5 mois et je l’ai mis en œuvre pour d’autres zones du site.

Était-ce utile?

La solution

Cela se fait normalement en mappant une servlet sur, dans votre cas, "/ department", puis en utilisant le chemin (par exemple," / engineering ") dans le servlet pour déterminer l'ID.

Etant donné que le répartiteur Struts2 n'implémente pas ce comportement, il pourrait être plus simple d'écrire votre propre servlet. Cette servlet serait configurée avec une carte des informations "conviviales" valides. noms aux identificateurs numériques indésirables. Il peut s'agir d'une Carte ou d'une méthode de recherche de base de données.

Le résultat de getPathInfo () sera utilisé pour rechercher l'ID et la demande sera transféré au département.action. Traitez également la casse null , ce qui signifie que l'utilisateur tente de parcourir le répertoire / départements / .

Autres conseils

Vous pouvez utiliser le filtre de réécriture d'URL

.

Cela évite d'avoir recours à un servlet ou à du code Java supplémentaire, mais nécessite des descripteurs XML.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top