Mapping di file statici e dinamici in Tomcat / Spring?
Domanda
Stavo usando quanto segue in web.xml per configurare un servlet per generare dinamicamente PDF.
<servlet-mapping>
<servlet-name>pdfServlet</servlet-name>
<url-pattern>*.pdf</url-pattern>
</servlet-mapping>
Ora devo anche servire alcuni file PDF statici. Qual è il modo più pulito per configurarlo? Attualmente sto servendo solo quattro o cinque file dinamici e non mi aspetto che aumenti, se ciò aiuta affatto.
Soluzione
Non è necessario configurare affatto i file statici; se Tomcat riesce a trovare un file, lo servirà. La configurazione è necessaria solo quando si desidera che Tomcat invochi del codice.
Altri suggerimenti
Questo è un problema sorprendentemente irritante a cui devo ancora trovare una soluzione soddisfacente.
La base del problema, come sono sicuro che tu sappia, è che il tuo web.xml è configurato per inviare tutte le richieste per * .pdf al tuo servlet Spring. La cosa ovvia da provare è che il servlet riconosca quali richieste sono per PDF statici e quindi inoltra la richiesta internamente a quel file statico, ma poiché il file probabilmente finirà con .pdf, la richiesta tornerà indietro attraverso il servlet di nuovo, fino alla nausea.
L'unica soluzione per questo che ho provato è che il servlet legga manualmente il PDF statico dal contesto servlet (usando ServletContext.getResource ()
) e lo scriva sull'output servlet stream, assicurandoti di impostare correttamente le varie intestazioni. Non è molto carino.
L'unica opzione che mi viene in mente è di rendere url-pattern
in web.xml
un po 'meno ampio, in modo che solo le richieste PDF dinamiche vengano indirizzate al servlet e le richieste di PDF statici vengono instradate al file, ma ciò richiederebbe una sorta di convenzione di denominazione per i tuoi documenti, che potrebbe non essere un'opzione.