Tomcat, Groovy e pulite gli URL
-
22-09-2019 - |
Domanda
Sto cercando di ottenere Groovy in esecuzione all'interno di Tomcat con gli URL semplificati. Dal momento che la mia conoscenza della mappatura e filtri URL di Tomcat è abbastanza limitata, che sto funzionando in un muro di mattoni.
Quello che mi piacerebbe è quello di creare un front-controller chiamato index.groovy
che gestisce tutte le richieste in arrivo. Il problema è che io non riesco a capire come creare le mappature web.xml
corretti. Questo è quello che ho attualmente (che è praticamente di serie):
<servlet>
<servlet-name>Groovy</servlet-name>
<servlet-class>groovy.servlet.GroovyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Groovy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Se io ora provo ad accedere al mio istanza con il seguente URL, ho un 404
.
http://localhost:8080/GroovyTest/index.groovy/test
Naturalmente, Idealmente mi piacerebbe lo script index.groovy
da eseguire dove posso prendere il resto del percorso.
Soluzione
Penso che il problema principale qui è il vostro equivoco su come sia la servlet mappatura un l'GroovyServlet funziona. Quindi, ecco una breve spiegazione:
- Quando si descrive come la mappatura, significa che tutti gli URL che corrispondono al "/ *" modello saranno inviati alla classe GroovyServlet. Con tale modello generico, tutto l'url sono validi, che può portare ad alcuni problemi, ad esempio quando si cerca di accedere alle immagini, stili, ecc ...
- Il GroovyServlet è già un dispatcher. Se si guarda il codice sorgente, vedrete che, grazie alla sua eredità, sarà semplicemente verificare che il percorso indicato esiste sotto il "/ WEB-INF / / groovy" directory. Nel tuo esempio, vuol dire che cerca una "/WEB-INF/groovy/index.groovy/test" file
- Se il file esiste, viene eseguito come uno script Groovy (con qualche decoratore), e il risultato viene restituito con un "/ html testo" tipo MIME.
Ora penso che si può chiaramente capire perché non funziona su di voi esempio. Vorrei piuttosto suggerire altri due approcci per raggiungere te obiettivo: