hession的入门级使用方法

原创 2016年08月29日 14:07:06


       本文章介绍的是hession最基本的使用方法,由于本人是第一次接触,肯定有很多地方不足,结合从网上搜的资料自己写了一个小的练习程序。个人的理解hession能够做到在服务器端写好接口和实现,可以在客户端通过url访问接口来调用服务端的实现类,客户端可以是任意的,包括手机,flex,java程序等等,只要知道url的值就可以访问,并能够接受服务端实现类的处理结果和返回的数据,这样的好处就是客户端不用考虑具体的实现,这只是个人的一个小小的看法,hession肯定还有很多更强大的功能等着我们去发现和运用。下面就来介绍下这个程序的编写过程。         首先该程序分为服务器端和客户端两部分,可以将服务端项目部署在tomcat服务器或者其他web服务器上面,用的开发工具是myeclipse6.5。两个工程的结构如下图所示:

     

步骤:

一:服务端

   1.建立一个名为EasyHession的web工程,在WEB-INF目录下的lib文件夹中加入hession的jar包(点击下载jar包)。

   2.在src目录下按上图的结构(结构可以自定义)新建如下的接口和类。

接口:BasicAPI.java


package app.demo;


import app.demo.bean.User;


public interface BasicAPI {
public void setGreeting(String greeting);
public String hello();
public User getUser();
public boolean login(String username,String password);
}


接口实现类:BasicService.java


package app.demo.impl;


import app.demo.BasicAPI;
import app.demo.bean.User;


public class BasicService implements BasicAPI {

private String strGreeting = "I'm not change!"; 


@Override
public void setGreeting(String greeting) {
strGreeting = greeting;
System.out.println("set greeting success:" + greeting); 
}


@Override
public String hello() {
return strGreeting;
}


@Override
public User getUser() {
return new User("prance", "meshow");
}


@Override
public boolean login(String username, String password) {
// TODO Auto-generated method stub
System.out.println("username : " + username + " , password : " + password);
if ("zl".equals(username)&&"123".equals(password)) {
return true;
}
return false;
}

}


实体(pojo)类:User.java


package app.demo.bean;


import java.io.Serializable;


public class User implements Serializable {


private static final long serialVersionUID = 1L;

private String userName; 
private String password;

public User(String userName, String password) {
super();
this.userName = userName;
this.password = password;
}


public String getUserName() {
return userName;
}


public void setUserName(String userName) {
this.userName = userName;
}


public String getPassword() {
return password;
}


public void setPassword(String password) {
this.password = password;


@Override
public String toString() {
return "User:[ userName: "+userName+", password: "+password+" ]";
}
}


3.配置web.xml

在<web-app>下面加入如下hession的servlet配置,servlet的名字可以随意取,也不一定要和url-pattern一致,下面只是一个例子,但是servlet-class的配置必须和下面相同。

<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<init-param>
<param-name>service-class</param-name>
<param-value>app.demo.impl.BasicService</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
到此服务端已经完成。为了测试可以写一个test.jsp来测试服务器是否正确。

<%@ page language="java" pageEncoding="UTF-8" import="com.caucho.hessian.client.HessianProxyFactory,app.demo.BasicAPI"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>


<body>
<%
HessianProxyFactory factory = new HessianProxyFactory();
String url = ("http://" +request.getServerName() + ":" +request.getServerPort() + request.getContextPath() + "/hello");
out.println(url);
%><br><% 
BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class,url);
out.println("Hello: " + basic.hello());
%><br><%
out.println("Hello: " + basic.getUser() .getUserName() );
%><br><%
out.println("Hello: " + basic.getUser().getPassword() );
%> 
</body>

将项目部署到tomcat上面,启动服务器,在浏览器中访问http://localhost:8080/EasyHession/test.jsp将得到如下结果:

http://localhost:8080/EasyHession/hello 
Hello: I'm not change! 
Hello: prance 
Hello: meshow 


二:客户端

1.新建一个名为EasyHessionClient的java工程,导入和服务器相同版本的hession的jar包

2.将服务器端的接口BasicAPI.java和实体类User.java按照上面工程图的包结构复制到客户端工程中。

3.编写一个客户端访问类BasicClient.java

package client.demo;


import java.net.MalformedURLException;


import com.caucho.hessian.client.HessianProxyFactory;


