天天看點

【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】 二、servlet的hessian執行個體
  • 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 = L;
    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 = ; i < ; 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[];
            int r = bis.read(buffer, , buffer.length);
            while (r > ) {
                bos.write(buffer, , r);
                r = bis.read(buffer, , 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、編寫和服務端實體類保持一緻,包名最好一樣(可以不一樣,但是方法名稱和參數必須一樣)

用戶端項目結構

【hessian】 二、servlet的hessian執行個體

用戶端我直接用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);
    }
}
           

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

繼續閱讀