你的位置:首页 > Java教程

[Java教程]正常下载与URLConnection 六(64)


一 正常下载

服务使用断点下载时,响应的信息是206。

       UrlConnection - HttpurlConnection。-通过URL来获取urlconnection实例。

正常下载示例

package cn.demo;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.math.BigDecimal;import java.net.HttpURLConnection;import java.net.URL;public class CommonDown {  public static void main(String[] args) throws Exception {    String path = "http://localhost:6666/day22_cos/up/video.avi";    URL url = new URL(path);    HttpURLConnection con = (HttpURLConnection) url.openConnection();    con.setRequestMethod("GET");    con.setDoInput(true);    con.connect();    int code = con.getResponseCode();    System.err.println(code);    if (code == 200) {      //获取文件大小      long size = con.getContentLength();      System.err.println("总大小是:"+size);      //声明下载到的字节      long sum=0;      BigDecimal bd = new BigDecimal(0D);      double already = 0D;      InputStream in = con.getInputStream();      byte[] b = new byte[1024];      int len = -1;      OutputStream out = new FileOutputStream("d:/a/video.avi");      while ((len = in.read(b)) != -1) {        out.write(b, 0, len);        sum=sum+len;        double percent = ((double)sum)/((double)size);        percent*=100;        bd = new BigDecimal(percent);        bd = bd.divide(new BigDecimal(1),0,BigDecimal.ROUND_HALF_UP);        if(bd.doubleValue()!=already){          System.err.println(bd.intValue()+"%");          already=bd.doubleValue();        }      }      out.close();    }  }}

 

二 URLConnection

此类用于在java代码中模拟浏览器组成http协议向服务发请求(get/post)。

 

代码:package cn.hx;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class OneServlet extends HttpServlet {  public void doGet(HttpServletRequest request, HttpServletResponse resp)      throws ServletException, IOException {    String name = request.getParameter("name");    System.err.println("这是get、、、、"+name);    resp.setContentType("text/html;charset=UTF-8");    resp.getWriter().print("你好:"+name);  }  public void doPost(HttpServletRequest request, HttpServletResponse resp)      throws ServletException, IOException {    request.setCharacterEncoding("UTF-8");    String name = request.getParameter("name");    System.err.println("这是post请求......."+name);    resp.setContentType("text/html;charset=UTF-8");    resp.getWriter().print("你好:"+name);  }}

 

 

 

用urlconnection访问oneSerlvet

 

package cn.demo;import java.io.File;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import org.junit.Test;public class Demo {  /**   * 发送get请求   * @throws Exception   */  @Test  public void testConn() throws Exception{    //第一步:声明url    String urlPath = "http://localhost:6666/day22_cos/OneServlet?name=Jack";    //第二步:声明URL对象    URL url = new URL(urlPath);    //第三步:从url上获取连接    HttpURLConnection con= (HttpURLConnection) url.openConnection();     //第四步:设置访问的类型    con.setRequestMethod("GET");     //第五步:设置可以向服务器发信息。也可以从服务器接收信息    con.setDoInput(true); //也可以从服务器接收信息    con.setDoOutput(true); //设置可以向服务器发信息    //第六步:连接    con.connect();    //7:检查连接状态    int code = con.getResponseCode();     if(code==200){      //8:从服务器读取数据      InputStream in = con.getInputStream();      byte[] b = new byte[1024];      int len = 0;      while((len=in.read(b))!=-1){        String s = new String(b,0,len,"UTF-8");        System.err.print(s);      }    }    //9:断开    con.disconnect();  }  /**   * 以下发送post请求   */  @Test  public void post() throws Exception{    //第一步:声明url    String urlPath = "http://localhost:6666/day22_cos/OneServlet";    //第二步:声明URL对象    URL url = new URL(urlPath);    //第三步:从url上获取连接    HttpURLConnection con= (HttpURLConnection) url.openConnection();    //第四步:设置访问的类型    con.setRequestMethod("POST");    con.setRequestProperty("Content-Type","application/x-www-form-urlencoded");     //第五步:设置可以向服务器发信息。也可以从服务器接收信息    con.setDoInput(true);//设置可以向服务器发信息    con.setDoOutput(true);//也可以从服务器接收信息    //第六步:发信息    //获取输出流    OutputStream out = con.getOutputStream();    out.write("name=张三".getBytes("UTF-8"));             //7:检查连接状态    int code = con.getResponseCode();    if(code==200){      //8:从服务器读取数据      InputStream in = con.getInputStream();      byte[] b = new byte[1024];      int len = 0;      while((len=in.read(b))!=-1){        String s = new String(b,0,len,"UTF-8");        System.err.print(s);      }    }    //9:断开    con.disconnect();  }}