我靠!都好久没写过博客了,不是没有需要记录的,而是太TMD忙啦!!!不过,就算忙也应该记录下重要的东西的,要不就成了瞎忙了,在此,先检讨一下!
我决定,从今天开始,每天晚上拿出1~2个小时左右的时间来总结、学习、提高!
最近客户有个需求,他们的客户端需要用C给Tomcat发送流数据,然后再经过处理后给他返回流数据,这个需求提出后,我首先想到的就是上传和下载的机制,那个应该就是流数据的传输,不过由于以前没有深入接触过上传下载,就是用也是用一些已经封装好的包,按照既定的模式做一些简单的上传下载,对于“底层”的东西不是很了解,或者说是根本不了解,不过好在俺的分析问题解决问题的能力还是不错的(哈,小吹一下),我先从网上找了了一个比较原始的接收上传文件的代码,部署到Tomcat后,正常用IE上传一个文件,在客户端抓报文,看了一下报文的结构,发现流数据是附加到报文体的, 然后就让客户端按照该格式给我发报文,经过反复调试,终于成功了!!!哈
其实就是将HTTP报文的头里的ContentType设置为multipart/form-data的,然后直接将2进制数据附加在报文体(报文头和报文体是用连续的两个\r\n来分割的)中就OK了,然后通过request.getInputStream()就可以得到数据。
返回流数据就是用下载的流程,将response.setContentType("application/x-download"),然后直接OutputStream out = response.getOutputStream();out.write(bos.toByteArray()) 就OK了。 下面附上简单的源码:
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
InputStream in = request.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
BufferedInputStream bis = new BufferedInputStream(in);
readStreamLine(bis, bos);
response.reset();
response.setContentType("application/x-download");
OutputStream out = response.getOutputStream();
out.write(bos.toByteArray());
out.flush();
out.close();
}
private ByteArrayOutputStream readStreamLine(BufferedInputStream in,
ByteArrayOutputStream bos) throws IOException {
int b = in.read();
while (b != -1) {
bos.write(b);
b = in.read();
}
return bos;
}
}
分享到:
相关推荐
6、缓存、限流、降级、分库、表拆分(500w~1000w) 7、解决session跨域 cookie 存sessionid,服务端Tomcat用ConcuurentMap存储 session sticky (请求落在同一个服务器上) session replication (复制) session ...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
服务器:可能使用了Tomcat或其他Servlet容器来部署和运行Web应用。 功能: 用户登录认证:提供用户注册和登录功能,可能包括微信授权登录。 文章阅读:允许用户浏览和阅读文章列表,可能包括文章分类、搜索等功能...
中间件:tomcat、weblogic、resin 数据库:mysql5以上 系统技术:系统采用J2EE技术,全面支持SOA架构。 系统目标:1、组织实现信息、知识的共享,建立“企业大学”;2、实现资源整合,降低运营成本,建立节约型组织...
3. 归档流程控制:系统以工作流的方式控制归档整个过程,包括将文件或案卷根据预定义的处理流程提交流转到下一操作环节,或退回上一环节,以及查看在流转过程中产生的流转记录 查看档案管理、1.学生:管理员按学号...
3. 归档流程控制:系统以工作流的方式控制归档整个过程,包括将文件或案卷根据预定义的处理流程提交流转到下一操作环节,或退回上一环节,以及查看在流转过程中产生的流转记录 查看档案管理、1.学生:管理员按学号...
第5章 讲解了JDBC的使用和如何在Tomcat服务器中设置连接池和数据源。还详细讲解了Apache Commons DbUtils组件的使用。 第6章 讲解Cookie技术的如何在Web编程中的运用,以及如何在Servlet中编写操作Cookie的代码。 第...
首先,这个功能使用的也是javamail技术,我们在页面中将所有的文本框以及富文本放到了一个form表单当中,因为我们新建了一个专门用来存放发送邮件所需信息的实体类所以在方法接收参数时 只用接受一个实体类,其中,...
9、java后台如何接收ajax数据? 26 10、为什么要有jquery? 26 11、jQuery选择器有多少种? 27 13、你是如何使用jquery中的ajax的? 27 14、jquery中的$.get和$.post请求区别? 27 15、jquery中如何操作样式的? 28 ...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
(8) 应用平台:IIS, Tomcat, Weblogic, WebShpere, Oracle AS. (9) 自然语言:英语,日语 1.2 学习Oracle数据库的重要性 (1) 数据库在当今世界的重要性。 (2) Oracle数据库的市场应用的广泛性。 (3) Oracle...
支持Mysql、SqlServer等主流数据库,支持 Tomcat、Jboss等常用的应用服务器。支持运行在Windows或Linux服务器;要基于目前流行的,扩展性、兼容性强的 SSH(Struts+Spring+Hibernate)通用开发框架;系统全面支持B/S...
2.3.1基本数据类型23 2.3.2常量25 2.3.3变量26 2.3.4整型数据27 .2.3.5浮点型数据29 2.3.6字符型数据30 2.3.7布尔型数据32 2.3.8变量赋初值33 2.3.9变量的作用域34 2.3.10数据类型转换34 2.4运算符与...
4.7.4 实例:用AJAX技术发送和接收中文信息 4.7.5 实例:在请求消息头和响应消息头中转输中文 4.8 小结 第5章 JSP技术 5.1 用MyEclipse编写第一个JSP程序 5.1.1 实例:编写显示服务器当前时间的JSP程序 ...
实例196 Tomcat连接池的配置 629 实例197 MySQL数据库的分页形式 633 实例198 连接ODBC数据库的Apple程序 640 第20章 JSP/Servlet技术 644 实例199 JSP与Servlet之间的跳转 644 实例200 简单的JSP多人聊天室 ...
ThreadIn.java 接收数据用的线程类 ThreadOut.java 发送数据用的线程类 TypeFile.java 显示文件内容的类 useScanner.java 用Scanner接收用户的输入 第8章 示例描述:本章学习多线程。 enhanceThread.java 一个...
4.7.4 实例:用AJAX技术发送和接收中文信息 4.7.5 实例:在请求消息头和响应消息头中转输中文 4.8 小结 第5章 JSP技术 5.1 用MyEclipse编写第一个JSP程序 5.1.1 实例:编写显示服务器当前时间的JSP...
FastDFS (图片服务器),tomcat(web服务器),zookeeper(集群管理),mysql(数据库) Junit(测试) ### 技术栈: spring,springmvc,mybatis(框架) solr(搜索服务),redis(缓存),easyUI(后台系统页面) ### 数据库...