在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。再到对应的本地目录中取查看,是否有对应的上传文件,此处就不再显示结果,因为每个人所定义的文件目录不一样。
相关推荐
Hessian学习笔记 Hessian是一种基于Binary-RPC协议实现的远程通讯library,由Caucho提供。下面是Hessian的学习笔记: 一、简介 Hessian是基于Binary-RPC协议实现的远程通讯library,用于实现远程过程调用(RPC)...
在“Flex + Hessian 学习笔记(二)”中,我们可能涉及以下知识点: 1. **Flex应用的架构**:Flex应用通常包含三层结构:表现层(Presentation)、业务逻辑层(Business Logic)和数据访问层(Data Access)。Hessian...
综上所述,学习Hessian需要掌握二进制序列化技术,理解远程方法调用的概念,熟悉Hessian的实现和使用,并关注安全性、性能优化等方面的问题。同时,通过阅读源码和实践项目,可以更深入地理解这个协议的精髓。
**WebService的轻量级实现——Hessian学习笔记** 在IT行业中,WebService作为一种常见的跨平台、跨语言的通信机制,被广泛应用于系统间的交互。然而,传统的SOAP(Simple Object Access Protocol)协议实现的...
hessian是用byte传文件的,具体怎么传
Hessian是一种二进制协议,它被设计用于提高远程调用的...通过学习和实践这个Hessian demo,你将能够更好地应对涉及远程调用和数据交换的问题。无论是Java开发者还是C++开发者,Hessian都是值得了解和掌握的一项技术。
通过学习Hessian,我们可以更有效地处理数据传输,提高应用性能。 首先,让我们理解什么是序列化。序列化是将对象的状态转换为可存储或可传输的形式的过程。在Java中,如果一个类实现了Serializable接口,那么该类...
首先,Hessian的吸引力在于它的二进制格式,这使得数据在网络上传输时占用更少的带宽。相比于XML或JSON等文本格式,二进制格式的数据通常更小,解析速度更快。在处理大量数据或频繁通信的应用场景下,Hessian能显著...
Flex + Hessian 学习笔记(一) http://wangcheng.javaeye.com/blog/141382 Flex + Hessian 学习笔记(二) http://wangcheng.javaeye.com/blog/141539 Flex + Hessian 学习笔记(三) ...
- 在实际开发中,我们可能会需要编写一些辅助工具类来处理Hessian的相关操作,例如Hessian2Input和Hessian2Output,它们用于读写Hessian序列化的二进制流。 6. **安全性与优化**: - 虽然Hessian协议效率高,但其...
【标题】:“Hessian笔记”主要探讨的是Hessian这一技术在IT领域的应用,尤其是与源码和工具相关的知识。Hessian是一种二进制的Remoting协议,它旨在提供高效的远程方法调用(Remote Method Invocation,RMI)能力,...
Hessian提供了一种二进制的序列化格式,使得在网络上传输的数据量更小,从而提高了服务调用的效率。在这个“hessian学习实例”中,我们将深入探讨Hessian框架的使用,特别是如何将其与Spring框架集成,以及如何构建...
这是一个Hessian入门学习的实例,程序包是一个web工程,使用intellij idea + Maven开发,其中通过两个方式展示了使用Hessian实现RMI的原理,一个是访问jsp页面,一个是在代码中手工创建client。对于Hessian Servlet...
在博客链接《iteye博客:550771》中,作者可能详细讨论了Hessian的使用方法、优缺点以及实战案例,可以作为学习Hessian的参考资料。 **六、Hessian的使用场景** 1. **微服务通信**:在微服务架构中,Hessian可以...
Hessian是构建在HTTP基础之上,但通过二进制编码优化了传输效率,因此在某些场景下可能比纯HTTP的RESTful API更高效。 7. **实际应用**:在"Test3"、"PyDome1"和"Test1"这些文件中,可能包含了实际的代码示例或者...
`hessian-4.0.7-src.jar`则是Hessian-4.0.7的源代码,开发者可以通过查看源代码来了解Hessian的工作原理,学习如何使用它来创建自定义的序列化和反序列化逻辑,或者对协议进行扩展。源代码还方便了调试和问题排查,...
6. **文件传输优化**:在实际的文件上传和下载过程中,可能会涉及到断点续传、大文件分块传输、文件缓存等优化策略,以提高传输效率和用户体验。 7. **安全性考虑**:文件服务需要考虑安全问题,例如防止恶意文件...
至于【压缩包子文件的文件名称列表】中的"hessian_cilent",这可能是Hessian的客户端实现示例代码或者库文件。通常,这个文件会包含客户端如何连接到Hessian服务、创建代理以及调用远程方法的代码片段。 总结起来,...