Веб-приложение 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"/>
Другие вопросы по тегам