📅  最后修改于: 2020-12-04 08:50:58             🧑  作者: Mango
Spring提供了自己的远程服务实现HttpInvoker 。它可以用于HTTP请求而不是RMI,并且可以在整个防火墙中正常工作。
借助于HttpInvokerServiceExporter和HttpInvokerProxyFactoryBean类,我们可以实现Spring的Http Invokers提供的远程服务。
您可以使用多种Remoting技术,让我们看看哪一种最适合您。
RMI使用JRMP协议,而Http Invokes使用HTTP协议。由于企业应用程序大多使用http协议,因此最好使用HTTP Invoker。与HTTP Invoker相比,RMI还存在一些安全问题。 HTTP Invoker在防火墙之间可以很好地工作。
HTTP Invoker是Spring框架的一部分,但Hessian和麻布是专有的。一切都可以跨防火墙正常工作。 Hessian和Burlap可移植以与.Net和PHP等其他语言集成,但HTTP Invoker无法。
要创建一个简单的spring的HTTP调用程序应用程序,您需要创建以下文件。
它是包含一个方法多维数据集的简单接口。
package com.javatpoint;
public interface Calculation {
int cube(int number);
}
此类提供了Calculation接口的实现。
package com.javatpoint;
public class CalculationImpl implements Calculation{
public int cube(int number) {
return number*number*number;
}
}
在此xml文件中,我们将DispatcherServlet定义为前端控制器。如果任何请求后跟.http扩展名,它将被转发到DispatcherServlet。
httpInvoker
org.springframework.web.servlet.DispatcherServlet
1
httpInvoker
*.http
它必须在WEB-INF文件夹中创建。它的名称必须是servletname-servlet.xml。它为CalculationImpl和HttpInvokerServiceExporter定义了bean。
在此xml文件中,我们为HttpInvokerProxyFactoryBean定义bean。您需要定义此类的两个属性。
此类获取Calculation的实例并调用该方法。
package com.javatpoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("client-beans.xml");
Calculation calculation = (Calculation)context.getBean("calculationBean");
System.out.println(calculation.cube(5));
}
}
- Output: 125
启动并部署项目,这里我们假设服务器在8888端口号上运行。如果端口号不同,请更改client-beans.xml中的serviceURL。
然后,编译并运行Client.java文件。
在上面给出的示例中,我们使用了基于控制台的客户端。我们也可以使用基于Web的客户端。您需要创建3个其他文件。在这里,我们使用以下文件:
它仅定义一种方法getCube(),该方法返回给定数字的多维数据集
package com.javatpoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ClientInvoker {
public static int getCube(int number){
ApplicationContext context = new ClassPathXmlApplicationContext("client-beans.xml");
Calculation calculation = (Calculation)context.getBean("calculationBean");
return calculation.cube(number);
}
}
它创建一个表格来获取数字。
它创建一个表格来获取数字。
<%@page import="com.javatpoint.ClientInvoker"%>
<%
int number=Integer.parseInt(request.getParameter("number"));
out.print("cube of "+number+" is: "+ClientInvoker.getCube(number));
%>