Подавать статические файлы (JavaScript) с помощью Struts 2
Я хочу поместить некоторые файлы JavaScript в один из моих пакетов и заставить Struts обслуживать их как /struts/js/foo.js
Struts делает это для файлов в пакете 'template' (там, где находятся файлы плагина jQuery, охраняемые опцией struts.ui.templateDir
). Однако я хочу поместить эти файлы в другой пакет; Если я переопределяю struts.ui.templateDir
, то struts перестает работать, потому что он не может найти свои шаблоны.
Итак, вопрос: Как сообщить Struts для работы с файлами в org.foo.some.package.js
как /struts/js/whatever.js
?
Ответы
Ответ 1
Struts2 может использовать статический контент из коробки. По умолчанию статический контент обслуживается DefaultStaticContentLoader
реализацией StaticContentLoader
. Он автоматически выполняет поиск следующих пакетов:
- org.apache.struts2.static
- шаблон
- статичным
- org.apache.struts2.interceptor.debugging
Вы можете добавить дополнительные пакеты для поиска в параметре init фильтра с именем "packages".
<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
Ответ 2
Один из способов - расширить весь шаблон и изменить шаблонDir, как вы уже сказали. Если вам не нужно внедрять настраиваемый шаблон, это сильно завышает.
Но лучший способ ИМХО - забыть /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>