Должен ли я найти и скопировать стили Struts и javascripts в папку /struts/, чтобы включить проверку на стороне клиента?

Проверка на стороне клиента у меня не работает. Сначала я подумал, что это ошибка myeclipse, которая не копирует их в корневую папку, но потом я обнаружил, что файлы js и css находятся в банке ядра struts. Теперь думаю, что мне делать! Должен ли я найти и скопировать все файлы js и css из соответствующих папок в webRoot или есть разумный обходной путь, например изменение конфигурации? Должны ли стойки копировать их самостоятельно?

Я использую плитки со Struts. Может ли это быть проблемой?

Мои файлы JSP находятся в папке WEB-INF! Может это вызвало какие-то проблемы?

Может ли использование чего-то вроде плагина struts2-jquery решить мою проблему?

Я использую struts2!

Моя конфигурация фильтра struts2:

  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>

    <listener>
    <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>

person Johnny    schedule 07.01.2013    source источник
comment
Вам необходимо предоставить дополнительную информацию, например, конфигурацию фильтра S2, которая часто является причиной того, что S2 неправильно обслуживает свои статические файлы.   -  person Dave Newton    schedule 07.01.2013
comment
Я скопировал конфигурацию фильтра Struts. Это так просто, как вы можете видеть!   -  person Johnny    schedule 07.01.2013
comment
а распорки Белтерры конфигурации, действительно, проблема. не следуя документации по struts 2, вы исключили struts 2 из обработки статических файлов. есть причина, по которой предложение сопоставления по умолчанию - звездочка.   -  person Dave Newton    schedule 07.01.2013
comment
Ты прав! изменение шаблона URL на /* решило проблему. Я не знаю, как отблагодарить вас!   -  person Johnny    schedule 07.01.2013


Ответы (2)


Конкретной проблемой здесь является конфигурация фильтра:

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

Рекомендуемая конфигурация (если вы точно не знаете, что делаете) — сопоставить с *:

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

Если вы сопоставляете только *.action, запросы без действия (например, CSS и JavaScript) не будут обрабатываться фильтром. S2 проверяет запрос файлов, о которых он (S2) знает, например, свои собственные файлы CSS и JavaScript, и сам обслуживает эти запросы, даже если они не являются запросами действий.

Это описано в разделе "Статическое содержимое" руководств S2.

Совершенно допустимо сопоставлять с *.action, но тогда вам делает необходимо извлечь статические файлы и поместить их в нужное место, по крайней мере, если вы собираетесь использовать S2 по умолчанию. темы/JavaScript. Это также необязательно: фреймворк предназначен для того, чтобы вы начали относительно быстро, но если у вас есть особые потребности, которые фреймворк не обрабатывает, использование этой части S2 может быть или не быть лучшим выбором.

person Dave Newton    schedule 07.01.2013
comment
Спасибо. Это точное решение! Конфигурация Myeclipse по умолчанию была *.action, и я не трогал ее. - person Johnny; 07.01.2013

В проекте Java (среди прочих) Eclipse скопирует все ваши файлы из папки SOURCE в папку OUTPUT.

Это означает, что если вы поместите MyClass.java и foobar.properties в свою папку /src, у вас будут MyClass.class и foobar.properties в вашей папке /bin (в соответствии с именем, выбранным для выходной папки), когда вы будете собирать ваш проект.

Для большей автоматизации, такой как замена токенов в файлах конфигурации (скажем, в конфигурации переменных среды) или динамическое извлечение необходимых библиотек, обычно используются два основных инструмента: Apache AntApache Ivy в качестве диспетчера зависимостей) или Apache Maven.

Как правило,

  • файлы свойств кладутся в корень папки src;
  • Файлы XML-валидации Struts2 помещаются в тот же пакет, что и действие для проверки;
  • Файлы Struts2 XML Visitor Validation помещаются в тот же пакет POJO для проверки;
  • Файлы JSP, файлы JS, файлы CSS помещаются (если они должны быть внутри войны) рядом с папкой /WEB-INF, и их никто не будет перемещать.

Типичная структура может быть следующей:

src |
    |-- java
    |-- web
       |-- css
       |-- js
       |-- jsp
       |-- WEB-INF
          |-- lib

Взгляните также на эти ответы SO:

Лучшее местоположение поместить файлы CSS и JS в веб-приложение Mavenized Java?

Где файлы CSS и JavaScript войти в проект веб-приложения Maven?


Тем не менее, вам нужно быть более явным, когда вы ссылаетесь на проверку клиента. Если вы имеете в виду проверку Javascript, выполните рефакторинг проекта, как указано выше, а затем опишите свою проблему, взглянув на консоль JS;

но при использовании Struts2 было бы лучше проверить ввод с помощью Проверка XML, поскольку проверка на стороне клиента ненадежна:

скажем, я обхожу элементы управления javascript, вводя HTML-код напрямую с помощью FireBug, или что я создаю форму во время выполнения с нужными параметрами и отправляю ее на сервер, или что я использую браузер с отключенным javascript... клиент не находится под ваш контроль, то рекомендуется проверить серверную часть.

person Andrea Ligios    schedule 07.01.2013
comment
Но я думаю, что eclipse или struts2 должны извлечь и скопировать свои собственные файлы css в соответствующую папку. Веб-консоль браузера сообщает об ошибке 404 для файлов struts css/js, и это правильно, потому что они не существуют. Структура каталогов моего проекта используется по умолчанию. в корне (src - ресурсы - WebRoot) и в WebRoot у меня есть (WEB-INF META-INF css js). Я поместил файлы jsp в папку WEB-INF/pages из соображений безопасности. Библиотека в WEB-INF публикуется myeclipse, и я настроил ее для публикации всех дополнительных библиотек (включая struts2). Интересно, должен ли я извлекать все файлы из jar - person Johnny; 07.01.2013
comment
Кстати, я решил отказаться от проверки xml и ее преимуществ на стороне клиента из-за ее нежелательного поведения (stackoverflow.com/questions/14185558) Я не мог решить. Но файлы css/js по умолчанию необходимы для хорошей структуры дизайна! - person Johnny; 07.01.2013
comment
вам не нужно извлекать (!) css и js из Jar (!), просто поместите их в папки /css и /js в Eclipse. Они будут там, и их никто не тронет, и вы получите их из JSP. Ваша проблема, похоже, в том, что у вас нет необходимых файлов в нужной папке. - person Andrea Ligios; 07.01.2013
comment
Копирование jar-файлов struts-core в разные папки не сработало. Я опубликовал его где угодно и, наконец, извлек файлы, как ожидалось на веб-странице, и это сработало. Я никогда не работал с Maven, Ivy или ant напрямую, поэтому откладываю их использование на более позднее время. Похоже, лучшего ответа на мой вопрос и быть не может. Comunque, grazie mille! - person Johnny; 07.01.2013
comment
Проблема была решена подсказкой @DaveNewton. Прочитайте комментарии к вопросу. - person Johnny; 07.01.2013
comment
Дело не столько в том, что проверка на стороне клиента ненадежна, просто в том, что она не может быть единственной проверкой: все также должно проверяться на стороне сервера. (Кроме того, проверка на стороне клиента не поддерживает все проверки, доступные на стороне сервера.) - person Dave Newton; 07.01.2013