hessian上传文件

转载自:http://www.cnblogs.com/xdp-gacl/p/3898100.html

hessian较早版本通过 byte[] 进行文件传输;4.0之后支持 InputStream 作为参数或返回值进行传输。 
  注意:hessian会读取整个文件,如果文件过大,会导致JVM内存溢出。可以通过控制上传文件的大小,设置合理的JVM参数,以及采用随机读取方式来解决。

一、创建Hessian服务端

  创建一个FileUploader Web项目作为文件上传的服务端,如下图所示:

  

1. 1、创建文件上传服务接口FileUploadServiceI

  FileUploadServiceI接口代码如下:

package file.upload.service;

import java.io.InputStream;

/**
 * <p>ClassName: FileUploadServiceI<p>
 * <p>Description: 文件上传服务接口<p>
 * @author xudp
 * @version 1.0 V
 * @createTime 2014-8-8 上午10:41:27
 */
public interface FileUploadServiceI {

    public void upload(String filename, InputStream data);
}

1.2. 实现文件上传服务接口FileUploadServiceI

   FileUploadServiceImpl类的代码如下:


package file.upload.service.impl;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import file.upload.service.FileUploadServiceI;

/**
 * <p>ClassName: FileUploadServiceImpl<p>
 * <p>Description: FileUploadServiceI文件上传接口的具体实现类<p>
 * @author xudp
 * @version 1.0 V
 * @createTime 2014-8-8 上午10:42:43
 */
public class FileUploadServiceImpl implements FileUploadServiceI {

    /* (non-Javadoc)
     * @MethodName upload
     * @Description 上传文件
     * @author xudp
     * @param filename 上传的文件名
     * @param data 上传的文件的输入流
     * @see file.upload.service.FileUploadServiceI#upload(java.lang.String, java.io.InputStream)
     */
    public void upload(String filename, InputStream data) {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            //获取客户端传递的InputStream
            bis = new BufferedInputStream(data);
            //创建文件输出流
            bos = new BufferedOutputStream(new FileOutputStream(
                    "E:/fileUpload/" + 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);
            }
            System.out.println("-------文件上传成功!-------------");
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

}

1.3、在web.xml中配置HessianServlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
    <servlet-name>FileUploadService</servlet-name>
    <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
    <init-param>
    <!-- home-class也可以写为service-class -->
      <param-name>home-class</param-name>
      <!-- 服务器对接口的现实,供客户端调用 --> 
      <param-value>file.upload.service.impl.FileUploadServiceImpl</param-value>
    </init-param>
    <init-param>
    
    <!--
        提供给客户端调用的接口,这里的home-api配置不是必须的,可以不配置
    -->
    <!--home-api也可以写为api-class  -->
      <param-name>home-api</param-name>
      <!-- 客户端接口 -->
      <param-value>file.upload.service.FileUploadServiceI</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>FileUploadService</servlet-name>
    <url-pattern>/FileUploadService</url-pattern>
  </servlet-mapping>
  
</web-app>

 

 到此,服务端的编写就完成了,部署FileUploader到Tomcat服务器,启动Tomcat服务器,在浏览器地址栏输入:http://localhost:8080/FileUploader/FileUploadService,查看是否可以调用。

  

  看到这样的运行结果就说明Hessian服务器的测试通过。

二、创建文件上传客户端

  创建一个普通的java项目作为文件上传客户端,添加对hessian-4.0.37.jar的引用,同时将Hessian服务端的FileUploadServiceI接口打包成jar包提供给文件上传客户端调用,如下图所示:

 

2.1、编写文件上传客户端

  FileUploaderClient类的代码如下:

package file.uplaod.client;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import com.caucho.hessian.client.HessianProxyFactory;
import file.upload.service.FileUploadServiceI;

/**
 * <p>ClassName: FileUploaderClient<p>
 * <p>Description: 文件上传客户端<p>
 * @author xudp
 * @version 1.0 V
 * @createTime 2014-8-8 上午10:00:13
 */
public class FileUploaderClient {
     //Hessian服务的url
     private static final String url = "http://gacl:8080/FileUploader/FileUploadService";

    public static void main(String[] args) throws Exception {
        //创建HessianProxyFactory实例
        HessianProxyFactory factory = new HessianProxyFactory();
        //获得Hessian服务的远程引用
        FileUploadServiceI uploader = (FileUploadServiceI) factory.create(FileUploadServiceI.class, url);
        //读取需要上传的文件
        InputStream data = new BufferedInputStream(new FileInputStream("E:/开发资料/电子书/Shiro教程.pdf"));
        //调用远程服务上传文件。
        uploader.upload("Shiro教程.pdf", data);
    }
}

  运行FileUploaderClient客户端,就可以将文件"Shiro教程.pdf"上传到服务器上的指定存储目录了,如下图所示:

  



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值