首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

问一个servlet底层有关问题

2013-03-19 
问一个servlet底层问题。就是浏览器上传的时候,比如我上传一个100M的文件,然后提交表单.1.这个100M的文件是

问一个servlet底层问题。
就是浏览器上传的时候,比如我上传一个100M的文件,然后提交表单.
1.这个100M的文件是怎么提交上去的?
是一次性把100M的文件和表单信息提交到服务器(tomcat),等到数据上传完后然后tomcat封装request,然后再从request里面getInputStream,再output吗?
如果真的是这样的话,那么我想先验证文件拓展名再决定(不考虑前端验证,必须服务器验证)是否保存在服务器,那岂不是要等100M的文件上传完毕之后,再根据表单信息来验证文件的拓展名?这样很耗时吧?

还是先不提交文件的字节流,仅仅把文件信息先提交,然后等待服务器端执行read方法然后浏览器再上传。

2.request.getInputStream这个方法给出来的字节流都有些什么数据?表单数据?客户端信息?页面信息?
如果是这样的话,那和getParam getHeard有什么区别?

[解决办法]
我自己也去学习了一下到底java servlet是怎样处理;multipart request的,

得到的结果是如果是servlet3.0之前的,用request.getParameter()无法正确解析multipart 的
当然如果你确定用底层的getInputStream可以得到整个raw request但是需要你自己去解析,这应该不是目的,正因此之前的版本我看好多都用common fileupload

但在3.0之后(tomcat 7.0, glassfish3),他们好像添加了HttpServletRequest#getParts()来帮助解析此类request,这里有个例子

如果是3.0之前还有这样几个库可以帮助你解析
http://www.servlets.com/cos/index.html
http://users.boone.net/wbrameld/multipartformdata/

热点排行