我在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服务不起作用。
答案 0 :(得分:2)
您需要REST plugin以及Convention plugin(即使建议使用后者,但不是强制性的。)
配置(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"/>