论坛首页 Java企业应用论坛

我也来写一篇Hessian的学习笔记

浏览 9037 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-16  

似乎最近Hessian 很火?

昨天我用了,马上就喜欢上了他.

1- 整个jar很小,200多K,3.1版本的,当然,我下载的for java的版本.

2- 配置很简单,基本上不需要花什么经历就配置出来了

3- 功能强大,可以将soap抛开,也可以把EJB抛开,采用二进制来传递对象

4- 拥有多种语言支持,python c++  .net 甚至 flex 都可以做为client端

http://hessian.caucho.com/#Java 这里可以下载到for java的版本

任意JAVA的IDE新建一个JAVA WEB工程

将下载的.jar包引入工程中,创建一个接口,这个接口可以供客户端和服务器端使用如下:

java 代码
  1. public interface IBasic {   
  2.   
  3.     /**  
  4.      * 测试字符串  
  5.      * @return  
  6.      */  
  7.     public String hello();   
  8.   
  9.     /**  
  10.      * 取一辆汽车   测试对象传递  
  11.      * @return  
  12.      */  
  13.     public Car getCar();   
  14.   
  15. }  

 

当然接口中用到的Car 这个类是自己定义的包含任何属性的标准JAVABEAN;

接下来我们就开始做service端的程序了:

java 代码
  1. /**  
  2.  * Created by IntelliJ IDEA.  
  3.  * User: tangkf  
  4.  */  
  5. public class BasicService implements IBasic {   
  6.   private String hello= "Hello, world";   
  7.   
  8.   public String hello()   
  9.   {   
  10.     return hello;   
  11.   }   
  12.   
  13.     public Car getCar() {   
  14.         Car car = new Car();   
  15.         car.setColor("RED红色");   
  16.         car.setLength("2400");   
  17.         car.setName("HAHACHE");   
  18.         return car;   
  19.     }   
  20. }  

 

服务器端的程序写好后,要让client能够通过http协议访问到我们的service还需要配置servlet,当然这个过程是很简单的

xml 代码
  1. <servlet>  
  2.     <servlet-name>helloservlet-name>  
  3.     <servlet-class>com.caucho.hessian.server.HessianServletservlet-class>  
  4.     <init-param>  
  5.         <param-name>home-classparam-name>  
  6.         <param-value>study.hessian.BasicServiceparam-value>  
  7.     init-param>  
  8.     <init-param>  
  9.         <param-name>home-apiparam-name>  
  10.         <param-value>study.hessian.IBasicparam-value>  
  11.     init-param>  
  12. servlet>  
  13.   
  14. <servlet-mapping>  
  15.     <servlet-name>helloservlet-name>  
  16.     <url-pattern>/hellourl-pattern>  
  17. servlet-mapping>  

 

只需要将上面的代码加入到你的WEB.XML文件中,当然包路径是你自己的路径而已.

这时服务器段的工作就已经全部完成了.

 

接下来我们在做client端的工作,client需要用到IBasic 这个接口,还需要用到 Car 这个类

可以做一个简单的测试:

java 代码
  1. public class BasicClient {   
  2.     public static void main(String []args)   
  3.         throws Exception   
  4.       {   
  5.         String url = "http://127.0.0.1:8099/common/hello";   
  6.         HessianProxyFactory factory = new HessianProxyFactory();   
  7.         Basic basic = (Basic) factory.create(Basic.class, url);   
  8.           Car car   = basic.getCar();   
  9.           System.out.println("Hello: " + basic.hello());   
  10.         System.out.println("Hello: " + car.toString());   
  11.       }   
  12.   
  13.   
  14. }  

 

大功告成,启动我们的WEB服务器,然后在启动这个client的程序,是不是发现屏幕上输出了你想看到的结果!要是抛异常了怎么办?

不要急,检查下包路径,.xml文件的配置,没有什么神奇的地方.

我们离开了WSDL,离开了WSDD,也不需要AXIS,不需要什么W3C的大篇标准.

Hessian 简单就是美,实用就是强,好用就是王道!!!哈哈哈哈~~~

   发表时间:2007-11-21  
晕 请教一下 为什么会有
Exception in thread "main" com.caucho.hessian.client.HessianRuntimeException: java.net.ConnectException: Connection refused: connect
这样的exception

in BasicClient.java

String url = "http://localhost:8099/HessianLearning/webservice";

in web.xml
<servlet>
	<servlet-name>HessianServlet</servlet-name>
	<servlet-class>
		com.caucho.hessian.server.HessianServlet
	</servlet-class>
	<init-param>
		<param-name>home-class</param-name>
		<param-value>org.hessian.study.BasicService</param-value>
	</init-param>
	<init-param>
		<param-name>home-api</param-name>
		<param-value>org.hessian.study.IBasic</param-value>
	</init-param>
</servlet>

<servlet-mapping>
	<servlet-name>HessianServlet</servlet-name>
	<url-pattern>/*</url-pattern>
</servlet-mapping>

试过了jboss & tomcat 都是一样的 -_-!!

Plese Help, Thanks very much
0 请登录后投票
   发表时间:2007-11-21  
你的WEB启动成功了没?有问题吗?
0 请登录后投票
   发表时间:2007-11-21  
成功了~~

是不是端口问题

按理说 HessianServlet
<servlet>
	<servlet-name>HessianServlet</servlet-name>
	<servlet-class>
		com.caucho.hessian.server.HessianServlet
	</servlet-class>
	<init-param>
		<param-name>home-class</param-name>
		<param-value>org.hessian.study.BasicService</param-value>
	</init-param>
	<init-param>
		<param-name>home-api</param-name>
		<param-value>org.hessian.study.IBasic</param-value>
	</init-param>
</servlet>


听得的是8080 但该改成8080 又说FileNotFoundException

in BasicClient.java
String url = "http://localhost:8080/HessionTest/webservice";

Exception in thread "main" com.caucho.hessian.client.HessianRuntimeException: java.io.FileNotFoundException: http://localhost:8080/HessionTest/webservice
	at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:182)
	at $Proxy0.getCar(Unknown Source)
	at org.hessian.study.BasicClient.main(BasicClient.java:19)
0 请登录后投票
   发表时间:2007-11-21  
at $Proxy0.getCar(Unknown Source) 

这句.....有Car对象吗????

你把getCar的部分先测试 String 类型
0 请登录后投票
   发表时间:2007-11-22  
还是不成~ T_T

string on 8080 or 8099~~
0 请登录后投票
   发表时间:2007-11-22  
你客户端的Basic类哪来的?是IBasic?
0 请登录后投票
   发表时间:2007-11-22  
对是IBasic,这个是公用接口~~~~~~~~~~
0 请登录后投票
   发表时间:2007-11-22  
看不出这和RMI有啥区别?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics