赞
踩
hessian较早版本通过 byte[] 进行文件传输;4.0之后支持 InputStream 作为参数或返回值进行传输。注意:hessian会读取整个文件,如果文件过大,会导致JVM内存溢出。可以通过控制上传文件的大小,设置合理的JVM参数,以及采用随机读取方式来解决。
一:创建hessian服务端:
创建一个web项目作为文件上传的服务端,命名为FileUploader,引入所需要的jar包:
1. 1、创建文件上传服务接口IFileUploadService
IFileUploadService接口代码如下:
packagefile.upload.service;importjava.io.InputStream;public interfaceIFileUploadService {public voidupload(String filename, InputStream data);
}
1.2实现文件上传服务接口IFileUploadService
其实现类代码如下:
packagefile.upload.service.Impl;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importfile.upload.service.IFileUploadService;public class IFileUploadServiceImpl implementsIFileUploadService {
@Overridepublic voidupload(String filename, InputStream data) {
BufferedInputStream bis= null;
BufferedOutputStream bos= null;try{//获取客户端传递的InputStream
bis = newBufferedInputStream(data);//创建文件输出流
bos = new BufferedOutputStream(new FileOutputStream("E:/"+filename));byte[] buffer = new byte[8192];intr;try{
r= bis.read(buffer, 0, buffer.length);while(r>0){
bos.write(buffer,0, r);
r= bis.read(buffer, 0, buffer.length);
}
System.out.println("-------文件上传成功!-------------");
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}catch(FileNotFoundException e) {//TODO Auto-generated catch block
throw newRuntimeException(e);
}finally{if (bos != null) {try{
bos.close();
}catch(IOException e) {throw newRuntimeException(e);
}
}if (bis != null) {try{
bis.close();
}catch(IOException e) {throw newRuntimeException(e);
}
}
}
}
}
1.3在web.xml中配置HessianServlet
FileUploader
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
FileUploadService
com.caucho.hessian.server.HessianServlet
service-class
file.upload.service.Impl.IFileUploadServiceImpl
home-api
file.upload.service.IFileUploadService
FileUploadService
/FileUploadService
到此,服务端的编写就完成了,部署FileUploader到Tomcat服务器,启动Tomcat服务器,在浏览器地址栏输入:http://localhost:8080/FileUploader/FileUploadService,查看是否可以调用。
出现此结果,说明hessian服务器测试通过
二:创建文件上传客户端
创建一个普通的java项目作为文件上传客户端,添加对hessian-4.0.51.jar的引用,同时将Hessian服务端的FileUploadServiceI接口打包成jar包提供给文件上传客户端调用,如下图所示:
2.1、编写文件上传客户端
FileUploaderClient类的代码如下:
packagefile.uplaod.client;importjava.io.BufferedInputStream;importjava.io.FileInputStream;importjava.io.InputStream;importjava.net.MalformedURLException;importcom.caucho.hessian.client.HessianProxyFactory;importfile.upload.service.IFileUploadService;public classFileUploaderClient {//Hessian服务的url
public static final String url="http://localhost:8088/FileUploader/FileUploadService";public static void main(String[] args) throwsException {//创建HessianProxyFactory实例
HessianProxyFactory factory = newHessianProxyFactory();//获得Hessian服务的远程引用(调用server)
IFileUploadService uploader = (IFileUploadService) factory.create(IFileUploadService.class, url);//读取需要上传的文件
InputStream data = new BufferedInputStream(new FileInputStream("E:/QQ下载文档/论文/Spring实战第4版.pdf"));//调用远程服务上传文件。
uploader.upload("Spring实战第4版.pdf", data);
}
}
编译运行服务端与客户端:
最后结果:
原文参考:http://www.cnblogs.com/xdp-gacl/p/3898100.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。