Hessian学习总结(二)——使用hessian上传文件
来源:互联网 发布:手机h5游戏源码 编辑:程序博客网 时间:2024/05/01 23:02
hessian较早版本通过 byte[] 进行文件传输;4.0之后支持 InputStream 作为参数或返回值进行传输。
注意:hessian会读取整个文件,如果文件过大,会导致JVM内存溢出。可以通过控制上传文件的大小,设置合理的JVM参数,以及采用随机读取方式来解决。
注意: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 V10 * @createTime 2014-8-8 上午10:41:2711 */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 xudp15 * @version 1.0 V16 * @createTime 2014-8-8 上午10:42:4317 */18 public class FileUploadServiceImpl implements FileUploadServiceI {19 20 /* (non-Javadoc)21 * @MethodName upload22 * @Description 上传文件23 * @author xudp24 * @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 //获取客户端传递的InputStream33 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 xudp13 * @version 1.0 V14 * @createTime 2014-8-8 上午10:00:1315 */16 public class FileUploaderClient {17 //Hessian服务的url18 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"上传到服务器上的指定存储目录了,如下图所示:
0 0
- Hessian学习总结(二)——使用hessian上传文件
- Hessian知识学习总结(二)——Hessian的helloworld
- Hessian学习总结(一)——Hessian入门
- Hessian学习总结(一)——Hessian入门
- Hessian学习(1)——基本使用
- Hessian学习(4)——正常使用
- hessian上传文件
- Hessian知识学习总结(三)——Spring + Hessian + Spring MVC
- Hessian学习总结
- Hessian学习总结
- Hessian 使用示例总结
- Hessian知识学习总结(一)——基础知识
- 【Hessian】hessian学习
- Hessian学习(3)——客户端使用spring
- Flex + Hessian 学习笔记(二)
- Hessian学习总结(一)
- 转载 hessian学习总结
- hessian总结
- EasyUI学习总结(四)——parser源码分析
- EasyUI学习总结(六)——EasyUI布局
- jquery checkbox 全选 取消 demo
- Hessian学习总结(一)——Hessian入门
- div样式
- Hessian学习总结(二)——使用hessian上传文件
- 关于myeclipse8.5中配置tomcat7的新手弯路记录
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
- 查看公司工商注册信息
- application.property
- Android开发中遇到的问题(一)——Android模拟器端口被占用问题的解决办法
- 老代码备份
- Android开发学习总结(一)——搭建最新版本的Android开发环境
- Android开发学习总结(二)——使用Android Studio搭建Android集成开发环境