Servire file statici (JavaScript) con Struts 2
-
27-09-2019 - |
Domanda
Voglio mettere alcuni file JavaScript in uno dei miei pacchetti e fare Struts li servono come /struts/js/foo.js
Struts fa che per i file in pacchetto 'template' (è lì che si trovano i file del plugin jQuery, custodito da opzione struts.ui.templateDir
). Tuttavia voglio mettere i file in un altro pacchetto; Se io ridefinire struts.ui.templateDir
cessa quindi puntoni lavorare perché non riesce a trovare i suoi modelli.
Quindi la domanda è:? Come dire Struts per servire i file in org.foo.some.package.js
come /struts/js/whatever.js
Soluzione
Struts2 può servire contenuti statici fuori dalla scatola. Di contenuti statici impostazione predefinita viene servito da DefaultStaticContentLoader
un'implementazione di StaticContentLoader
. Si cerca automaticamente i seguenti pacchetti:
- org.apache.struts2.static
- modello
- static
- org.apache.struts2.interceptor.debugging
È possibile aggiungere ulteriori pacchetti da cercare nel parametro di filtro init denominato "pacchetti".
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>packages</param-name>
<param-value>some.package another.one</param-value>
</init-param>
</filter>
È possibile aggiungere più di un pacchetto, uso virgola o spazio o scheda o una nuova riga come separatore.
A proposito è possibile controllare se il contenuto statico viene memorizzato nella cache da un browser o meno con questa costante:
struts.serve.static.browserCache
Altri suggerimenti
Un modo è quello di estendere l'intero modello e cambiare il templateDir come già suggerito. A meno che non si ha la necessità di implementare un modello personalizzato, questo è altamente over-kill.
Ma il migliore IMHO modo è quello di dimenticare /struts/js/foo.js
e utilizzare qualsiasi altro URL per caricare i js.
alcuni esempi:
JSP
WebPages
|-->myjs.js (a normal js file)
|-->mydynamicjs.jsp (a .jsp file containing ONLY javascript code)
|-->WEB-INF-->xyz.js (another .js file but accessed only through action)
Struts
<action name="myacctionjs">
<result>/WEB-INF/xyz.js</result>
</action>