Веб-приложение Struts и веб-сервисы вместе
У меня есть веб-приложение в Struts и Hibernate, которое работает правильно.
Мы также занимаемся разработкой приложений и планируем настроить как веб-службы RESTful, так и URL-адреса веб-приложений в одном файле struts.xml.
Для веб-приложения родительский пакет должен быть
<constant name="struts.convention.default.parent.package" value="struts2"/>
Но для написания веб-сервисов они говорят, что родительский пакет должен быть написан так
<constant name="struts.convention.default.parent.package" value="rest-default" />
Как разместить родительский пакет для совместной работы веб-приложения и веб-служб?
Кроме того, какую еще конфигурацию мне нужно добавить для написания веб-сервисов RESTful с использованием Struts2?
Мой обновленный struts.xml
<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myActionMapper" class="org.apache.struts2.rest.example.CustomActionMapper" />
<constant name="struts.mapper.class" value="myActionMapper" />
<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="rest-default"/>
<constant name="struts.convention.package.locators" value="example"/>
<constant name="struts.action.extension" value="xhtml,,xml,json,action"/>
Это тоже не работает. Действия работают четко в этом случае. но веб-сервисы не работают.
1 ответ
Вам нужен плагин REST вместе с плагином Convention (даже если последний предлагается, но не обязательно).
Согласно документации:
Конфигурация ( struts.xml)
Простое добавление плагина в ваше приложение может не дать желаемого эффекта. Есть несколько соображений. Первое соображение заключается в том, хотите ли вы, чтобы любой не-RESTful URL сосуществовал с вашим RESTful URL. Мы покажем две конфигурации. Первый предполагает, что все, что вы хотите сделать, это REST. Второй предполагает, что вы хотите сохранить другие URL без RESTful в том же приложении Struts 2.
а потом
Конфигурация REST и не RESTful URL вместе
Если вы хотите продолжать использовать некоторые не-RESTful URL-адреса вместе с вашими REST-компонентами, то вам нужно будет предоставить конфигурацию, которая будет использоваться мапперами.
Плагины содержат свою собственную конфигурацию. Если вы посмотрите в jar плагина Rest, вы увидите файл struts-plugin.xml, в котором вы увидите некоторые параметры конфигурации, сделанные плагином. Часто плагин просто устанавливает вещи так, как он этого хочет. Вам часто может понадобиться переопределить эти настройки в вашем собственном struts.xml.
Во-первых, вам нужно будет повторно подтвердить расширения, о которых знает Struts, потому что плагин rest выбрасывает расширение действия по умолчанию.
<constant name="struts.action.extension" value="xhtml,,xml,json,action"/>
Далее мы настроим PrefixBasedActionMapper, который является частью основного дистрибутива Struts 2, чтобы некоторые URL-адреса направлялись в сопоставитель Rest, а другие - в сопоставитель по умолчанию.
<constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper" /> <constant name="struts.mapper.prefixMapping" value="/rest:rest,:struts" />
И снова мы полагаемся на плагин Convention для поиска наших контроллеров, поэтому нам нужно немного настроить плагин Convention:
<constant name="struts.convention.action.suffix" value="Controller"/> <constant name="struts.convention.action.mapAllMatches" value="true"/> <constant name="struts.convention.default.parent.package" value="rest-default"/> <constant name="struts.convention.package.locators" value="example"/>