• hessian学习


    hessian学习

    hessian是一个采用二进制格式传输的服务框架,相对传统soap web service,更轻量,更快速。官网地址:http://hessian.caucho.com/

    目前已经支持N多语言,包括:java/c#/flex/php/ruby...

    maven的依赖项如下:

    1 <dependency> 2     <groupId>com.caucho</groupId> 3     <artifactId>hessian</artifactId> 4     <version>4.0.37</version> 5 </dependency>

    入门示例:

    一、服务端开发

    1.1 先建服务接口

    1 package yjmyzz.cnblogs.com.service; 2 3 public interface HelloService { 4     5     public String helloWorld(String message); 6 }

    1.2 提供服务实现

     1 package yjmyzz.cnblogs.com.service.impl;  2  3 import yjmyzz.cnblogs.com.service.HelloService;  4  5 public class HelloServiceImpl implements HelloService {  6  7     @Override  8     public String helloWorld(String message) {  9         return "hello," + message; 10     } 11 12 }

    1.3 修改web.xml

     1 <!DOCTYPE web-app PUBLIC  2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  3  "http://java.sun.com/dtd/web-app_2_3.dtd" >  4  5 <web-app>  6     <display-name>hessian-showcase</display-name>  7  8     <welcome-file-list>  9         <welcome-file>index.jsp</welcome-file> 10     </welcome-file-list> 11 12     <servlet> 13         <servlet-name>hessian-service</servlet-name> 14         15         <servlet-class> 16             com.caucho.hessian.server.HessianServlet 17         </servlet-class> 18         19         <init-param>            20             <param-name>home-class</param-name>            21             <param-value> 22                 <!-- 服务实现类 --> 23                 yjmyzz.cnblogs.com.service.impl.HelloServiceImpl 24             </param-value> 25         </init-param> 26 27         <init-param>            28             <param-name>home-api</param-name> 29             <!-- 服务接口 --> 30             <param-value>yjmyzz.cnblogs.com.service.HelloService</param-value> 31         </init-param> 32 33     </servlet> 34 35     <servlet-mapping> 36         <servlet-name>hessian-service</servlet-name> 37         <url-pattern>/hessian</url-pattern> 38     </servlet-mapping> 39 40 </web-app>

    部署到tomcat或其它web容器中即可。 1.4 导出服务接口jar包

    最终服务是提供给客户端调用的,客户端必须知道服务的接口信息(包括接口方法中的传输dto定义),所以得将这些java文件导出成jar,提供给调用方。

    方法很简单:eclipse中在接口package(包括dto对应的package)上右击,选择Export

    再选择Jar File

    二、客户端调用

    同样先添加maven的hessian依赖项,同时引入上一步导出的服务接口jar包,然后参考下面的示例代码:

     1 import java.net.MalformedURLException;  2 import org.junit.Test;  3 import yjmyzz.cnblogs.com.service.HelloService;  4 import com.caucho.hessian.client.HessianProxyFactory;  5  6  7 public class ServiceTest {  8     @Test  9     public void testService() throws MalformedURLException {        10 11         String url = "http://localhost:8080/hessian-showcase/hessian"; 12         System.out.println(url); 13         14         HessianProxyFactory factory = new HessianProxyFactory(); 15         HelloService helloService = (HelloService) factory.create(HelloService.class, url); 16         System.out.println(helloService.helloWorld("jimmy")); 17 18     } 19 }

    三、与Spring的整合

    spring-web包里提供的org.springframework.remoting.caucho.HessianServiceExporter类,可以将普通方法导出成hessian服务。关键是解决org.springframework.web.servlet.DispatcherServlet的url访问路径问题,一般情况下,我们是这样配置的

     1     <!-- spring mvc -->  2     <servlet>  3         <servlet-name>appServlet</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:servlet-context.xml</param-value>  8         </init-param>  9         <load-on-startup>1</load-on-startup> 10         <async-supported>true</async-supported> 11     </servlet> 12 13     <servlet-mapping> 14         <servlet-name>appServlet</servlet-name> 15         <url-pattern>/</url-pattern> 16     </servlet-mapping>

    这是spring mvc的入口,拦截所有访问路径,可以把这一节再复制一份,追加在后面,只不过url-pattern指定成特定的规则

     1 <!-- spring mvc -->  2     <servlet>  3         <servlet-name>appServlet</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:servlet-context.xml</param-value>  8         </init-param>  9         <load-on-startup>1</load-on-startup> 10         <async-supported>true</async-supported> 11     </servlet> 12 13     <servlet-mapping> 14         <servlet-name>appServlet</servlet-name> 15         <url-pattern>/</url-pattern> 16     </servlet-mapping> 17     18     19     <!-- hessian --> 20     <servlet> 21         <servlet-name>hessianServlet</servlet-name> 22         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 23         <init-param> 24             <param-name>contextConfigLocation</param-name> 25             <param-value>classpath:hessian-context.xml</param-value> 26         </init-param> 27         <load-on-startup>1</load-on-startup>        28     </servlet> 29 30     <servlet-mapping> 31         <servlet-name>hessianServlet</servlet-name> 32         <url-pattern>/hessian/*</url-pattern> 33     </servlet-mapping>

    这样,所有以/hessian/开头的访问路径,约定成hessian服务地址,详细配置在hessian-context.xml中,内容如下:

     1 <?xml version="1.0" encoding="UTF-8"?>  2 <beans xmlns="http://www.springframework.org/schema/beans"  3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"  4     xmlns:context="http://www.springframework.org/schema/context"  5     xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd  6         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  7         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  8  9     10     <bean id="helloServiceImpl" class="com.cnblogs.yjmyzz.service.hessian.support.HelloServiceImpl" /> 11     12     <!-- 使用HessianServiceExporter 将普通bean导出成Hessian服务 --> 13     <bean name="/service" 14         class="org.springframework.remoting.caucho.HessianServiceExporter">        15         <property name="service" ref="helloServiceImpl" /> 16         <!-- Hessian服务的接口 --> 17         <property name="serviceInterface" value="com.cnblogs.yjmyzz.service.hessian.HelloService" /> 18     </bean> 19 20 </beans>

    这样,就能直接以http://localhost:8080/spring-mvc4-rest/hessian/service 发布hessian服务了

    再来看看客户端如何整合,类似的,我们需要一个配置文件,比如:hessian-client.xml,内容如下:

     1 <?xml version="1.0" encoding="UTF-8"?>  2 <beans xmlns="http://www.springframework.org/schema/beans"  3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  4     xsi:schemaLocation="http://www.springframework.org/schema/beans  5         http://www.springframework.org/schema/beans/spring-beans.xsd  6         http://www.springframework.org/schema/context  7         http://www.springframework.org/schema/context/spring-context.xsd">  8  9     <bean id="hessianClient" 10         class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> 11         <property name="serviceUrl"> 12             <value>http://localhost:8080/spring-mvc4-rest/hessian/service</value> 13         </property> 14         <property name="serviceInterface"> 15             <value>com.cnblogs.yjmyzz.service.hessian.HelloService</value> 16         </property> 17     </bean> 18 19 </beans>

    调用示例:

     1 package com.cnblogs.yjmyzz.test;  2 import java.net.MalformedURLException;  3  4 import org.junit.Test;  5 import org.springframework.context.ApplicationContext;  6 import org.springframework.context.support.ClassPathXmlApplicationContext;  7  8 import com.cnblogs.yjmyzz.service.hessian.HelloService;  9 10 public class HessianServiceTest {    11     @SuppressWarnings("resource") 12     @Test 13     public void testService() throws MalformedURLException { 14         ApplicationContext context = new ClassPathXmlApplicationContext( 15                 "hessian-client.xml"); 16         HelloService hello = (HelloService) context.getBean("hessianClient"); 17         System.out.println(hello.helloWorld("jimmy.yang")); 18     } 19 }

    示例源码地址:http://code.taobao.org/p/spring-mvc4-rest/src/

    转载:http://www.cnblogs.com/yjmyzz/p/hessian-helloworld.html

  • 相关阅读:
    android studio学习----Android Studio导入github下载的工程--替换方法
    python+selenium 发送邮件
    vue 操作列的自定义
    vue作用域插槽实践
    vue左侧菜单的实现
    Django 解决跨域
    关于 with 语句
    docker
    python连接 ssh
    数据库建表 外键
  • 原文地址:https://www.cnblogs.com/lippeixian/p/5027309.html
Copyright © 2020-2023  润新知