hessian Java初探
来源:互联网 发布:java首页登录开发注意 编辑:程序博客网 时间:2024/05/21 14:54
**
1. hessian简介
**
首先简单介绍下hessian,hessian是一个轻量级的remoting onhttp工具,类似于webService,但是hessian不是使用soap协议,他是基于自己的hessian协议(二进制RPC协议),具有轻量、传输量小、快速、平台及语言无关性等特点。hessian将协议报文封装到http封包中,通过HTTP信道进行传输,是一种高效的远程调用框架。hessian现在已经支持java,Python,C++,.NET,PHP,Ruby,Objective C等。
**
2. hessian通信
**
Hessian通过客户端API类HessianProxyFactory去发出请求http请求,通过hessian自己的序列化机制对请求信息进行序列化机制,产生二进制的流,服务器端主要通过HessianServlet这个类对请求进行处理,接收到请求后服务器端进行反序列化操作,将请求数据解析出来,然后在服务器端对数据进行进行操作(比如常见的数据库CRUD操作),然后将要返回的结果进行序列化c成二进制流,传输到客户端。
**
3. hessian 简单java实例
**
首先,我们来看看hessian该如何使用,从简单的hello world开始。
首先我们要定义一个接口:
public interface IHelloService { public void sayHello(); public void getSayName(String name); public void setUserInfo(String name,String pwd,int age,Date birthday); public UserDTO getUser();}
然后是接口的实现类:
public class HelloServiceImpl implements IHelloService{ private UserDTO dto; @Override public void sayHello() { // TODO Auto-generated method stub System.out.println("say Hello"); } @Override public void getSayName(String name) { // TODO Auto-generated method stub System.out.println("say " + name); } @Override public void setUserInfo(String name,String pwd,int age,Date birthday) { // TODO Auto-generated method stub this.dto = new UserDTO(name, pwd, age, birthday); } @Override public UserDTO getUser() { // TODO Auto-generated method stub return dto; }}
定义的dto:
public class UserDTO implements Serializable{ private String name; private String password; private int age; private Date birthday; public UserDTO() { // TODO Auto-generated constructor stub } public UserDTO(String name, String password, int age, Date birthday) { super(); this.name = name; this.password = password; this.age = age; this.birthday = birthday; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return "UserDTO [name=" + name + ", password=" + password + ", age=" + age + ", birthday=" + birthday + "]"; }}
注意在dto中一定要实现Serializable接口,否则,客户端调用时就会报错。
接下来就可以在web.xml中配置HessianServlet,刚刚说过这个类作为服务器端接收请求的类,他是一个Servlet,所以和其他的Servlet配置一样:
<servlet> <servlet-name>hessianServer</servlet-name> <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class> <!-- 接口 --> <init-param> <param-name>home-api</param-name> <param-value>com.remoting.hessian.service.IHelloService</param-value> </init-param> <!-- 其实现类 --> <init-param> <param-name>home-class</param-name> <param-value>com.remoting.hessian.service.impl.HelloServiceImpl</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>hessianServer</servlet-name> <url-pattern>/remoting/hello</url-pattern> </servlet-mapping>
这样服务器端就开发完了,其中HelloServiceImpl只是简单打印结果,一般项目中最可能就是对数据库进行操作了。接着启动服务器,等待客户端的调用。
好了,接下来看看hessian客户端如何调用的:
public class clientTest { private String url = "http://localhost:8080/HessianServer/remoting/hello"; private IHelloService service = null; @Before public void init() throws MalformedURLException, ClassNotFoundException{ HessianProxyFactory proxyFactory = new HessianProxyFactory(); service = (IHelloService)proxyFactory.create(IHelloService.class, url); } @Test public void sayHello(){ service.sayHello(); } @Test public void getSayName(){ service.getSayName("tangfeng"); } @Test public void getUser(){ service.setUserInfo("tf", "wwf", 23, new Date()); System.out.println(service.getUser()); }}
这里主要是使用HessianProxyFactory这个类跟服务器端进行交互,HessianProxyFactory.create()方法将会产生一个HessianProxy这个代理类,此类实现了InvocationHandler接口,JDK的Proxy将会自动调用InvocationHandler的实现类(此处为HessianProxy)。HessianProxy的invoke方法中就是通过HttpURLConnection跟服务器端进行交互。此处比较复杂,将会在接下来的文章对Hessian的源码进行分析。
**
4. 总结
**
Hessian是基于二进制的RPC协议实现的,是根据hessian自己的api类发出请求,并通过自己的序列化机制对请求信息进行序列化操作产生二进制流,他是基于HTTP协议进行传输的。在服务器端hessian也是通过自己的api类来进行接收请求,并将请求得到的数据进行反序列化,传递给使用者时已经时序列化好可用的信息,通过服务器端的一系列操作,然后将结果序列化返回给客户端。
这里通过一个小的java实例,来感受hessian的远程方法调用。在客户端,调用服务器远程方法就像在本地调用一样,而且面向接口编程,能带来更大的灵活性。好了,小小的实例就写到这里,下篇我们来看看怎么和spring进行结合,来使远程方法调用更加简单。
- hessian Java初探
- Hessian 机制初探
- java hessian
- hessian 序列化实现 初探
- hessian (Java 篇)
- Hessian---java远程通讯
- hessian java调用
- Hessian通信案例(java)
- Hessian源码分析(java)
- Java hessian基础教程
- java调用hessian配置
- Java:Hessian框架使用
- PHPHessian调用Java Spring Hessian
- Java远程调用之Hessian
- Java 远程调用 Hessian 简例
- Java Hessian小试(转)
- hessian php与Java通信
- Hessian
- css3笔记
- 数据库中常用的sql语句
- 配置iPhone作为iOS应用调试工具
- MySQL数据库名、表名、列名、别名区分大小写的问题
- CSS Modules 关于CSS模块化的方法 基于React
- hessian Java初探
- 关于android layout的一些理解
- css3笔记
- 一个简单的问题(域名解析了访问不到的问题)
- 133_Activity调用Service方法
- 用CFree写的Windows SDK 画线程序
- 动态规划——triangle空间复杂度O(n)
- hdu1024 Max Sum Plus Plus dp
- 134_Activity给Service发消息