0

我在 Struts 和 Hibernate 中有一个运行正常的 Web 应用程序。

我们也在进行应用程序开发,我们计划在一个 struts.xml 中配置 RESTful Web 服务和 Web 应用程序 URL。

对于 Web 应用程序,父包应该是

<constant name="struts.convention.default.parent.package" value="struts2"/> 

但是对于编写 Web 服务,他们说父包应该这样写

<constant name="struts.convention.default.parent.package" value="rest-default" />

如何同时容纳父包以使 Web 应用程序和 Web 服务一起工作?

另外,使用 Struts2 编写 RESTful Web 服务需要添加哪些其他配置?

我更新的 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"/>

它也不起作用。在这种情况下,这些行动显然有效。但网络服务不工作。

4

1 回答 1

2

您需要REST 插件Convention 插件(即使建议使用后者,但不是强制性的)。

根据文档

配置(struts.xml)

只是将插件放入您的应用程序可能不会产生完全预期的效果。有几个考虑因素。首先要考虑的是您是否希望任何非 RESTful URL 与您的 RESTful URL 共存。我们将展示两种配置。第一个假设您想要做的就是 REST。第二个假设您希望在同一个 Struts 2 应用程序中保持其他非 RESTful URL 的活动。

然后_

REST 和非 RESTful URL 的共同配置

如果你想在你的 REST 东西旁边继续使用一些非 RESTful URL,那么你必须提供一个用于 mappers 的配置

插件包含自己的配置。如果您查看 Rest 插件 jar,您将看到 struts-plugin.xml,并且您将在其中看到插件进行的一些配置设置。通常,插件只是按照它想要的方式设置东西。您可能经常需要在自己的 struts.xml 中覆盖这些设置。

首先,您需要重新声明 struts 知道的扩展,因为其余插件将丢弃默认操作扩展。

<constant name="struts.action.extension" value="xhtml,,xml,json,action"/>

接下来,我们将配置 PrefixBasedActionMapper,它是核心 Struts 2 发行版的一部分,将一些 URL 路由到 Rest 映射器,而将其他 URL 路由到默认映射器。

<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"/>
于 2015-09-08T08:23:09.310 回答