java RPC系列之二 HTTPINVOKER
java RPC系列之二 HTTPINVOKER
一、java RPC简单的汇总
java的RPC得到技术,基本包含以下几个,分别是:RMI(远程方法调用) 、Caucho的Hessian 和 Burlap 、Spring的基于HTTP的远程服务、以及使用JAX-RPC和JAX-WS的Web服务。本文主要介绍spring的httpinvoker的基本的配置实现。
二、Spring的httpinvoker的配置实现
基本步骤:
1.定义好服务端需要提供的接口方法(客户端调用的接口);
2.定义好服务端的实现代码;
3.使用spring配置服务端,发布服务到制定端口;
4.使用spring配置客户端的代理bean;
5.定义好服务端和客户端调用的测试代码。
三、Spring的httpinvoker的配置实现的代码如下:
1.定义好ISayHello接口类,服务端和客户端都需要的接口类。
package com.lilin.maven.maven_intf; /**
* @author lilin
*
*/
public interface ISayHello {
/**
* 测试接口接口方法
*/
void sayHello(String name); }
2.定义好服务端的实际实现代码SayHelloService。
package com.lilin.maven.maven_intf; /**
* @author lilin
*
*/
public class SayHelloService implements ISayHello { @Override
public void sayHello(String name) {
System.out.println("hello:" + name);
} }
3.使用spring的配置spring的httpinvoker服务,配置web.xml中的servlet,配置rmi-server.xml文件,将配置的service的bean发布为HTTP服务。
servlet配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>SpringRMI</display-name>
<servlet>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/remote-servlet.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
rmi-server的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="sayHello" class="com.lilin.maven.maven_intf.SayHelloService" />
<bean name="/sayHello"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service" ref="sayHello" />
<property name="serviceInterface" value="com.lilin.maven.maven_intf.ISayHello" />
</bean>
</beans>
4.使用spring配置客户端的代理bean,配置rmi-client.xml,把远程的服务方法配置为bean,可以方便注入。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>
<bean id="sayHello"
class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
<property name="serviceUrl">
<value>http://localhost:8080/maven-web-in/sayHello</value>
</property>
<property name="serviceInterface">
<value>com.lilin.maven.maven_intf.ISayHello</value>
</property>
</bean> </beans>
5.定义好服务端和客户端调用的测试代码,首先启动服务端,发布HTTP服务,然后启动测试端代码通过HTTP调用远程服务。
服务端:启动server后,可以看到如下信息:
信息: Mapped URL path [/sayHello] onto handler '/sayHello'
2016-3-29 0:38:51 org.springframework.web.servlet.FrameworkServlet initServletBean
信息: FrameworkServlet 'Spring MVC Dispatcher Servlet': initialization completed in 1670 ms
2016-3-29 0:38:51 org.apache.coyote.AbstractProtocolHandler start
信息: Starting ProtocolHandler ["http-bio-8080"]
2016-3-29 0:38:51 org.apache.coyote.AbstractProtocolHandler start
信息: Starting ProtocolHandler ["ajp-bio-8009"]
2016-3-29 0:38:51 org.apache.catalina.startup.Catalina start
信息: Server startup in 5547 ms
则表示当前的发布服务成功!
客户端:获取client配置的bean,直接调用远程服务方法,可以得到正确结果如下:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.lilin.maven.maven_intf.ISayHello; /**
* 客户端调用类
*
* @author King
*
*/
public class Client {
// 读取配置文件
static ApplicationContext context = new ClassPathXmlApplicationContext(
"remote-client-local.xml"); public static void main(String[] args) {
new Client().sayHello();
} public void sayHello() {
ISayHello sayHello = (ISayHello) context.getBean("sayHello");
sayHello.sayHello("李林");
} }
到此简单的spring的httpinvoker的远程服务调用,基于spring的配置就全部结束了,值得注意的是:
spring的httpinvoker的使用场景:考虑网络限制,并且希望使用基于xml或者专有的java序列化机制时候哦,访问/发布基于spring的服务。
参见的是spring in action 第三版
java RPC系列之二 HTTPINVOKER的更多相关文章
- java RPC系列之一 rmi
java RPC系列之一 rmi 一.java RPC简单的汇总 java的RPC得到技术,基本包含以下几个,分别是:RMI(远程方法调用) .Caucho的Hessian 和 Burlap . ...
- 当我们说线程安全时,到底在说什么——Java进阶系列(二)
原创文章,同步发自作者个人博客,转载请以超链接形式在文章开头处注明出处http://www.jasongj.com/java/thread_safe/ 多线程编程中的三个核心概念 原子性 这一点,跟数 ...
- Java Thread系列(二)线程状态
Java Thread系列(二)线程状态 一.线程的五种状态 新建状态(New):新创建了一个线程对象,尚未启动. 就绪状态(Runnable):也叫可运行状态.线程对象创建后,其他线程调用了该对象的 ...
- Java 设计模式系列(二十)状态模式
Java 设计模式系列(二十)状态模式 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改 ...
- Java 设计模式系列(二二)责任链模式
Java 设计模式系列(二二)责任链模式 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求 ...
- Java 集合系列之二:List基本操作
1. Java List 1. Java List重要观点 Java List接口是Java Collections Framework的成员. List允许您添加重复元素. List允许您拥有'nu ...
- java se系列(十二)集合
1.集合 1.1.什么是集合 存储对象的容器,面向对象语言对事物的体现,都是以对象的形式来体现的,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式.集合的出现就是为了持有对象.集 ...
- Java 并发系列之二:java 并发机制的底层实现原理
1. 处理器实现原子操作 2. volatile /** 补充: 主要作用:内存可见性,是变量在多个线程中可见,修饰变量,解决一写多读的问题. 轻量级的synchronized,不会造成阻塞.性能比s ...
- JAVA NIO系列(二) Channel解读
Channel就是一个通道,用于传输数据,两端分别是缓冲区和实体(文件或者套接字),通道的特点(也是NIO的特点):通道中的数据总是要先读到一个缓冲区,或者总是要从一个缓冲区中读入. Channel的 ...
随机推荐
- eas之执行sql的方式
客户端: 1. 有返回集合:查询 //查询出DB中所有该字段的值,与其进行比较,若有相同的则报错 String sql="select CFWuliaoCode fr ...
- C#第五节课
switch语句 using System;using System.Collections.Generic;using System.Linq;using System.Text;using Sys ...
- NYIST 99 单词拼接
单词拼接时间限制:3000 ms | 内存限制:65535 KB难度:5 描述给你一些单词,请你判断能否把它们首尾串起来串成一串.前一个单词的结尾应该与下一个单词的道字母相同.如 aloha dog ...
- 命令行下配置Windows 2003防火墙
命令:netsh firewall 参数: ? // 显示命令列表 add // 添加防火墙配置 delete // 删除防火墙配置 dump // 显示一个配置脚本 help // 显示命令列表 r ...
- windows 下 logstash 安装启动
最新在研究elastic stack (elk) : logstash 安装,下载最新版本的logstash: 点击打开链接 解压到磁盘根目录下:在logstash>bin 1.目录下创建:l ...
- 洛谷—— P2690 接苹果
https://www.luogu.org/problem/show?pid=2690 题目背景 USACO 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为1和2), 每一棵 ...
- codevs——T3111 CYD啃骨头
http://codevs.cn/problem/3111/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Desc ...
- Spring MVC-页面重定向示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_page_redirection.htm 说明:示例基于Spring MVC 4. ...
- sendfile学习
参考 https://zhuanlan.zhihu.com/p/20768200?refer=auxten 而成本很多时候的体现就是对计算资源的消耗,其中最重要的一个资源就是CPU资源. Sendfi ...
- 3.2 re--正則表達式操作(Regular expression operations)
本模块提供了正則表達式的匹配操作,它的功能跟Perl语言里的功能一样. 不管是Unicode字符串还是单字节8位组成的字符串,都能够使用模式匹配和字符串查找的功能. 只是要注意的是Unicode字符串 ...