Gestione dei riferimenti al percorso di contesto durante la migrazione del sito “/” al packaging Java EE

StackOverflow https://stackoverflow.com/questions/142965

  •  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!

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top