- 通过HTTP Invoker进行Spring Remoting
- 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调用程序应用程序, 你需要创建以下文件。
- Calculation.java
- CalculationImpl.java
- web.xml
- httpInvoker-servlet.xml
- client-beans.xml
- 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。你需要定义此类的两个属性。
- serviceUrl
- 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个其他文件。在这里, 我们使用以下文件:
- ClientInvoker.java
- index.jsp
- 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));
%>
评论前必须登录!
注册