前言:
hessian介绍可以看第一篇博文:
https://blog.youkuaiyun.com/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);
}
}
是不是很简单,大家快试试吧