Dienen statische Dateien (JavaScript) mit Struts 2
-
27-09-2019 - |
Frage
Ich möchte einige JavaScript-Dateien in einem meiner Pakete setzen und machen Struts dienen sie wie /struts/js/foo.js
Struts macht das für Dateien in ‚Vorlage‘ Paket (das ist, wo jQuery Plugins Dateien befinden, von struts.ui.templateDir
Option bewacht). Allerdings möchte ich diese Dateien in ein anderes Paket setzen; Wenn ich umdefinieren struts.ui.templateDir
dann Streben aufhört zu arbeiten, weil es nicht seine Vorlagen finden können.
So ist die Frage: Wie Struts sagen, Dateien in org.foo.some.package.js
als /struts/js/whatever.js
dienen
Lösung
Struts2 können statische Inhalte aus der Box dienen. Standardmäßig statische Inhalte wird von DefaultStaticContentLoader
eine Implementierung von StaticContentLoader
serviert. Es sucht automatisch die folgenden Pakete:
- org.apache.struts2.static
- template
- statisch
- org.apache.struts2.interceptor.debugging
Sie können zusätzliche Pakete hinzufügen in Filter init Parameter mit dem Namen "Pakete" durchsucht werden.
<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>
können Sie fügen mehr als ein Paket, verwendet Komma oder Leerzeichen oder Tab oder eine neue Zeile als Trennzeichen.
BTW können Sie steuern, ob statische Inhalte von einem Browser zwischengespeichert wird oder nicht mit dieser Konstante:
struts.serve.static.browserCache
Andere Tipps
Eine Möglichkeit ist es, die gesamte Vorlage zu erweitern und die TemplateDir ändern, wie Sie bereits vorgeschlagen. Es sei denn, man braucht ein eigenes Template zu implementieren, ist dies sehr über-kill.
Aber der beste Weg IMHO ist /struts/js/foo.js
zu vergessen und eine andere URL verwenden, um die js zu laden.
Ein paar Beispiele:
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>