Hessian学习总结(二)——使用hessian上传文件
2017-04-12 16:17
585 查看
hessian较早版本通过 byte[] 进行文件传输;4.0之后支持 InputStream 作为参数或返回值进行传输。
注意:hessian会读取整个文件,如果文件过大,会导致JVM内存溢出。可以通过控制上传文件的大小,设置合理的JVM参数,以及采用随机读取方式来解决。
到此,服务端的编写就完成了,部署FileUploader到Tomcat服务器,启动Tomcat服务器,在浏览器地址栏输入:http://localhost:8080/FileUploader/FileUploadService,查看是否可以调用。
看到这样的运行结果就说明Hessian服务器的测试通过。
运行FileUploaderClient客户端,就可以将文件"Shiro教程.pdf"上传到服务器上的指定存储目录了,如下图所示:
注意:hessian会读取整个文件,如果文件过大,会导致JVM内存溢出。可以通过控制上传文件的大小,设置合理的JVM参数,以及采用随机读取方式来解决。
一、创建Hessian服务端
创建一个FileUploader Web项目作为文件上传的服务端,如下图所示:1. 1、创建文件上传服务接口FileUploadServiceI
FileUploadServiceI接口代码如下:1 package file.upload.service; 2 3 import java.io.InputStream; 4 5 /** 6 * <p>ClassName: FileUploadServiceI<p> 7 * <p>Description: 文件上传服务接口<p> 8 * @author xudp 9 * @version 1.0 V 10 * @createTime 2014-8-8 上午10:41:27 11 */ 12 public interface FileUploadServiceI { 13 14 public void upload(String filename, InputStream data); 15 }
1.2. 实现文件上传服务接口FileUploadServiceI
FileUploadServiceImpl类的代码如下:1 package file.upload.service.impl; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 9 import file.upload.service.FileUploadServiceI; 10 11 /** 12 * <p>ClassName: FileUploadServiceImpl<p> 13 * <p>Description: FileUploadServiceI文件上传接口的具体实现类<p> 14 * @author xudp 15 * @version 1.0 V 16 * @createTime 2014-8-8 上午10:42:43 17 */ 18 public class FileUploadServiceImpl implements FileUploadServiceI { 19 20 /* (non-Javadoc) 21 * @MethodName upload 22 * @Description 上传文件 23 * @author xudp 24 * @param filename 上传的文件名 25 * @param data 上传的文件的输入流 26 * @see file.upload.service.FileUploadServiceI#upload(java.lang.String, java.io.InputStream) 27 */ 28 public void upload(String filename, InputStream data) { 29 BufferedInputStream bis = null; 30 BufferedOutputStream bos = null; 31 try { 32 //获取客户端传递的InputStream 33 bis = new BufferedInputStream(data); 34 //创建文件输出流 35 bos = new BufferedOutputStream(new FileOutputStream( 36 "E:/fileUpload/" + filename)); 37 byte[] buffer = new byte[8192]; 38 int r = bis.read(buffer, 0, buffer.length); 39 while (r > 0) { 40 bos.write(buffer, 0, r); 41 r = bis.read(buffer, 0, buffer.length); 42 } 43 System.out.println("-------文件上传成功!-------------"); 44 } catch (IOException e) { 45 throw new RuntimeException(e); 46 } finally { 47 if (bos != null) { 48 try { 49 bos.close(); 50 } catch (IOException e) { 51 throw new RuntimeException(e); 52 } 53 } 54 if (bis != null) { 55 try { 56 bis.close(); 57 } catch (IOException e) { 58 throw new RuntimeException(e); 59 } 60 } 61 } 62 } 63 64 }
1.3、在web.xml中配置HessianServlet
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7 <welcome-file-list> 8 <welcome-file>index.jsp</welcome-file> 9 </welcome-file-list> 10 11 <servlet> 12 <servlet-name>FileUploadService</servlet-name> 13 <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class> 14 <init-param> 15 <!-- home-class也可以写为service-class --> 16 <param-name>home-class</param-name> 17 <!-- 服务器对接口的现实,供客户端调用 --> 18 <param-value>file.upload.service.impl.FileUploadServiceImpl</param-value> 19 </init-param> 20 <init-param> 21 22 <!-- 23 提供给客户端调用的接口,这里的home-api配置不是必须的,可以不配置 24 --> 25 <!--home-api也可以写为api-class --> 26 <param-name>home-api</param-name> 27 <!-- 客户端接口 --> 28 <param-value>file.upload.service.FileUploadServiceI</param-value> 29 </init-param> 30 </servlet> 31 <servlet-mapping> 32 <servlet-name>FileUploadService</servlet-name> 33 <url-pattern>/FileUploadService</url-pattern> 34 </servlet-mapping> 35 36 </web-app>
到此,服务端的编写就完成了,部署FileUploader到Tomcat服务器,启动Tomcat服务器,在浏览器地址栏输入:http://localhost:8080/FileUploader/FileUploadService,查看是否可以调用。
看到这样的运行结果就说明Hessian服务器的测试通过。
二、创建文件上传客户端
创建一个普通的java项目作为文件上传客户端,添加对hessian-4.0.37.jar的引用,同时将Hessian服务端的FileUploadServiceI接口打包成jar包提供给文件上传客户端调用,如下图所示:2.1、编写文件上传客户端
FileUploaderClient类的代码如下:1 package file.uplaod.client; 2 3 import java.io.BufferedInputStream; 4 import java.io.FileInputStream; 5 import java.io.InputStream; 6 import com.caucho.hessian.client.HessianProxyFactory; 7 import file.upload.service.FileUploadServiceI; 8 9 /** 10 * <p>ClassName: FileUploaderClient<p> 11 * <p>Description: 文件上传客户端<p> 12 * @author xudp 13 * @version 1.0 V 14 * @createTime 2014-8-8 上午10:00:13 15 */ 16 public class FileUploaderClient { 17 //Hessian服务的url 18 private static final String url = "http://gacl:8080/FileUploader/FileUploadService"; 19 20 public static void main(String[] args) throws Exception { 21 //创建HessianProxyFactory实例 22 HessianProxyFactory factory = new HessianProxyFactory(); 23 //获得Hessian服务的远程引用 24 FileUploadServiceI uploader = (FileUploadServiceI) factory.create(FileUploadServiceI.class, url); 25 //读取需要上传的文件 26 InputStream data = new BufferedInputStream(new FileInputStream("E:/开发资料/电子书/Shiro教程.pdf")); 27 //调用远程服务上传文件。 28 uploader.upload("Shiro教程.pdf", data); 29 } 30 }
运行FileUploaderClient客户端,就可以将文件"Shiro教程.pdf"上传到服务器上的指定存储目录了,如下图所示:
相关文章推荐
- Struts学习总结(五)---使用Struts2实现单个文件上传
- cURL 学习笔记与总结(4)使用 cURL 从 ftp 上下载文件与上传文件到 ftp
- \t\tstruts2 学习总结(上传文件,解决乱码,通配符的使用,整合fck)
- struts2 学习总结(上传文件,解决乱码,通配符的使用,整合fck)
- Asp.NET大文件上传组件开发总结(六)---大文件上传组件使用说明
- 【转】Asp.NET大文件上传组件开发总结(六)---大文件上传组件使用说明
- 【转载】struts 学习总结 ---- 文件上传与下载
- 传智播客erp项目学习,了解软件开发流程,使用apache的文件上传组件
- 使用万网服务器上传不了图片和文件总结
- gitlab使用过程中遇到大文件上传或下载失败的问题,总结一下
- [总结 学习] 用php处理文件上传
- WCF 学习总结7 -- 流模式(Streaming)实现文件上传
- smartupload上传文件学习总结
- struts 学习总结 ---- 文件上传与下载
- 【学习点滴-php】使用phpExcel类导出excel文件相关问题总结
- JSP Servlet学习笔记——使用fileupload上传文件
- Oracle学习(8)--Linux系统的VI编辑器常用命令、linux中使用ftp上传文件
- Servlet3.0学习总结(三)——基于Servlet3.0的文件上传
- SpringMVC学习总结(五)——SpringMVC文件上传例子