Hessian Hello World

1.用例图:

这里写图片描述

2.时序图:

这里写图片描述

3.梗概:
a.动态代理:被调用者带有接口的定义,接口的实现在调用者处,被调用者通过动态代理触发网络IO,请求调用者查找对应的接口并调用
b.网络IO:远程调用的本质是分离思想,把计算的服务分离,那么分离则需要一个媒介沟通,那么这个媒介可以看出是网络IO(本地的两个进程也可以看成是网络IO传送)。
c.序列化方式和协议:不同的远程调用可能会使用到不同序列化方法和传送协议。

4.例子:
a.编写服务端(被调用者):
pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>hessian_server</groupId>
    <artifactId>hessian_server</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.caucho</groupId>
            <artifactId>hessian</artifactId>
            <version>4.0.38</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.7</version>
                <configuration>
                    <connectors>
                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                            <port>8080</port>
                            <maxIdleTime>30000</maxIdleTime>
                        </connector>
                    </connectors>
                    <webAppSourceDirectory>${project.basedir}/web
                    </webAppSourceDirectory>
                    <contextPath>/web</contextPath>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

~主要注意引入hessian的依赖

定义接口:

package org.gaaidou.service;

public interface PersonService {
    String say(String name);
}

~这个接口调用者和被调用者需要用到同一个接口

接口的实现:

package org.gaaidou.service.impl;

import org.gaaidou.service.PersonService;

public class PersonServiceImpl implements PersonService {

    public String say(String name) {
        System.out.println("传入参数:" + name);
        return "我的名字是" + name;
    }
}

编写web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>hessian</servlet-name>
        <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
        <init-param>
            <param-name>home-api</param-name><!--接口声明-->
            <param-value>org.gaaidou.service.PersonService</param-value>
        </init-param>
        <init-param>
            <param-name>home-class</param-name><!--接口实现-->
            <param-value>org.gaaidou.service.impl.PersonServiceImpl</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>hessian</servlet-name>
        <url-pattern>/hessian</url-pattern>
    </servlet-mapping>
</web-app>

~不难看出,hessian在这里通过home-api和home-class进行接口和实现的映射

整体代码结构:
这里写图片描述

2.编写客户端(调用者):
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>hessian_client</groupId>
    <artifactId>hessian_client</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.caucho</groupId>
            <artifactId>hessian</artifactId>
            <version>4.0.38</version>
        </dependency>
    </dependencies>
</project>

编写测试:

package org.gaaidou;

import com.caucho.hessian.client.HessianProxyFactory;
import org.gaaidou.service.PersonService;

import java.net.MalformedURLException;

public class Main {
    public static void main(String[] args) throws MalformedURLException {
        //hessian访问地址
        String url = "http://localhost:8080/web/hessian";

        //接口的动态代理工厂
        HessianProxyFactory factory = new HessianProxyFactory();
        PersonService personService = (PersonService) factory.create(PersonService.class, url);
        System.out.println(personService.say("Mike"));
    }
}

代码结构:

这里写图片描述

3.运行:
服务端用maven的jetty插件运行
客户端直接运行main函数

服务端运行结果:

这里写图片描述

客户端运行结果:

这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值