Struts2 sj:head со scriptPath

У меня есть веб-приложение, созданное с помощью Struts2. Я использую плагин struts2-Jquery.

С этой настройкой в ​​разделе заголовка jsp:

   <%@ taglib prefix="sj" uri="/struts-jquery-tags" %>
   <head>
   <sj:head/>
   </head>

Все хорошо, сгенерированный HTML-код выглядит так:

<script src="/MyContextRoot/struts/js/base/jquery-1.10.0.min.js" type="text/javascript">

Что касается API: https://code.google.com/p/struts2-jquery/wiki/HeadTag Если я изменю sj:head на него:

<sj:head scriptPath="/MyContextRoot/MySubDir/struts/"/>

Тогда сгенерированный код будет выглядеть так (как и ожидалось):

<script src="/MyContextRoot/MySubDir/struts/js/base/jquery-1.10.0.min.js" type="text/javascript">

Но этот запрос дает мне ошибку 404 с сервера.

Я могу создать каталоги и вставить необходимые файлы js, но я хочу, чтобы эти запросы обслуживал Struts. Как это работало в первом случае.

Мой фильтр Struts2 сопоставлен с: /*

<filter-mapping>
 <filter-name>struts2</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>

Любая идея?

Спасибо, зсом


person zsom    schedule 06.03.2015    source источник
comment
Вы меняете путь к сценарию и НЕ размещаете файлы по этому пути и ожидаете, что это сработает?   -  person Aleksandr M    schedule 06.03.2015
comment
Без пути и без файлов в папке MyContextRoot/struts Struts может обслуживать их из файла struts2-jquery-plugin.jar.   -  person zsom    schedule 06.03.2015
comment
Мне нужен какой-то параметр, чтобы сообщить Struts, что запрос, поступающий в /MyContextRoot/MySubDir/struts, принадлежит плагину jquery и обслуживает из jar   -  person zsom    schedule 06.03.2015
comment
Где лежат скрипты?   -  person Roman C    schedule 06.03.2015
comment
Обычно сценарии находятся в файле struts2-jquery-plugin.jar.   -  person zsom    schedule 06.03.2015
comment
Зачем тебе это?   -  person Aleksandr M    schedule 06.03.2015
comment
Поскольку только /MyContextRoot/MySubDir доступен из Интернета из-за конфигурации брандмауэра. И наконец, почему бы и нет???   -  person zsom    schedule 06.03.2015
comment
Как вы получаете доступ к своему приложению, если доступно только /MyContextRoot/MySubDir?   -  person Aleksandr M    schedule 06.03.2015
comment
Доступно все в разделе «/MyContextRoot/MySubDir». Итак, мои действия отображаются следующим образом: '/MyContextRoot/MySubDir/login.action'   -  person zsom    schedule 06.03.2015
comment
@zsom Я думаю, вопрос в том, почему вы не хотите обслуживать файл из jar-файла S2jQ?   -  person Dave Newton    schedule 06.03.2015
comment
@DaveNewton: потому что так работает табличная библиотека sj по умолчанию. Я только хотел изменить путь. И это возможно, проверьте мой ответ ниже.   -  person zsom    schedule 06.03.2015
comment
@zsom Я спрашиваю, почему вы хотите подавать его из другого места? Я не говорю, что это невозможно изменить — я умею читать.   -  person Dave Newton    schedule 06.03.2015
comment
Поскольку только /MyContextRoot/MySubDir доступен из Интернета из-за конфигурации брандмауэра   -  person zsom    schedule 08.03.2015


Ответы (1)


Я нашел решение.

Я расширил класс org.apache.struts2.dispatcher.DefaultStaticContentLoader и после добавления константы в struts.xml, чтобы использовать мой класс для загрузки статического содержимого.

Сначала создайте свой загрузчик. Вы должны переопределить два метода: canHandle и findStaticResource.

public class MyStaticLoader extends DefaultStaticContentLoader{
 ...
 public boolean canHandle(String resourcePath) {
   return superCanHandle || resourcePath.contains("MySubDir/struts");
 }

 public void findStaticResource(String path, HttpServletRequest request, HttpServletResponse response) throws IOException {
     if(path != null && path.startsWith("/MySubDir/struts")){
        path = path.substring(9);
     }
     super.findStaticResource(path, request, response); 
 }
}

В struts.xml просто добавьте этот класс как staticContentLoader.

<constant name="struts.staticContentLoader" value="hu.nebih.hfnyportal.util.HFNyPublicStaticLoader"/>

Это все.

Для меня более чем достаточно.

person zsom    schedule 06.03.2015