Подавать статические файлы (JavaScript) с Struts 2
-
27-09-2019 - |
Вопрос
Я хочу поставить файлы JavaScript в одну из моих пакетов и заставляют Struts подать их как /struts/js/foo.js
Struts делает это для файлов в пакете «Шаблон» (вот где расположены файлы плагина jQuery, охраняются struts.ui.templateDir
вариант). Однако я хочу поставить эти файлы в другой пакет; Если я переопределил struts.ui.templateDir
Затем стойки прекращают работу, потому что он не может найти его шаблоны.
Таким образом, вопрос в том, как сказать struts подавать файлы в org.foo.some.package.js
так как /struts/js/whatever.js
?
Решение
Struts2 может служить статическим контентом из коробки. По умолчанию статический контент обслуживается DefaultStaticContentLoader
Реализация StaticContentLoader
. Отказ Он автоматически ищет следующие пакеты:
- org.apache.struts2.Static
- шаблон
- статический
- org.apache.struts2.interceptor.debugging.
Вы можете добавить дополнительные пакеты, которые можно найти в параметре INIT FILTER INIT с именем «Пакеты».
<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>
Вы можете добавить более одного пакета, используйте запятую или пространство или вкладку или новую строку в качестве сепаратора.
Кстати, вы можете контролировать, следует ли кэшировать статический контент браузером или не с этой константой:
struts.serve.static.browserCache
Другие советы
Один из способов - продлить весь шаблон и изменить templateire, как вы уже предложили. Если не нужно реализовать пользовательский шаблон, это очень чрезвычайно убийство.
Но лучший способ ИМХО забыть /struts/js/foo.js
И используйте любой другой URL для загрузки JS.
Немногие образцы:
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)
Стойки
<action name="myacctionjs">
<result>/WEB-INF/xyz.js</result>
</action>