java – spring remoting mapping urls
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – spring remoting mapping urls,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4157字,纯文字阅读大概需要6分钟。
内容图文
![java – spring remoting mapping urls](/upload/InfoBanner/zyjiaocheng/731/04ca7b73acd44f6b9e4cdbe1e998cb57.jpg)
我已经按照Spring Remoting的教程,特别是HttpInvokerServiceExporter,并且在设置客户端和服务器(factorybean)时都没有问题.
问题是,我注意到使用Spring MVC,每个接口都映射到一个特定的URL
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="hello.htm">test_service</prop>
</props>
</property>
</bean>
<!-- *********************exposed web services*************************-->
<bean name="test_service" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="serviceInterface" value="foo.webservices.HelloServiceInterface" />
<property name="service">
<ref bean="helloService"></ref>
</property>
问题是,如果我的服务接口中有多个方法,是否可以将这些接口方法中的每一个映射到URL本身?
解决方法:
HTTPInvokerServiceExporter背后的想法是提供一个端点来接收remove方法调用.
在服务器端,配置RemoteExporter很容易,声明要公开的接口并将其与将处理调用的真实bean相关联.
在客户端上,有必要配置RemoteAcessor,它基本上需要在服务器端访问的接口.
可以使用服务器端的HttpInvokerServiceExporter来完成HTTP上的实现,如下例所示:
服务接口:
package foo.bar.services;
public interface MyService {
public int sum(int num1, int num2);
}
对于这项服务,您将拥有一个实现(假设为foo.bar.services.DefaultMyService).
弹簧上下文的展示和配置如下:
<bean name="myService" class="foo.bar.DefaultMyService" />
<bean name="/myService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service" ref="myService"/>
<property name="serviceInterface" value="foo.bar.MyService"/>
</bean>
使用这种配置,我只是打算在最简单的情况下,使用BeanNameUrlHandlerMapping,通过/ myService(bean名称)映射的URL在foo.bar.MyService接口下公开我的MyService实现的实例,除了将URL映射到一个带有URL值的bean(本例/ myService).
在客户端(使用者),您将配置一个bean,只是声明您希望远程端暴露的接口.对于我们的服务将是这样的:
<bean id="httpInvokerProxy" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
<property name="serviceUrl" value="http://foo.bar.org/springSample/myService"/>
<property name="serviceInterface" value="foo.bar.MyService"/>
</bean>
当Spring在客户端实例化bean时,会实例化一个代理,然后每个方法调用都会被序列化并通过HTTP发送到端点(在本例中为http://foo.bar.org/springSample/myService.服务器端对此请求进行反序列化和解释,即调用正在暴露的实际服务上的方法(在我们的案例中为DefaultMyService).服务将返回一些将被序列化的内容,作为客户端执行的HTTP请求的结果.客户端将接收它并反序列化它并将其返回到原始方法调用器.
正如您所看到的(并从Spring文档中获得):
服务器端会
Deserializes remote invocation objects and serializes remote
invocation result objects. Uses Java serialization just like RMI, but
provides the same ease of setup as Caucho’s HTTP-based Hessian and
Burlap protocols.
客户方会
Serializes remote invocation objects and deserializes remote
invocation result objects. Uses Java serialization just like RMI, but
provides the same ease of setup as Caucho’s HTTP-based Hessian and
Burlap protocols.
在这种情况下,与Spring Remoting一起使用的序列化是Java序列化,这意味着HTTP请求包含一个包含序列化对象的实体主体(请记住,在这种情况下,JVM版本和类版本需要兼容).
博览会作为一个整体完成,你不能将它与该接口的每个方法都有一个URL分开.因此,更容易使用Spring MVC并创建一个控制器(@Controller)为您的接口上的每个方法实现一个方法,将其注释为@RequestMapping(带有所需的URL)并调用服务上的方法,如下例所示:
控制器样本
package foo.bar;
import foo.bar.service.MyService;
@Controller
public class MyService {
@Autowired
private MyService myService;
@RequestMapping("/sum/{num1}/{num2}")
public int sum(@PathVariable("num1") int num1, @PathVariable("num2") int num2) {
return myService.sum(num1, num2);
}
}
使用上下文配置
<context:component-scan base-package="foo.bar"/>
它会自动映射foo.bar和包下的类,这意味着Service实现(DefaultMyService)可以像@Service和@Autowired一样映射到控制器,就像在示例中所做的那样,在上下文xml上没有任何bean配置.
但这将通过REST接口公开您的服务,这意味着它将处理可由其他消费者(如PHP使用者)完成的HTTP普通请求(这不能通过Spring Remoting完成,因为它使用纯Java序列化).
如果您的客户端是Java,您可以明确地使用远程处理并将您的服务作为一个整体公开,如果不是,使用Spring MVC的REST实现是一个很好的解决方案.
Spring文档可以在here找到
内容总结
以上是互联网集市为您收集整理的java – spring remoting mapping urls全部内容,希望文章能够帮你解决java – spring remoting mapping urls所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。