hessian demo和hessian与spring整合demo

hessian demo和hessian与spring整合demo

 Hessian是一个轻量级的remoting on http工具,使用简单的方法提供了RMI(Remote Method Invocation,远程方法调用)的功能。采用的是二进制RPC(Remote Procedure Call Protocol,远程过程调用协议)协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。 
  在进行基于Hessian的项目开发时,应当注意以下几点: 
  ▲JAVA服务器端必须具备以下几点: 
  •包含Hessian的jar包。 
  •设计一个接口,用来给客户端调用。 
  •实现该接口的功能。 
  •配置web.xml,配好相应的servlet。 
  •对象必须实现Serializable 接口。 
  •对于复杂对像可以使用Map的方法传递。 
  ▲客户端必须具备以下几点: 
  •java客户端包含Hessian.jar的包。 
  •具有和服务器端结构一样的接口。 
•利用HessianProxyFactory调用远程接口。 

下面是一个hessian的简单例子。 

Java服务器端: 

环境:j2sdk1.4.2、Tomcat6.0 
依赖的包:hessian-3.1.6.jar 

新建一个名为HessianServer的web project。将hessian-3.1.6.jar放入WEB-INF/lib文件夹中。 

创建接口: 

Java代码    收藏代码
  1. package server.demo;  
  2.   
  3. public interface DemoApi {  
  4.     public void setName(String name);  
  5.     public String sayHello();  
  6.     public User getUser();  
  7. }  

实现接口: 
Java代码    收藏代码
  1. package server.demo;  
  2.   
  3. public class DemoService implements DemoApi {  
  4.     private String name;  
  5.   
  6.     public String sayHello() {  
  7.         return "Hello "+name;  
  8.     }  
  9.   
  10.     public void setName(String name) {  
  11.         this.name=name;  
  12.         System.out.println("Hello "+name);  
  13.     }  
  14.   
  15.     public User getUser() {  
  16.         return new User("lingling""pass");  
  17.     }  
  18.   
  19. }  

创建User类,注意:一定要implements Serializable。 
Java代码    收藏代码
  1. package server.demo;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class User implements Serializable {  
  6.     String name = "kitty";  
  7.     String password = "nopass";  
  8.   
  9.     public User() {  
  10.         super();  
  11.     }  
  12.   
  13.     public User(String name, String password) {  
  14.         super();  
  15.         this.name = name;  
  16.         this.password = password;  
  17.     }  
  18.   
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.   
  23.     public void setName(String name) {  
  24.         this.name = name;  
  25.     }  
  26.   
  27.     public String getPassword() {  
  28.         return password;  
  29.     }  
  30.   
  31.     public void setPassword(String password) {  
  32.         this.password = password;  
  33.     }  
  34.   
  35. }  

配置web.xml: 
Xml代码    收藏代码
  1. <servlet>  
  2.     <servlet-name>first</servlet-name>  
  3.     <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>  
  4.     <init-param>  
  5.         <param-name>service-class</param-name>  
  6.         <param-value>server.demo.DemoService</param-value>  
  7.     </init-param>  
  8. </servlet>  
  9. <servlet-mapping>  
  10.     <servlet-name>first</servlet-name>  
  11.     <url-pattern>/helloworld</url-pattern>  
  12. </servlet-mapping>  

将项目发布到tomcat服务器上。 

Java客户端: 

环境:j2sdk1.4.2 
依赖的包:hessian-3.1.6.jar 

创建一个名为HessianClient的java project,载入hessian-3.1.6.jar。 

创建与服务器一样的接口及User类,注意它们所在的包路径也要与服务器相同,否则会出现java.lang.ClassNotFoundException。 

接口: 
Java代码    收藏代码
  1. package server.demo;  
  2.   
  3. public interface DemoApi {  
  4.     public void setName(String name);  
  5.     public String sayHello();  
  6.     public User getUser();  
  7. }  

