首页 > 其他分享 >Hessian使用教程

Hessian使用教程

时间:2022-11-30 21:09:28浏览次数:34  
标签:WEB 教程 HessianServer api 使用 INF public Hessian name


Hessian是一个轻量级的remotingonhttp工具,使用简单的方法提供了RMI的功能。相比Webservice,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合发送二进制数据。

      在进行基于Hessian的项目开发时,应当注意一下几点:

Java服务器端必须具备:

■包含Hessian的jar包

■设计一个接口,用来给客户端调用

■实现该接口的功能

■配置web.xml,配置好相应的servlet

■由于使用二进制RPC协议传输数据,对象必须进行序列化,实现Serializable接口

■对于复杂对象可以使用Map的方法传递

Java客户端必须具备:

□Java客户端包含Hessian的jar包

□具有和服务器端结构一样的接口,包括命名空间都最好一样

□利用HessianProxyFactory调用远程接口

 

Hessian的简单例子

 

Hessian服务端

第一步:创建Web Project(HessianServer),并将hessian-3.2.1.jar放入WEB-INF/lib文件夹下。

第二步:创建User类,注意:实现Serializable接口

 

[java] ​​view plain​​ ​​copy​​

  1. package com.mahc.hessian.domain;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class User implements Serializable{  
  6.   
  7.     private String name;  
  8.     private Integer age;  
  9.   
  10.     public User() {  
  11.         super();  
  12.     }  
  13.       
  14.     public User(String name, Integer age) {  
  15.         super();  
  16.         this.name = name;  
  17.         this.age = age;  
  18.     }  
  19.   
  20.     public String getName() {  
  21.         return name;  
  22.     }  
  23.     public void setName(String name) {  
  24.         this.name = name;  
  25.     }  
  26.     public Integer getAge() {  
  27.         return age;  
  28.     }  
  29.     public void setAge(Integer age) {  
  30.         this.age = age;  
  31.     }  
  32.       
  33. }  

 

 

 

第三步:创建接口IBasicApi

[java] ​​view plain​​ ​​copy​​

  1. package com.mahc.hessian;  
  2.   
  3. import com.mahc.hessian.domain.User;  
  4.   
  5. public interface IBasicApi {  
  6.   
  7. /* 设置用户名 */
  8.     public boolean setUserName(String name);  
  9.       
  10. /* 获取问候 */
  11.     public String sayHello();  
  12.       
  13. /* 获取用户信息 */
  14.     public User getUser();  
  15.       
  16. }  

 

第四步:创建实现IBasicApi的BasicService

 

[java] ​​view plain​​ ​​copy​​

  1. package com.mahc.hessian;  
  2.   
  3. import com.mahc.hessian.domain.User;  
  4.   
  5. public class BasicService implements IBasicApi{  
  6.   
  7.     private String name;  
  8.       
  9. @Override
  10.     public boolean setUserName(String name) {  
  11.         this.name = name;  
  12.         return false;  
  13.     }  
  14.   
  15. @Override
  16.     public String sayHello() {  
  17.         return "Hello "+ name+",Welcome to Hessian!";  
  18.     }  
  19.   
  20. @Override
  21.     public User getUser() {  
  22.         return new User(name, 23);  
  23.     }  
  24. }  

 

第五步:配置WEB-INF下的web.xml

 

[java] ​​view plain​​ ​​copy​​

  1. <!-- Hessian在web.xml上的配置 -->  
  2.   <servlet>  
  3.     <servlet-name>HessianServlet</servlet-name>  
  4.     <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>  
  5.     <init-param>  
  6.         <param-name>service-class</param-name>  
  7.         <param-value>com.mahc.hessian.BasicService</param-value>  
  8.     </init-param>  
  9.   </servlet>  
  10.   <servlet-mapping>  
  11.     <servlet-name>HessianServlet</servlet-name>  
  12.     <url-pattern>/api/service</url-pattern>  
  13.   </servlet-mapping>  

 

Hessian客户端

 

第一步:创建Java Project(HessianClient),并将hessian-3.2.1.jar放入lib文件夹下

 

第二步:创建与服务端一致的com.mahc.hessian.domain.User和com.mahc.hessian.IBasicApi

 

第三步:创建客户端测试

[java] ​​view plain​​ ​​copy​​

  1. public class ClientTest {  
  2.   
  3.     public static void main(String[] args) throws MalformedURLException {  
  4.           
  5. "http://localhost:8080/HessianServer/api/service";  
  6.           
  7.         HessianProxyFactory factory = new HessianProxyFactory();  
  8.         IBasicApi api = (IBasicApi) factory.create(IBasicApi.class, url);  
  9. "mahc");  
  10.         System.out.println(api.sayHello());  
  11.         System.out.println(api.getUser().getName());  
  12.         System.out.println(api.getUser().getAge());  
  13.           
  14.     }  
  15. }  

 

 

