将Web应用程序和Web服务结合在一起

时间:2015-09-07 17:09:26

标签: web-services rest struts2 struts2-convention-plugin struts2-rest-plugin

我在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 webservices?

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

它也不起作用。在这种情况下,这些行动是明确的。但是Web服务不起作用。

1 个答案:

答案 0 :(得分:2)

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

根据the documentation

  

配置(struts.xml)

     

将插件放入应用程序可能无法生成   完全符合预期的效果。有几点需要考虑。的的   首先考虑的是你是否想拥有任何非RESTful URL   与您的RESTful URL共存。我们将展示两种配置。该   首先假设您要做的就是REST。第二个假设你想要   保持其他非RESTful URL在相同的Struts 2中存活   应用

then

  

REST和非RESTful URL的Together Configuration

     

如果您想在REST旁边继续使用一些非RESTful URL   东西,然后你必须提供一个利用的配置   对于地图制作者

     

插件包含自己的配置。如果你看看休息   插件jar,你会看到struts-plugin.xml,你会看到   插件所做的一些配置设置。通常,插件只是   以你想要的方式设置东西。您可能经常需要覆盖   你自己的struts.xml中的那些设置。

     

首先,您需要重新断言struts知道的扩展   因为其余插件会抛出默认操作   扩展

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

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

<constant name="struts.mapper.class"
         value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper" />

<constant name="struts.mapper.prefixMapping" value="/rest:rest,:struts" />
     

而且,我们再次依靠“公约”插件找到我们的   控制器,所以我们需要稍微配置一下约定插件:

<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"/>