读书人

tomcat接收源数据

发布时间: 2012-10-10 13:58:11 作者: rapoo

tomcat接收流数据
我靠!都好久没写过博客了,不是没有需要记录的,而是太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;}}

读书人网 >软件架构设计

热点推荐