第四步:部署HessianServer,启动Tomcat,运行ClientTest。查看运行结果。

 

Hessian与Spring整合的例子

/HessianServer/WebRoot/WEB-INF/lib/aopalliance-1.0.jar

/HessianServer/WebRoot/WEB-INF/lib/commons-logging-1.1.3.jar

/HessianServer/WebRoot/WEB-INF/lib/log4j-1.2.9.jar

/HessianServer/WebRoot/WEB-INF/lib/spring-aop-3.2.0.M1.jar

/HessianServer/WebRoot/WEB-INF/lib/spring-asm-3.2.0.M1.jar

/HessianServer/WebRoot/WEB-INF/lib/spring-beans-3.2.0.M1.jar

/HessianServer/WebRoot/WEB-INF/lib/spring-context-3.2.0.M1.jar

/HessianServer/WebRoot/WEB-INF/lib/spring-core-3.2.0.M1.jar

/HessianServer/WebRoot/WEB-INF/lib/spring-expression-3.2.0.M1.jar

/HessianServer/WebRoot/WEB-INF/lib/spring-jdbc-3.2.0.M1.jar

/HessianServer/WebRoot/WEB-INF/lib/spring-jms-3.2.0.M1.jar

/HessianServer/WebRoot/WEB-INF/lib/spring-web-3.2.0.M1.jar

/HessianServer/WebRoot/WEB-INF/lib/spring-webmvc-3.2.0.M1.jar

第一步:添加所需要的jar包,编辑web.xml

