- 通过HTTP Invoker进行Spring Remoting
- Spring HTTP调用程序示例
借助于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
它是包含一个方法多维数据集的简单接口。
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。你需要定义此类的两个属性。
- 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="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个其他文件。在这里, 我们使用以下文件:
- ClientInvoker.java
- index.jsp
- process.jsp
它仅定义一种方法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 Castor用法示例详解
- Spring和Struts 2集成的登录详细示例
- Android精通(View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件)
- android greenDao使用
- Android 应用资源
- Android 9 Pie震撼来袭 同步登陆WeTest
- appium常用方法整理
- hadoop 3.1.1 Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
- 《Android构建MVVM》系列 之 MVVM架构快速入门