User类: 
Java代码    收藏代码
  1. package server.demo;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class User implements Serializable {  
  6.     String name = "kitty";  
  7.     String password = "nopass";  
  8.   
  9.     public User() {  
  10.         super();  
  11.     }  
  12.   
  13.     public User(String name, String password) {  
  14.         super();  
  15.         this.name = name;  
  16.         this.password = password;  
  17.     }  
  18.   
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.   
  23.     public void setName(String name) {  
  24.         this.name = name;  
  25.     }  
  26.   
  27.     public String getPassword() {  
  28.         return password;  
  29.     }  
  30.   
  31.     public void setPassword(String password) {  
  32.         this.password = password;  
  33.     }  
  34.   
  35. }  

客户端程序: 
Java代码    收藏代码
  1. package client.demo;  
  2.   
  3. import java.net.MalformedURLException;  
  4.   
  5. import server.demo.DemoApi;  
  6.   
  7. import com.caucho.hessian.client.HessianProxyFactory;  
  8.   
  9. public class ClientTest {  
  10.     public static void main(String[] args) throws MalformedURLException,  
  11.             ClassNotFoundException {  
  12.         String url = "http://localhost:9520/HessianServer/helloworld";  
  13.         HessianProxyFactory factory = new HessianProxyFactory();  
  14.         DemoApi api = (DemoApi) factory.create(url);  
  15.         api.setName("test");  
  16.         System.out.println(api.sayHello());  
  17.         System.out.println(api.getUser().getName());  
  18.         System.out.println(api.getUser().getPassword());  
  19.     }  
  20. }  

现在,启动tomcat,运行ClientTest。运行结果: 
Hello test 
lingling 
pass 

现在,在以上基础上将hessian与spring整合。 

Java服务器端(即我们上面建的名为HessianServer的web project): 

环境:j2sdk1.4.2、Tomcat6.0 
依赖的包: 
1. Hessian包:hessian-3.1.6.jar 
2. spring-framework-2.0.2包: 
a) aopalliance.jar 
b) commons-logging.jar 
c) log4j-1.2.14.jar 
d) spring.jar 
e) spring-aop.jar 
f) spring-beans.jar 
g) spring-context.jar 
h) spring-core.jar 
i) spring-jdbc.jar 
j) spring-jms.jar 
k) spring-web.jar 
l) spring-webmvc.jar 