[html] ​​view plain​​ ​​copy​​

  1. <!-- Hessian与Spring整合时在web.xml上的配置 -->
  2.   <servlet>  
  3.     <servlet-name>HessionRemoteServlet</servlet-name>  
  4.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  5.     <init-param>  
  6.         <param-name>contextConfigLocation</param-name>  
  7.         <param-value>classpath:hessianServer-servlet.xml</param-value>  
  8.     </init-param>  
  9.   </servlet>  
  10.   <servlet-mapping>  
  11.     <servlet-name>HessionRemoteServlet</servlet-name>  
  12.     <url-pattern>/remote/api/*</url-pattern>  
  13.   </servlet-mapping>  

 

第二步:在src/创建hessianServer-servlet.xml

 

       初始化DispatcherServlet 时,该框架在 web 应用程序WEB-INF目录中寻找一个名为[servlet-名称]-servlet.xml的文件,并在那里定义相关的Beans,重写在全局中定义的任何Beans,像下面的web.xml中的代码,对应的是dispatcher-servlet.xml;当然也可以使用<init-param>元素,手动指定配置文件的路径;

【自定义配置文件位置】

 

[plain] ​​view plain​​ ​​copy​​

  1. <init-param>  
  2.       <description>加载/WEB-INF/spring-mvc/目录下的所有XML作为Spring MVC的配置文件</description>  
  3.       <param-name>contextConfigLocation</param-name>  
  4.       <param-value>/WEB-INF/spring-mvc/*.xml</param-value>  
  5.   </init-param>  

 

[html] ​​view plain​​ ​​copy​​

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  3. <beans>  
  4.     <bean id="basicService" class="com.mahc.hessian.BasicService" />  
  5.       
  6.     <bean name="/basicService"
  7. class="org.springframework.remoting.caucho.HessianServiceExporter">  
  8.         <property name="service" ref="basicService" />  
  9.         <property name="serviceInterface" value="com.mahc.hessian.IBasicApi" />  
  10.     </bean>  
  11. </beans>  

 

 

 

第三步:在HessianClient中ClientTest的url修改为:

http://localhost:8080/HessianServer/remote/api/basicService

[java] ​​view plain​​ ​​copy​​

  1. public static void main(String[] args) throws MalformedURLException {  
  2.           
  3. "http://localhost:8080/HessianServer/api/service";  
  4. "http://localhost:8080/HessianServer/remote/api/basicService";  
  5.           
  6.         HessianProxyFactory factory = new HessianProxyFactory();  
  7.         IBasicApi api = (IBasicApi) factory.create(IBasicApi.class, url);  
  8. "mahc");  
  9.         System.out.println(api.sayHello());  
  10.         System.out.println(api.getUser().getName());  
  11.         System.out.println(api.getUser().getAge());  
  12.           
  13.     }  

 

Hessian客户端也是用Spring的配置

 

第一步:在src下创建hessianClent.xml

[html] ​​view plain​​ ​​copy​​

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  3. <beans>  
  4.     <bean id="basicService"
  5. class="org.springframework.remoting.caucho.HessianProxyFactoryBean">  
  6.         <property name="serviceUrl" value="http://localhost:8080/HessianServer/remote/api/basicService"></property>  
  7.         <property name="serviceInterface" value="com.mahc.hessian.IBasicApi"></property>  
  8.     </bean>  
  9. </beans>  

 

第二步:修改HessianClient中的ClientTest

 

[java] ​​view plain​​ ​​copy​​

  1. public class ClientTest {  
  2.   
  3.     public static void main(String[] args) throws MalformedURLException {  
  4.           
  5. "http://localhost:8080/HessianServer/api/service";  
  6. "http://localhost:8080/HessianServer/remote/api/basicService";  
  7.           
  8. //      HessianProxyFactory factory = new HessianProxyFactory();
  9. //      IBasicApi api = (IBasicApi) factory.create(IBasicApi.class, url);
  10.           
  11.         ApplicationContext context = new ClassPathXmlApplicationContext(  
  12. "hessianClient.xml");  
  13. "basicService");  
  14. "mahc");  
  15.         System.out.println(api.sayHello());  
  16.         System.out.println(api.getUser().getName());  
  17.         System.out.println(api.getUser().getAge());  
  18.           
  19.     }  
  20. }  

 

标签:WEB,教程,HessianServer,api,使用,INF,public,Hessian,name
From: https://blog.51cto.com/u_13363083/5900501

相关文章

  • Eclipse 使用git 教程
    最近公司开发用上了egit,有些不太习惯于是整理如下与git原来的对比 多事思维导图,流量党请小心基础对比分支操作对比git管理的文件的状态 1)忽略[ignored]:仓库认为该文件......
  • Python threading Thread多线程的使用方法
    PythonthreadingThread多线程的使用方法目录​​PythonthreadingThread多线程的使用方法​​​​1.使用Threading模块创建线程​​​​2.Thread线程同步​​​​3.使用......
  • 作业收缴系统使用手册(自写开源小系统)
    ​​项目github地址​​​​作业收缴系统设计手册地址​​目录​​系统介绍:​​​​基本功能​​​​管理端​​​​信息管理​​​​1.修改密码​​​​2.学生添加(支持ex......
  • Flink-使用flink处理函数以及状态编程实现TopN案例
    7.5应用案例-TopN7.5.1使用ProcessAllWindowFunction场景例如,需要统计最近10秒内最热门的两个url链接,并且每5秒思路使用全窗口函数ProcessAllWindowFunction开......
  • UISegmentedControl分段控件使用
    UISegmentedControl分段控件代替了桌面OS上的单选按钮。不过它的选项个数非常有限,因为你的IOS设备屏幕有限。当我们需要使用选项非常少的单选按钮时它很合适。这个控件的可......
  • iOS6 中 Smart App Banners介绍和使用
    iOS6新增SmartAppBanners,也就是“智能App广告条”功能,其目的是可以让App开发者可以更容易以超链接的方式自由跳转,快速地引导用户到AppStore下载自己的App,将访问Web页面......
  • Pytest - 使用pytest-xdsit 插件运行后 logging 模块日志不会输出的问题
    背景:自己写的日志打印模块,用pytest-n=auto后日志就不会输出#tools.set_loggging.pyimportlogging.handlersimportsysfromconcurrent_log_handlerimportConc......
  • 使用Bookinfo应用测试Kuma服务网格
    最近,开源API管理平台Kong服务供应商近日放出了新的开源项目Kuma。本文尝试将bookinfo应用部署在Kuma网格中,以便帮助大家更好的理解Kuma项目。 Kuma是能用于管理服务......
  • 立足用户使用场景,BoCloud博云服务治理平台发布增强版
    近期,BoCloud博云服务治理平台BeyondMS基于市场情况反馈,发布了最新的增强版。BeyondMS服务治理平台是博云基于多种微服务架构的服务治理平台,提供经过生产验证的微服务框架+微......
  • .NET集成Yitter.IdGenerator实现分布式Id,并使用redis自动注册WorkerId
    参考文章多语言新雪花算法(SnowFlakeIdGenerator)添加依赖Install-PackageYitter.IdGenerator-Version1.0.14自动注册WorkerId的动态库下载这是一个go语言版本的......