【hessian】 二、servlet的hessian实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qiaziliping/article/details/81100042

前言:
hessian介绍可以看第一篇博文:
https://blog.csdn.net/qiaziliping/article/details/81069265

hessian服务端


1、java项目映入hessian的jar包,maven项目直接配置pom文件
2、web.xml配置 HessianServlet
3、接口,实现类,实体类

服务端demo结构:
这里写图片描述

  • hessian 服务端 web.xml 配置如下:
<servlet>
     <servlet-name>Hello</servlet-name>  
     <servlet-class>  
        com.caucho.hessian.server.HessianServlet  
     </servlet-class>
     <!-- 接口路径 -->
     <init-param>  
        <param-name>home-api</param-name>  
        <param-value>com.hession.service.ILogPerson</param-value>  
     </init-param>
     <!-- 实现类路径 -->
     <init-param>  
        <param-name>home-class</param-name>  
        <param-value>com.hession.service.impl.LogPerson</param-value>  
     </init-param>        
     <load-on-startup>1</load-on-startup>  
    </servlet>
    <servlet-mapping>  
        <servlet-name>Hello</servlet-name>  
        <url-pattern>/Helloxx</url-pattern>  
    </servlet-mapping> 
  • 实体类
    注:实体类必须实现Serializable接口,必须序列化
package com.hession.model;
import java.io.Serializable;
public class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    private String firstName;
    private String lastName;

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    @Override
    public String toString() {
        return "Person [firstName=" + firstName + ", lastName=" + lastName + "]";
    }
}
  • hessian 服务端 接口
package com.hession.service;

import java.io.InputStream;

import com.hession.model.Person;

/**
 * 定义远程访问接口,供导出远程服务使用
 * @date 2014-9-3 - 上午11:38:52
 * @Description
 */
public interface ILogPerson {

    public Object getPerson(Person person);

    void upload(String filename, InputStream data);
}
  • hessian 服务端 实现类
package com.hession.service.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
import com.hession.model.Person;
import com.hession.service.ILogPerson;

/**
 * @Description 远程服务接口的实现类
 */
public class LogPerson implements ILogPerson {

    private static Log log = LogFactory.getLog(FileUploader.class);

    @Override
    public Object getPerson(Person person) {
        Map<String, Object> map = new HashMap<String, Object>();
        List<Person> list = new ArrayList<Person>();
        for (int i = 0; i < 10; i++) {
            Person person1 = new Person();
            person1.setFirstName("李平" + i);
            person1.setLastName("恰子" + i);
            list.add(person1);
        }
        map.put("list", list);
        return map;
    }

    // 测试文件上传接口
    @Override
    public void upload(String filename, InputStream data) {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(data);

            String path = "D:\\testUpload\\";
            File file = new File(path);
            if (!file.exists()) {
                file.mkdirs();
            }

            bos = new BufferedOutputStream(new FileOutputStream(path + filename));
            byte[] buffer = new byte[8192];
            int r = bis.read(buffer, 0, buffer.length);
            while (r > 0) {
                bos.write(buffer, 0, r);
                r = bis.read(buffer, 0, buffer.length);
            }
        } catch (IOException e) {
            log.error("File upload exception: ", e);
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    log.error("Closing output exception: ", e);
                }
            }
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    log.error("Closing input exception: ", e);
                }
            }
        }
    }
}

hessian客户端


1、引入hessian.jar
2、编写和服务端一样的接口,包名最好也一样(可以不一样,但是方法名称和参数必须一样)
3、编写和服务端实体类保持一致,包名最好一样(可以不一样,但是方法名称和参数必须一样)

客户端项目结构
这里写图片描述

客户端我直接用Junit测试的
Junit 测试类如下:

import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import com.caucho.hessian.client.HessianProxyFactory;
import com.hession.model.Person;

public class HessianTest {
    @SuppressWarnings("unchecked")
    @Test
    public void testServletHession() throws MalformedURLException {
        Person person = new Person();
        String url = "http://localhost:9080/spring-hessain-server/Helloxx";
        HessianProxyFactory factory = new HessianProxyFactory();
        ILogPerson logPerson = (ILogPerson) factory.create(ILogPerson.class, url);
        Map<String, Object> map = new HashMap<String, Object>();
        map = (Map<String, Object>) logPerson.getPerson(person);
        System.out.println("--->:" + map);
    }

    /**
     * servlet hessian上传文件
     */
    @Test
    public void testHessionXml() throws MalformedURLException, FileNotFoundException {
        final String url = "http://localhost:9080/spring-hessain-server/Helloxx";

        HessianProxyFactory factory = new HessianProxyFactory();
        ILogPerson uploader = (ILogPerson) factory.create(ILogPerson.class, url);
        InputStream data =
                new BufferedInputStream(new FileInputStream("C:\\Users\\liping\\Desktop\\aaa.png"));
        uploader.upload("试试图片00.png", data);
    }
}

是不是很简单,大家快试试吧

猜你喜欢

转载自blog.csdn.net/qiaziliping/article/details/81100042
今日推荐