Http协议对于java和asp.net的异同

来源:互联网 发布:常见设计模式 java 编辑:程序博客网 时间:2024/05/30 05:42

做过asp.net的人都知道,在服务器端接受数据时会用到request这个对象,如果是get的方式提交则会用request.QueryString来获取,如果是post表单提交则用request.form,对于request、request.QueryString、request.form以及request.headers等获取数据的方式的区别网上很多,这里就不讲了。

由于一个android项目,要向服务器端上传文件,一般做法就是用httpurlconnnction对象或者httpclient来做不难,网上的例子也一大堆,但是由于项目框架的原因,所有的http请求都是用的httpclient,这是因为httpclient对httpurlconnection的封装比较全面,但是服务器端是asp.net来做的,由于服务器端的接口已经使用了好久,而且公司之前的android项目上传文件都是用的httpurlconnection来上传的,而且只能上传一个文件。对此,我查看了httpclient api,在httpcommon中可以使用multipartentity可以实现模拟html表单提交的功能,能同时提交数据和文件,但是multipartenttity是放在body里的,而asp.net的request.inputstream是获取body里面的所有数据流,这就带来一个问题,除非服务器端的代码对inputstream再次进行解析,将表单数据和文件分开来,而之间的接口是用request.queryString的方式获取的表单数据,request.inputstream的方式来获取的file文件流,也就是之前表单数据是放在url里传过来的,body里只有一个file文件。

知道了request.inputstream到底获取的是什么内容后,那就好办了,httpclient是非常强大的,为了和asp.net的代码对接,只能将表单参数放到url中,但是问题又来了,在url后面拼接参数也就是?param1=value,new HttpPost(urlString)创建httppost对象时报错,看了一下错误提示,意思是有非法字符,之后将每个参数都进行了url编码


这样就可以通过了,过程中还有一个异常是由于jar包不兼容导致的,httpmine.jar和httpcore.jar的版本要匹配不然会在execute时报异常。


说了这么多其实只是为了说明http的协议格式在开发语言java与c#对应的使用方式的异同。协议肯定都是一样的,解析方式也是一样的,只是每个语言定义的类的形式不一样而已。

0 0