Spring通过HTTP Invoker进行远程处理示例

  1. 通过HTTP Invoker进行Spring Remoting
  2. Spring HTTP调用程序示例
Spring提供了自己的称为HttpInvoker的远程服务实现。它可以用于HTTP请求而不是RMI, 并且可以在整个防火墙中正常工作。
借助于HttpInvokerServiceExporter和HttpInvokerProxyFactoryBean类, 我们可以实现Spring的Http Invokers提供的远程服务。
Http调用程序和其他远程处理技术
你可以使用多种Remoting技术, 让我们看看哪一种最适合你。
Http调用程序与RMI RMI使用JRMP协议, 而Http Invokes使用HTTP协议。由于企业应用程序大多使用http协议, 因此最好使用HTTP Invoker。与HTTP Invoker相比, RMI还存在一些安全问题。 HTTP Invoker在防火墙之间可以很好地工作。
Http调用程序与黑森州和粗麻布 HTTP Invoker是Spring框架的一部分, 但Hessian和麻布是专有的。一切都可以跨防火墙正常工作。 Hessian和Burlap可移植以与.Net和PHP等其他语言集成, 但HTTP Invoker不能。
Spring HTTP调用程序示例
要创建一个简单的spring的HTTP调用程序应用程序, 你需要创建以下文件。
  1. Calculation.java
  2. CalculationImpl.java
  3. web.xml
  4. httpInvoker-servlet.xml
  5. client-beans.xml
  6. Client.java
1) Calculation.java
它是包含一个方法多维数据集的简单接口。
package com.srcmini; public interface Calculation { int cube(int number); }

2) CalculationImpl.java
此类提供了Calculation接口的实现。
package com.srcmini; public class CalculationImpl implements Calculation{ public int cube(int number) { return number*number*number; } }

3)web.xml
在此xml文件中, 我们将DispatcherServlet定义为前端控制器。如果任何请求后跟.http扩展名, 它将被转发到DispatcherServlet。
< ?xml version="1.0" encoding="UTF-8"?> < web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> < servlet> < servlet-name> httpInvoker< /servlet-name> < servlet-class> org.springframework.web.servlet.DispatcherServlet< /servlet-class> < load-on-startup> 1< /load-on-startup> < /servlet> < servlet-mapping> < servlet-name> httpInvoker< /servlet-name> < url-pattern> *.http< /url-pattern> < /servlet-mapping> < /web-app>

4)httpInvoker-servlet.xml
它必须在WEB-INF文件夹中创建。它的名称必须是servletname-servlet.xml。它为CalculationImpl和HttpInvokerServiceExporter定义了bean。
< ?xml version="1.0" encoding="UTF-8"?> < beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> < bean id="calculationBean" class="com.srcmini.CalculationImpl"> < /bean> < bean name="/Calculation.http" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter"> < property name="service" ref="calculationBean"> < /property> < property name="serviceInterface" value="http://www.srcmini.com/com.srcmini.Calculation"> < /property> < /bean> < /beans>

5)client-beans.xml
在此xml文件中, 我们为HttpInvokerProxyFactoryBean定义bean。你需要定义此类的两个属性。
  1. serviceUrl
  2. serviceInterface
< ?xml version="1.0" encoding="UTF-8"?> < beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> < bean id="calculationBean" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean"> < property name="serviceUrl" value="http://localhost:8888/httpinvoker/Calculation.http"> < /property> < property name="serviceInterface" value="http://www.srcmini.com/com.srcmini.Calculation"> < /property> < /bean> < /beans>

6) Client.java
此类获取Calculation的实例并调用该方法。
package com.srcmini; 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)); } }

输出
输出:125
如何运行这个例子
启动并部署项目, 这里我们假设服务器在8888端口号上运行。如果端口号不同, 请更改client-beans.xml中的serviceURL。
然后, 编译并运行Client.java文件。
下载此示例(使用Myeclipse IDE开发)
基于Web的客户端 在上面给出的示例中, 我们使用了基于控制台的客户端。我们也可以使用基于Web的客户端。你需要创建3个其他文件。在这里, 我们使用以下文件:
  1. ClientInvoker.java
  2. index.jsp
  3. process.jsp
ClientInvoker.java
它仅定义一种方法getCube(), 该方法返回给定数字的多维数据集
package com.srcmini; 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); } }

index.jsp
它创建一个表格来获取数字。
< form action="process.jsp"> Enter Number:< input type="text" name="number"/> < input type="submit" value="http://www.srcmini.com/cube" /> < /form>

process.jsp
【Spring通过HTTP Invoker进行远程处理示例】它创建一个表格来获取数字。
< jsp:include page="index.jsp"> < /jsp:include> < hr/> < %@page import="com.srcmini.ClientInvoker"%> < % int number=Integer.parseInt(request.getParameter("number")); out.print("cube of "+number+" is: "+ClientInvoker.getCube(number)); %>

输出
Spring通过HTTP Invoker进行远程处理示例

文章图片
Spring通过HTTP Invoker进行远程处理示例

文章图片

    推荐阅读