Gestione dei riferimenti al percorso di contesto durante la migrazione del sito “/” al packaging Java EE
-
02-07-2019 - |
Domanda
Un sito Java esistente è progettato per funzionare sotto " / " su Tomcat e ci sono molti riferimenti specifici a percorsi assoluti fissi come " / dir / dir / page " ;.
Desideri migrare questo nel pacchetto Java EE, dove il sito dovrà funzionare in una root di contesto, ad es & Quot; / dir / dir / pagina " diventa " / my-context-root / dir / dir / page "
Ora, la root di contesto può essere facilmente con ServletRequest.getContextPath (), ma ciò significa ancora molte modifiche al codice per migrare una base di codice di grandi dimensioni. La maggior parte di questi riferimenti sono in HTML letterale.
Ho sperimentato l'uso dei filtri servlet per riscrivere il codice HTML originale e sembra funzionare bene. Ma introduce un certo sovraccarico, e non lo vedrei come una soluzione permanente. (vedi EnforceContextRootFilter-1.0-src.zip per l'approccio filtro servlet).
Esistono approcci migliori per risolvere questo problema? Qualcosa di ovvio che mi manca? Tutti i commenti sono apprezzati!
Soluzione
Dai un'occhiata a una domanda
Considera anche URLRewriteFilter
Un'altra cosa (continuo a modificare questo maledetto post). Se stai usando JSP (contro HTML statico o qualcos'altro) potresti anche creare un file tag per sostituire i tag html comuni con collegamenti (in particolare un, img, form). Quindi < a href = " / root / path " > link < / a > può diventare < t: a href = " / root / path " > link < / t: a > ;. Quindi il tag può fare la traduzione per te.
Questa modifica può essere facilmente eseguita "in massa", usando qualcosa come sed.
sed -e 's/<a/<t:a/g' -e 's/<\/a>/<\/t:a>/g' old/x.jsp > new/x.jsp
Le azioni del modulo possono essere un po 'più complicate di sed, ma hai capito.
Altri suggerimenti
il mondo apache ha usato Redirects (mod_rewrite) per fare lo stesso.
Il mondo Servlet ha iniziato a utilizzare i filtri
Il mondo ruby ??(o il RoR) fa più cose della stessa roba e lo chiamano routing.
Quindi, non c'è modo di aggirarlo (a meno che tu non voglia usare smart regex fino in fondo - il che è stato provato e funziona perfettamente).