配置web.xml,web.xml中增加: 
Xml代码    收藏代码
  1. <servlet>  
  2.     <servlet-name>remote</servlet-name>  
  3.     <servlet-class>  
  4.         org.springframework.web.servlet.DispatcherServlet  
  5.     </servlet-class>  
  6.     <init-param>  
  7.         <param-name>namespace</param-name>  
  8.         <param-value>classes/remote-servlet</param-value>  
  9.     </init-param>  
  10.     <load-on-startup>1</load-on-startup>  
  11. </servlet>  
  12. <servlet-mapping>  
  13.     <servlet-name>remote</servlet-name>  
  14.     <url-pattern>/remote/*</url-pattern>  
  15. </servlet-mapping>  

写spring的发布hessian服务的配置文件remote-servlet.xml,这个文件就建在工程的src下,即deploy到tomcat后,在WEB-INF/classes目录下。注意:这个文件为什么叫remote-servlet.xml呢?因为我们在web.xml中有配置:<param-value>classes/remote-servlet</param-value>所以文件名为remote-servlet.xml。 
以下是remote-servlet.xml的内容: 
Xml代码    收藏代码
  1. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  2. <beans>  
  3.     <bean id="demoService" class="server.demo.DemoService" />  
  4.     <bean name="/helloSpring"  
  5.         class="org.springframework.remoting.caucho.HessianServiceExporter">  
  6.         <property name="service" ref="demoService" />  
  7.         <property name="serviceInterface" value="server.demo.DemoApi" />  
  8.     </bean>  
  9. </beans>  

好了,现在可以测试一下了。在刚才建的名为HessianClient的java project中修改client.demo.ClientTest.java如下: 
Java代码    收藏代码
  1. package client.demo;  
  2.   
  3. import java.net.MalformedURLException;  
  4.   
  5. import server.demo.DemoApi;  
  6.   
  7. import com.caucho.hessian.client.HessianProxyFactory;  
  8.   
  9. public class ClientTest {  
  10.     public static void main(String[] args) throws MalformedURLException,  
  11.             ClassNotFoundException {  
  12.         // String url = "http://localhost:9520/HessianServer/helloworld";  
  13.         String url = "http://localhost:9520/HessianServer/remote/helloSpring";  
  14.         HessianProxyFactory factory = new HessianProxyFactory();  
  15.         DemoApi api = (DemoApi) factory.create(DemoApi.class, url);  
  16.         api.setName("test");  
  17.         System.out.println(api.sayHello());  
  18.         System.out.println(api.getUser().getName());  
  19.         System.out.println(api.getUser().getPassword());  
  20.     }  
  21. }  

现在,启动tomcat,运行ClientTest。运行结果: 
Hello test 
lingling 
pass 

如果客户端也使用spring呢?现在做一个spring整合hessian的客户端demo。首先载入spring-framework-2.0.2包:
1) aopalliance.jar 
2) commons-logging.jar 
3) log4j-1.2.14.jar 
4) spring.jar 
5) spring-aop.jar 
6) spring-beans.jar 
7) spring-context.jar 
8) spring-core.jar 
9) spring-jdbc.jar 
10) spring-jms.jar 
11) spring-web.jar 
12) spring-webmvc.jar 
在名为HessianClient的java project中src目录下,新建一个remote-client.xml,这个文件可随意命名。remote-client.xml内容为: 
Xml代码    收藏代码
  1. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  2. <beans>  
  3.     <bean id="helloSpring"  
  4.         class="org.springframework.remoting.caucho.HessianProxyFactoryBean">  
  5.         <property name="serviceUrl">  
  6.             <value>  
  7.                 http://localhost:9520/HessianServer/remote/helloSpring  
  8.             </value>  
  9.         </property>  
  10.         <property name="serviceInterface">  
  11.             <value>server.demo.DemoApi</value>  
  12.         </property>  
  13.     </bean>  
  14. </beans>  

在刚才建的名为HessianClient的java project中修改client.demo.ClientTest.java如下: 
Java代码    收藏代码
  1. package client.demo;  
  2.   
  3. import java.net.MalformedURLException;  
  4.   
  5. import org.springframework.context.ApplicationContext;  
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  7.   
  8. import server.demo.DemoApi;  
  9.   
  10. public class ClientTest {  
  11.     public static void main(String[] args) throws MalformedURLException,  
  12.             ClassNotFoundException {  
  13.         // String url = "http://localhost:9520/HessianServer/helloworld";  
  14.         // String url =  
  15.         // "http://localhost:9520/HessianServer/remote/helloSpring";  
  16.         // HessianProxyFactory factory = new HessianProxyFactory();  
  17.         // DemoApi api = (DemoApi) factory.create(DemoApi.class, url);  
  18.   
  19.         ApplicationContext context = new ClassPathXmlApplicationContext(  
  20.                 "remote-client.xml");  
  21.         DemoApi api = (DemoApi) context.getBean("helloSpring");  
  22.         api.setName("test");  
  23.         System.out.println(api.sayHello());  
  24.         System.out.println(api.getUser().getName());  
  25.         System.out.println(api.getUser().getPassword());  
  26.     }  
  27. }  

现在,启动tomcat,运行ClientTest。运行结果: 
Hello test 
lingling 
pass 

至此over~ 
PS:有时候可能因hessian或spring的版本问题使程序不能运行

猜你喜欢

转载自lxm3033.iteye.com/blog/1630327