`

httpclient组件使用经验

阅读更多
httpclient组件使用经验

---------------------
文件上传:
---------------------
1.httpclient也可以使用putmethod方法
2.通过 putmethod.addRequestHeader(key,vaule)设置请求头部。也可设置一自定义的值,供服务端读出。
3.要实现文件上传不出现乱码问题,有以下几个注意点:
   1)http协议的乱码部分分为URI部分、Header部分以及Body部分。
   2)首先服务端的容器需要设置URI编码,如:tomcat配置文件中,对相关的访问端口设置URIEncoding="UTF-8"。
   3)在服务端的web.xml中,设置fileter对编码进行过滤转码
   4)对于uri中或是header中的中文在传间编码,服务端接收时解码。java.net.URLDecoder/URLEncoder.

4.文件上传的各种方式方法:
    1)客户端可以通过将文件流直接塞进请求体RequestEntity,如:put.setRequestEntity(InputStreamRequestEntity  entity),
      服务端通过request.getInputStream()获取。
InputStream in = request.getInputStream(); // 文件流获取
OutputStream out = new FileOutputStream(file);
byte[] buffer = new byte[8196];
int n;
while((n = in.read(buffer, 0, buffer.length)) != -1) {
     out.write(buffer, 0, n);
}
out.close();

    2)客户端可以通过Part与MultipartRequestEntit方式,将上传内容塞进请求体。
       服务端通过request.getInputStream()方式-----这种有可能上传文件不能看。

客户端塞内容:     
File targetFile = new File("1.mp3");
Part[] parts = { new FilePart(targetFile.getName(), targetFile) };
    filePost.setRequestEntity(new MultipartRequestEntity(parts,filePost.getParams()));
    HttpClient client = new HttpClient();
    client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
    int status = client.executeMethod(filePost);
服务端取内容:
// Create a factory for disk-based file items
    DiskFileItemFactory factory = new DiskFileItemFactory();
    // Set factory constraints
    factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
    factory.setRepository(tempPathFile);// 设置缓冲区目录
    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);
    // Set overall request size constraint
    upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB
    List<FileItem> items = upload.parseRequest(request);// 得到所有的文件
    Iterator<FileItem> i = items.iterator();
    while (i.hasNext())
    {
     FileItem fi = (FileItem) i.next();
     String fileName = fi.getName();
     if (fileName != null)
     {
      File fullFile = new File(fi.getName());
      File savedFile = new File(uploadPath, fullFile.getName());
      fi.write(savedFile);
     }

    3)还有其它方式,如直接使用MultipartPostMethod方法上传。还没有深入研究。


4.文件流读取使用OutputStream写入时需要注意:
   OutputStream有几种write方法,尽量采用write(byte[] b, int off, int len)方法。
write(byte[] b) : 使用些方法写入,容易使文件比原文件增大0~你指定的len大小。从而使你的文件可以无法正常显示。尤其在最后一片的读写时易增大。
write(byte[] b, int off, int len):每次跟据读入情况,确定每次写入大小,不易出现异常。
write(int b) :



OutputStream out = new FileOutputStream(file);
byte[] buffer = new byte[8196];
int n;
while((n = in.read(buffer, 0, buffer.length)) != -1) {
     System.out.println("------n--------" +n);
     System.out.println("------buffer--------" +buffer.length);
     out.write(buffer, 0, n);
}
out.close();

如上文中所错的测试结果:
------buffer--------8196
------n--------7983
.......
------buffer--------8196
------n--------7983
------buffer--------8196
------n--------3114
------buffer--------8196
说明:每次buffer的读取都未读满,不知是何原因。将指定的buffer大小改成2048再试:


--------------------------
遗留问题:
1.tomcat 中设置编码的作用?
2.web.xml中的filter的具体作用?
3.各种塞文件内容与取的方式,是否可以混 用?如果不能混用,他们的差异在哪,如何明确配对?  上面的方法是试过可行的,暂这么用。需要进一步了解深入。
4.在使用httpclient上传时,出现第次读的buffer示能读满,不知是何原因?
分享到:
评论

相关推荐

    httpClient组件使用说明

    本篇文章将详细讲解HttpClient的使用方法,包括如何搭建环境、所需的jar包、基本应用以及实例演示,旨在帮助初级学员快速掌握HttpClient的基础操作。 一、环境搭建 在使用HttpClient之前,首先需要在项目中引入...

    Commons-HTTPClient组件介绍与使用

    1. Commons-HTTPClient组件的主库文件:commons-httpclient-3.1.jar 2. 编码解码支持库:commons-codec-1.3.jar,用于处理编码相关的问题。 3. 日志功能组件:可能需要Commons-Logging,以便记录和调试网络通信的...

    HTTPClient组件的应用

    HttpClient组件的主要特点和功能包括: 1. 实现了HTTP 1.0和1.1的所有方法,如GET、POST、PUT、DELETE、HEAD、OPTIONS和TRACE。 2. 支持Cookie管理,方便处理用户会话。 3. 支持HTTPS加密操作,可以通过HTTP代理进行...

    使用httpClient组件解析html并解决字符编码

    使用HttpClient组件可以轻松地实现这一任务。但是,在实际使用中,经常会遇到字符集编码乱码问题。本文将讨论如何使用HttpClient 3.0解析HTML,并解决字符编码问题。 HttpClient组件简介 Apache HttpClient是一个...

    ApacheCommons-HTTPClient组件的应用.doc

    ApacheCommons-HTTPClient组件的应用.doc

    HttpClient组件及其在Android开发中的应用探讨.pdf

    《HttpClient组件及其在Android开发中的应用探讨》 HttpClient组件是Apache Jakarta Commons项目的一部分,为Java客户端编程提供了高效、全面的HTTP协议支持。在Web应用开发中,HttpClient不仅能够实现GET、POST、...

    使用HttpClient必须的jar包

    在Java项目中使用HttpClient时,为了确保功能的完整性和正确性,通常需要引入一系列的jar包。这些jar包包含了HttpClient的核心组件、依赖库和其他必要的工具,它们共同构成了HttpClient的运行环境。 以下是一些关键...

    【ASP.NET编程知识】.NET CORE HttpClient的使用方法.docx

    .NET CORE HttpClient 的使用方法 .NET CORE 中的 HttpClient 是一个非常重要的组件,它提供了一个强大且灵活的方式来发送 HTTP 请求。然而,在使用 HttpClient 时,我们需要注意一些重要的配置和使用方法,以避免...

    httpclient使用教程

    在开始使用HttpClient之前,需确保已正确安装并配置相关组件: 1. **下载HttpClient**:访问官方页面`http://jakarta.apache.org/commons/httpclient/downloads.html`下载最新版本。 2. **集成Commons Logging**:...

    原创: httpclient 4.0 使用 - 访问开心网的各种组件 例子

    《HttpClient 4.0 使用详解:访问开心网组件实例》 HttpClient 是 Apache 开源基金会提供的一个 HTTP 客户端库,被广泛应用于 Java 开发中,用于执行 HTTP 请求。HttpClient 4.0 版本引入了许多改进和新特性,使得...

    HttpClient介绍和使用文档

    HttpClient是Apache开源组织Jakarta Commons项目中的一个组件,版本为2.0RC2,它的主要目的是简化HTTP客户端与服务器之间的通信编程。HttpClient提供了丰富的API,能够处理各种复杂的HTTP请求,包括处理COOKIE、上传...

    httpclient.jar包下载

    本文将深入探讨httpclient.jar包,以及它与code.jar包的关系,帮助开发者更好地理解和使用这两个组件。 httpclient.jar是Apache HttpClient库的核心组件,它提供了全面的HTTP协议支持,包括HTTP/1.1和部分HTTP/2。...

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    《JAVA中使用HttpClient:commons-httpclient-3.0.jar详解》 在JAVA开发中,进行HTTP请求时,Apache的HttpClient库是一个不可或缺的工具。本文将深入解析`commons-httpclient-3.0.jar`,它是HttpClient的一个重要...

    使用HttpClient异步请求数据

    本篇将详细讲解如何使用`HttpClient`进行异步请求数据,并结合Android的`AsyncTask`来处理后台任务,避免阻塞UI线程。 首先,理解`HttpClient`的基本使用方法。`HttpClient`包含几个关键组件,如`HttpClient`实例、...

    httpClient需要的jar包

    在实际使用HttpClient时,需要根据项目需求选择合适的版本,理解其工作原理,正确配置和使用相关组件,以实现高效且可靠的HTTP通信。同时,及时关注Apache HttpClient的更新,以便利用新特性并修复已知问题。

    httpclient httpclient.jar

    首先,HttpClient的主要组件包括: 1. **HttpClient实例**:这是整个HTTP通信的核心,负责管理连接、请求和响应。通常,我们创建一个HttpClient实例,并设置其配置参数,如连接超时、重试策略等。 2. **HttpHost**...

    httpclient-4.5使用需要的所有jar包

    2. **httpcore-4.4.13.jar**:HTTP Core是HTTPClient的基础,提供了网络通信的基本组件,包括TCP连接、输入/输出流和HTTP协议解析器。它是HTTPClient与操作系统进行网络交互的桥梁。 3. **httpmime-4.5.13.jar**:...

    HttpClient 3.x to HttpComponents HttpClient 4.x

    在快速迁移指南中,提到了一些关键步骤和概念,例如使用多线程连接管理器`MultiThreadedHttpConnectionManager`,它是HttpClient 3.x中用来处理连接管理的一个重要组件。而在4.x版本中,这个管理器被`...

Global site tag (gtag.js) - Google Analytics