用apache的httpclient发请求和接受数据

此处发请求的是用httpclient4,请自己下载所需要的jar包。

发post请求,并得到数据。

 

String url = "http://localhost:8080/lee";
        url = url+ "/query/action/export.action";
        String exportFilePath = "lee"+".csv.";
        
        final HttpClient httpClient = new DefaultHttpClient();
        final HttpPost post = new HttpPost(url);
        List<NameValuePair> params = new ArrayList<NameValuePair>();  
        params.add(new BasicNameValuePair("leeSmart", leeSmart));//发post请求的参数
        post.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
        final HttpResponse response = httpClient.execute(post);//得到返回的response
        final int code = response.getStatusLine().getStatusCode();
        final HttpEntity entity = response.getEntity();//得到entity
        if (entity != null && code < 400) {
            InputStream inputStream = entity.getContent();//得到从服务器端返回的数据流
            long length = entity.getContentLength();
            if(length<=0) return;
            int len = (int)length;
            byte[] b = new byte[len];
            int readCount = 0;
                    //建议用以下方式读inputStream为b赋值
                   while (readCount < len) {  
            	   readCount += inputStream.read(b, readCount, len - readCount);  
            } 
            //在客户端生成文件。更高效的做法是,在服务器端传过来一个压缩后的btye[],然后在客户端解压,减少传输数据。
            try {
                FileOutputStream fo1 = null;
                fo1 = new FileOutputStream(exportFilePath);
        	fo1.write(b);
            }
    		fo1.close();
    	      } catch (Exception e2) {
    		e2.printStackTrace();
    	     }
           }

 

在action中接请求的方法export(),并返回数据流

 

try {
			request.setCharacterEncoding("UTF-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		response.setCharacterEncoding("UTF-8");
		String leeSmart = request.getParameter("leeSmart");//前台传过来的post参数
		byte[] b = null;
		try{
                      List ret = serivce.query("select * from dual");//得到查询结果集
                      //将ret放到sb中
                      StringBuilder sb = new StringBuilder();
                      //.......对结果集进行处理,并转成字节数组
                      b = sb.toString().getByte();
               }catch(Exception e){
                   e.printStackTrace();
               }
               //如果方便,可以把b字节数组压缩一下,这样传的数据会比较小一些。
              //将字节数组放到response中,并返回到客户端。
             try {
                   response.reset();
                  // 设置response的Header
                   response.addHeader("Content-Disposition", "attachment;filename=" + new String("random".getBytes("UTF-8"),"ISO-8859-1"));
                  response.addHeader("Content-Length", "" + b.length);
                  OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
                  response.setContentType("application/octet-stream");
                  toClient.write(b);
                  toClient.flush();
                  toClient.close();
             } catch (Exception e) {
                e.printStackTrace();
             }finally{
            
             }

 



 

posted on 2013-08-31 23:55  you Richer  阅读(274)  评论(0编辑  收藏  举报