Android:网络:通过GET和POST两种方式上传参数

本文详细介绍了如何使用Java的HttpClient发起POST和GET请求,包括构造请求、处理响应等关键步骤,并展示了如何在Servlet中解析这些请求。
    /**
     * 通过HttpClient发送数据
     * @param title 标题
     * @param length 时长
     * @return
     */
    public static boolean save(String title, String length) {
        String path = "http://192.168.0.168:8080/web/ManageServlet";
        Map<String, String> params = new HashMap<String, String>();
        params.put("title", title);
        params.put("timelength", length);
        try {
            return sendHttpClientPOSTRequest(path, params, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    /**
     * 通过HttpClient发送Post请求
     * @param path 请求路径
     * @param params 请求参数
     * @param encoding 编码
     * @return 请求是否成功
     */
    private static boolean sendHttpClientPOSTRequest(String path, Map<String, String> params, String encoding) throws Exception{
        List<NameValuePair> pairs = new ArrayList<NameValuePair>();//存放请求参数
        if(params!=null && !params.isEmpty()){
            for(Map.Entry<String, String> entry : params.entrySet()){
                pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
            }
        }
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs, encoding);
        HttpPost httpPost = new HttpPost(path);
        httpPost.setEntity(entity);
        DefaultHttpClient client = new DefaultHttpClient();
        HttpResponse response = client.execute(httpPost);
        if(response.getStatusLine().getStatusCode() == 200){
            return true;
        }
        return false;
    }
    /**
     * 发送Post请求,参数是请求体
     * @param path 请求路径
     * @param params 请求参数
     * @param encoding 编码
     * @return 请求是否成功
     */
    private static boolean sendPOSTRequest(String path, Map<String, String> params, String encoding) throws Exception{
        //  title=liming&timelength=90
        StringBuilder data = new StringBuilder();
        if(params!=null && !params.isEmpty()){
            for(Map.Entry<String, String> entry : params.entrySet()){
                data.append(entry.getKey()).append("=");
                data.append(URLEncoder.encode(entry.getValue(), encoding));
                data.append("&");
            }
            data.deleteCharAt(data.length() - 1);
        }
        byte[] entity = data.toString().getBytes();//生成实体数据
        HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();
        conn.setConnectTimeout(5000);
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);//允许对外输出数据
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.setRequestProperty("Content-Length", String.valueOf(entity.length));

        OutputStream outStream = conn.getOutputStream();
        outStream.write(entity);
        if(conn.getResponseCode() == 200){
            return true;
        }
        return false;
    }
    /**
     * 发送GET请求,参数在路径上
     * @param path 请求路径
     * @param params 请求参数
     * @param encoding 编码
     * @return 请求是否成功
     */
    private static boolean sendGETRequest(String path, Map<String, String> params, String ecoding) throws Exception{
        // http://192.168.1.100:8080/web/ManageServlet?title=xxx&timelength=90
        StringBuilder url = new StringBuilder(path);
        url.append("?");
        for(Map.Entry<String, String> entry : params.entrySet()){
            url.append(entry.getKey()).append("=");
            url.append(URLEncoder.encode(entry.getValue(), ecoding));
            url.append("&");
        }
        url.deleteCharAt(url.length() - 1);
        HttpURLConnection conn = (HttpURLConnection)new URL(url.toString()).openConnection();
        conn.setConnectTimeout(5000);
        conn.setRequestMethod("GET");
        if(conn.getResponseCode() == 200){
            return true;
        }
        return false;

    }




在Servlet中post和get都使用下面的方式获取数据

String title = request.getParameter("title");        
String timelength = request.getParameter("timelength");
System.out.println("视频名称:"+ title);
System.out.println("时长:"+ timelength);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值