Gestion des références de chemin de contexte lors de la migration du site "/" vers un package Java EE
-
02-07-2019 - |
Question
Un site Java existant est conçu pour s'exécuter sous " / " sur tomcat et il existe de nombreuses références spécifiques aux chemins absolus fixes tels que "/ dir / dir / page".
Vous souhaitez migrer cela vers un package Java EE, où le site devra être exécuté sous une racine de contexte, par exemple. " / dir / dir / page " devient "/ mon-contexte-racine / rép / rép / page"
Désormais, la racine de contexte peut être facilement utilisée avec ServletRequest.getContextPath (), mais cela signifie néanmoins que de nombreuses modifications de code sont nécessaires pour migrer une base de code volumineuse. La plupart de ces références sont en HTML littéral.
J'ai déjà utilisé des filtres de servlet pour réécrire le code HTML sortant, et cela semble bien fonctionner. Mais cela introduit des frais généraux, et je ne le verrais pas comme une solution permanente. (voir EnforceContextRootFilter-1.0-src.zip pour l’approche du filtre de servlet).
Existe-t-il de meilleures approches pour résoudre ce problème? Quelque chose d'évident me manque? Tous les commentaires sont appréciés!
La solution
Consultez une question associée
Prenez également en compte URLRewriteFilter
Autre chose (je continue à éditer ce sacré post). Si vous utilisez JSP (versus HTML statique ou autre chose), vous pouvez également créer un fichier de balise pour remplacer les balises HTML courantes par des liens (notamment un formulaire, img,). Donc, un Ce changement peut être facilement effectué "en masse", en utilisant quelque chose comme sed. Les actions de formulaire peuvent être un peu plus délicates que sed, mais vous avez l’idée. sed -e 's/<a/<t:a/g' -e 's/<\/a>/<\/t:a>/g' old/x.jsp > new/x.jsp
Autres conseils
le monde apache a utilisé les redirections (mod_rewrite) pour faire de même.
Le monde des servlets a commencé à utiliser des filtres
Le monde ruby ??(ou le RoR) fait plus de choses identiques et les appelle routage.
Donc, vous ne pouvez pas vous en écarter (à moins que vous ne souhaitiez utiliser une regex intelligente - ce qui a été essayé et qui fonctionne parfaitement).