`

Hessian学习笔记之上传文件

    博客分类:
  • Java
 
阅读更多

      在Hessian学习笔记之Hessian实例这一篇中简单介绍了Hessian的一个入门实例,本篇主要是深入学习Hessian,即利用Hessian实现文件上传。

      1、服务端接口    

import java.io.InputStream;

/**
 * 文件上传服务接口
 *
 */

public interface FileUploadService {
   public void uploadFile(String filename,InputStream data);
}

  

    2、服务端接口具体实现    

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

/**
 * 文件上传服务端具体实现
 *
 */
public class FileUploadServiceImpl implements FileUploadService {
	@Override
	public void uploadFile(String filename, InputStream data) {
		String path = "D:/tools/LearningByMyself/hessian/" ;
		
		BufferedInputStream in = null ;
		BufferedOutputStream out = null ;
		
		try{
			//接收客户端上送的数据
			in = new BufferedInputStream(data);
			
			//创建文件输出流
			out = new BufferedOutputStream(new FileOutputStream(path + filename));
			
			byte[] buffer = new byte[10240];
			int read = in.read(buffer, 0, buffer.length);
			while(read > 0){
				out.write(buffer, 0, read);
				read = in.read(buffer, 0, buffer.length);
			}
			System.out.println("file upload successfully");
		}catch(IOException e){
			throw new RuntimeException(e);
		}finally{
			if(out != null){
				try{
					out.close();
				}catch(IOException e){
					throw new RuntimeException(e);
				}
			}
			if(in != null){
				try{
					in.close();
				}catch(IOException e){
					throw new RuntimeException(e);
				}
			}
		}

	}
}

  

    3、web.xml配置文件

<!-- 文件上传Begin-->
  <servlet>
     <servlet-name>fileUpload</servlet-name>
     <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
     <init-param>
         <param-name>service-class</param-name> <!-- service-class也可以写成home-class -->
         <param-value>com.zh.hessian.FileUploadServiceImpl</param-value> <!-- 服务器对应接口的实现 -->
     </init-param>
     
     <!-- 客户端的配置不是必须的,也可以不配置 -->
     <init-param>
         <param-name>api-class</param-name> <!-- 也可以写成home-api -->
         <param-value>com.zh.hessian.FileUploadService</param-value> <!-- 提供给客户端的接口 -->
     </init-param>     
  </servlet>
  <servlet-mapping>
     <servlet-name>fileUpload</servlet-name>
     <url-pattern>/fileUpload</url-pattern>
  </servlet-mapping>
  <!-- 文件上传End -->

  

    4、验证服务端是否可用

    启动Tomcat后,在浏览器中输入地址:http://localhost:8080/上下文名称/fileUpload。由于个人定义的上下文不一致,所以此处可根据自己的上下文定义具体修改。例如:本人这里定义的上下文是JavaDemo,所以在浏览器上输入:http://localhost:8080/JavaDemo/fileUpload,回车后,会出现如下结果:

Hessian Requires POST

    

    5、将服务端的接口文件打成jar包导入的客户端工程中

 

    6、客户端  

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;

import com.caucho.hessian.client.HessianProxyFactory;

public class FileUploadClient {
	//需要上传的文件
	private static final String path = "D:/papers/work_opt.txt" ;
	
	//Hessian服务的url
	private static final String url = "http://127.0.0.1:8080/JavaDemo/fileUpload" ;
	
	public static void main(String[] args) throws Exception{
		//创建HessianProxyFactory实例
		HessianProxyFactory factory = new HessianProxyFactory();
		
		//获得Hessian服务的远程引用
		FileUploadService upload = (FileUploadService) factory.create(FileUploadService.class, url);
		
		//读取需要上传的文件
		InputStream data = new BufferedInputStream(new FileInputStream(path));
        
		//调用文件上传服务
		upload.uploadFile("work_opt.txt", data);
	}
}

 

    7、测试

   启动服务后,运行客户端程序。本人最后的测试结果如下: file upload successfully。再到对应的本地目录中取查看,是否有对应的上传文件,此处就不再显示结果,因为每个人所定义的文件目录不一样。

1
1
分享到:
评论

相关推荐

    Hessian的学习笔记

    Hessian学习笔记 Hessian是一种基于Binary-RPC协议实现的远程通讯library,由Caucho提供。下面是Hessian的学习笔记: 一、简介 Hessian是基于Binary-RPC协议实现的远程通讯library,用于实现远程过程调用(RPC)...

    Flex + Hessian 学习笔记(二)

    在“Flex + Hessian 学习笔记(二)”中,我们可能涉及以下知识点: 1. **Flex应用的架构**:Flex应用通常包含三层结构:表现层(Presentation)、业务逻辑层(Business Logic)和数据访问层(Data Access)。Hessian...

    Hessian学习笔记

    综上所述,学习Hessian需要掌握二进制序列化技术,理解远程方法调用的概念,熟悉Hessian的实现和使用,并关注安全性、性能优化等方面的问题。同时,通过阅读源码和实践项目,可以更深入地理解这个协议的精髓。

    WebService另一种轻量级实现—Hessian 学习笔记.rar

    **WebService的轻量级实现——Hessian学习笔记** 在IT行业中,WebService作为一种常见的跨平台、跨语言的通信机制,被广泛应用于系统间的交互。然而,传统的SOAP(Simple Object Access Protocol)协议实现的...

    hessian传文件

    hessian是用byte传文件的,具体怎么传

    Hessian学习简单demo

    Hessian是一种二进制协议,它被设计用于提高远程调用的...通过学习和实践这个Hessian demo,你将能够更好地应对涉及远程调用和数据交换的问题。无论是Java开发者还是C++开发者,Hessian都是值得了解和掌握的一项技术。

    hessian学习基础篇——序列化和反序列化

    通过学习Hessian,我们可以更有效地处理数据传输,提高应用性能。 首先,让我们理解什么是序列化。序列化是将对象的状态转换为可存储或可传输的形式的过程。在Java中,如果一个类实现了Serializable接口,那么该类...

    Hessian 学习 例子 实例

    首先,Hessian的吸引力在于它的二进制格式,这使得数据在网络上传输时占用更少的带宽。相比于XML或JSON等文本格式,二进制格式的数据通常更小,解析速度更快。在处理大量数据或频繁通信的应用场景下,Hessian能显著...

    Flex + Hessian 留言本

    Flex + Hessian 学习笔记(一) http://wangcheng.javaeye.com/blog/141382 Flex + Hessian 学习笔记(二) http://wangcheng.javaeye.com/blog/141539 Flex + Hessian 学习笔记(三) ...

    dubbo-hessian协议http请求demo(java)

    - 在实际开发中,我们可能会需要编写一些辅助工具类来处理Hessian的相关操作,例如Hessian2Input和Hessian2Output,它们用于读写Hessian序列化的二进制流。 6. **安全性与优化**: - 虽然Hessian协议效率高,但其...

    Hessian笔记

    【标题】:“Hessian笔记”主要探讨的是Hessian这一技术在IT领域的应用,尤其是与源码和工具相关的知识。Hessian是一种二进制的Remoting协议,它旨在提供高效的远程方法调用(Remote Method Invocation,RMI)能力,...

    hessian学习实例

    Hessian提供了一种二进制的序列化格式,使得在网络上传输的数据量更小,从而提高了服务调用的效率。在这个“hessian学习实例”中,我们将深入探讨Hessian框架的使用,特别是如何将其与Spring框架集成,以及如何构建...

    Hessian学习入门实例

    这是一个Hessian入门学习的实例,程序包是一个web工程,使用intellij idea + Maven开发,其中通过两个方式展示了使用Hessian实现RMI的原理,一个是访问jsp页面,一个是在代码中手工创建client。对于Hessian Servlet...

    Hessian

    在博客链接《iteye博客:550771》中,作者可能详细讨论了Hessian的使用方法、优缺点以及实战案例,可以作为学习Hessian的参考资料。 **六、Hessian的使用场景** 1. **微服务通信**:在微服务架构中,Hessian可以...

    hessian案例,hessian案例

    Hessian是构建在HTTP基础之上,但通过二进制编码优化了传输效率,因此在某些场景下可能比纯HTTP的RESTful API更高效。 7. **实际应用**:在"Test3"、"PyDome1"和"Test1"这些文件中,可能包含了实际的代码示例或者...

    hessian-4.0.7jar文件与源代码.rar

    `hessian-4.0.7-src.jar`则是Hessian-4.0.7的源代码,开发者可以通过查看源代码来了解Hessian的工作原理,学习如何使用它来创建自定义的序列化和反序列化逻辑,或者对协议进行扩展。源代码还方便了调试和问题排查,...

    hession实例代码(文件上传和下载)

    6. **文件传输优化**:在实际的文件上传和下载过程中,可能会涉及到断点续传、大文件分块传输、文件缓存等优化策略,以提高传输效率和用户体验。 7. **安全性考虑**:文件服务需要考虑安全问题,例如防止恶意文件...

    hessian

    至于【压缩包子文件的文件名称列表】中的"hessian_cilent",这可能是Hessian的客户端实现示例代码或者库文件。通常,这个文件会包含客户端如何连接到Hessian服务、创建代理以及调用远程方法的代码片段。 总结起来,...

Global site tag (gtag.js) - Google Analytics