public class BasicClient {


public static void main(String[] args) {
try {
String url = "http://localhost:8080/EasyHession/hello";
HessianProxyFactory factory = new HessianProxyFactory();
BasicAPI basic;
basic = (BasicAPI) factory.create(BasicAPI.class,url);
System.out.println("Hello:" + basic.hello());
System.out.println("userName:" + basic.getUser());
basic.setGreeting("changed!");
System.out.println("Hello:" + basic.hello());
if(basic.login("zl", "123")) {
System.out.println("登录成功!");
}else {
System.out.println("登录失败!");
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}

}

运行该类之后将得到如下结果:

Hello:I'm not change!
userName:User:[ userName: prance, password: meshow ]
Hello:changed!
登录成功!


     本文章介绍的是hession最基本的使用方法,由于本人是第一次接触,肯定有很多地方不足,结合从网上搜的资料自己写了一个小的练习程序。个人的理解hession能够做到在服务器端写好接口和实现,可以在客户端通过url访问接口来调用服务端的实现类,客户端可以是任意的,包括手机,flex,java程序等等,只要知道url的值就可以访问,并能够接受服务端实现类的处理结果和返回的数据,这样的好处就是客户端不用考虑具体的实现,这只是个人的一个小小的看法,hession肯定还有很多更强大的功能等着我们去发现和运用。下面就来介绍下这个程序的编写过程。

         首先该程序分为服务器端和客户端两部分,可以将服务端项目部署在tomcat服务器或者其他web服务器上面,用的开发工具是myeclipse6.5。两个工程的结构如下图所示:

     

步骤:

一:服务端

   1.建立一个名为EasyHession的web工程,在WEB-INF目录下的lib文件夹中加入hession的jar包(点击下载jar包)。

   2.在src目录下按上图的结构(结构可以自定义)新建如下的接口和类。

接口:BasicAPI.java


package app.demo;


import app.demo.bean.User;


public interface BasicAPI {
public void setGreeting(String greeting);
public String hello();
public User getUser();
public boolean login(String username,String password);
}


接口实现类:BasicService.java


package app.demo.impl;


import app.demo.BasicAPI;
import app.demo.bean.User;


public class BasicService implements BasicAPI {

private String strGreeting = "I'm not change!"; 


@Override
public void setGreeting(String greeting) {
strGreeting = greeting;
System.out.println("set greeting success:" + greeting); 
}


@Override
public String hello() {
return strGreeting;
}


@Override
public User getUser() {
return new User("prance", "meshow");
}


@Override
public boolean login(String username, String password) {
// TODO Auto-generated method stub
System.out.println("username : " + username + " , password : " + password);
if ("zl".equals(username)&&"123".equals(password)) {
return true;
}
return false;
}

}


实体(pojo)类:User.java


package app.demo.bean;


import java.io.Serializable;


public class User implements Serializable {


private static final long serialVersionUID = 1L;

private String userName; 
private String password;

public User(String userName, String password) {
super();
this.userName = userName;
this.password = password;
}


public String getUserName() {
return userName;
}


public void setUserName(String userName) {
this.userName = userName;
}


public String getPassword() {
return password;
}


public void setPassword(String password) {
this.password = password;


@Override
public String toString() {
return "User:[ userName: "+userName+", password: "+password+" ]";
}
}


3.配置web.xml

在<web-app>下面加入如下hession的servlet配置,servlet的名字可以随意取,也不一定要和url-pattern一致,下面只是一个例子,但是servlet-class的配置必须和下面相同。

<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<init-param>
<param-name>service-class</param-name>
<param-value>app.demo.impl.BasicService</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
到此服务端已经完成。为了测试可以写一个test.jsp来测试服务器是否正确。

<%@ page language="java" pageEncoding="UTF-8" import="com.caucho.hessian.client.HessianProxyFactory,app.demo.BasicAPI"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>


<body>
<%
HessianProxyFactory factory = new HessianProxyFactory();
String url = ("http://" +request.getServerName() + ":" +request.getServerPort() + request.getContextPath() + "/hello");
out.println(url);
%><br><% 
BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class,url);
out.println("Hello: " + basic.hello());
%><br><%
out.println("Hello: " + basic.getUser() .getUserName() );
%><br><%
out.println("Hello: " + basic.getUser().getPassword() );
%> 
</body>

将项目部署到tomcat上面,启动服务器,在浏览器中访问http://localhost:8080/EasyHession/test.jsp将得到如下结果:

http://localhost:8080/EasyHession/hello 
Hello: I'm not change! 
Hello: prance 
Hello: meshow 


二:客户端

1.新建一个名为EasyHessionClient的java工程,导入和服务器相同版本的hession的jar包

2.将服务器端的接口BasicAPI.java和实体类User.java按照上面工程图的包结构复制到客户端工程中。

3.编写一个客户端访问类BasicClient.java

package client.demo;


import java.net.MalformedURLException;


import com.caucho.hessian.client.HessianProxyFactory;


public class BasicClient {


public static void main(String[] args) {
try {
String url = "http://localhost:8080/EasyHession/hello";
HessianProxyFactory factory = new HessianProxyFactory();
BasicAPI basic;
basic = (BasicAPI) factory.create(BasicAPI.class,url);
System.out.println("Hello:" + basic.hello());
System.out.println("userName:" + basic.getUser());
basic.setGreeting("changed!");
System.out.println("Hello:" + basic.hello());
if(basic.login("zl", "123")) {
System.out.println("登录成功!");
}else {
System.out.println("登录失败!");
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}

}

运行该类之后将得到如下结果:

Hello:I'm not change!
userName:User:[ userName: prance, password: meshow ]
Hello:changed!
登录成功!

Hessian远程调用框架进阶教程(一) Hessian介绍JAVA使用Hessian进行编程实例

Hessian很简单,理解其使用和机制之后,有助于你理解其他微服务框架(这是重点,本教程理解的越深越细,对学习微服务框架帮助越大这也是我们所期望的) Hessian是基于 Http 协议进行传输的,初...
  • zixiao217
  • zixiao217
  • 2016年12月13日 13:35
  • 3005

hessian远程服务调用例子

一、什么是Hessian       Hessian 是一个基于 binary-RPC 实现的远程通讯 library。使用二进制传输数据。       Hessian通常通过Web应用来提供服务,通...
  • worn_xiao
  • worn_xiao
  • 2017年11月05日 21:04
  • 89

hessian简单原理及实现例子--学习

Hessian是一个轻量级的remoting on http工具,使用简单的方法提供了RMI(Remote Method Invocation,远程方法调用)的功能。采用的是二进制RPC(Remote...
  • chiperfect
  • chiperfect
  • 2011年07月27日 09:53
  • 12309

Deep learning:四十三(用Hessian Free方法训练Deep Network)

目前,深度网络(Deep Nets)权值训练的主流方法还是梯度下降法(结合BP算法),当然在此之前可以用无监督的方法(比如说RBM,Autoencoder)来预训练参数的权值,而梯度下降法应用在深度网...
  • mydear_11000
  • mydear_11000
  • 2016年03月13日 15:14
  • 620

Spring使用远程服务之Hessian

Hessian像RMI一样,使用二进制消息进行客户端和服务端的交互,它的二进制消息可以移植到其他非Java的语言中包括PHP、Python、C++和C#。因为Hessian是基于HTTP的,所以Hes...
  • junshuaizhang
  • junshuaizhang
  • 2014年06月04日 20:46
  • 20265

Hessian+Maven Demo 一个简单的实例(有问题,可以提问,经常在线,源码会粘上连接,可下载)

1:这个小Demo是我在IOS系统上搞起来的,MAVEN、JDK、TOMCAT、ECLIPSE安装都不一一说了,可以自己尝试一下,有问题,可以在线问我 2:这是一个Hessian入门级别的项目,项目是...
  • shenhonglei1234
  • shenhonglei1234
  • 2016年07月26日 21:49
  • 723

关于使用hessian提供下载服务的问题

hessian在目前4.0以后的版本对外输出流时有bug,会抛stream is closed 异常。 解决方法是下载hessian源码,比如hessian-4.0.51的源码,导入IDE中,打开 ...
  • a605135705
  • a605135705
  • 2018年01月10日 10:12
  • 18

《Spring技术内幕》学习笔记18——Spring使用Hessian实现远程调用

《Spring技术内幕》学习笔记18——Spring使用Hessian实现远程调用 1.Spring中除了提供HTTP调用器方式的远程调用,还对第三方的远程调用实现提供了支持,其中提供了...
  • momomoge
  • momomoge
  • 2012年02月29日 09:23
  • 6135

Hessian知识学习总结(二)——Hessian的helloworld

Hessian的helloworld
  • wodediqizhang
  • wodediqizhang
  • 2016年06月07日 17:52
  • 11891

Hessian通信基础

Java学习之Hessian通信基础 (2011-11-29 19:37:29) 转载▼ 标签: java hessian 通信 rmi 基础 it ...
  • haiyang0735
  • haiyang0735
  • 2016年04月28日 18:34
  • 306
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hession的入门级使用方法
举报原因:
原因补充:

(最多只允许输入30个字)