个性化阅读
专注于IT技术分析

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="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="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="cube" />
</form>

process.jsp

它创建一个表格来获取数字。

<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 httpinvoker示例输出1
Spring httpinvoker示例输出2
赞(0) 打赏
未经允许不得转载:srcmini » Spring通过HTTP Invoker进行远程处理示例
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