1. 程式人生 > >【hessian】 二、servlet的hessian例項

【hessian】 二、servlet的hessian例項

前言:
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);
    }
}

是不是很簡單,大家快試試吧