`

android通过POST和GET两种方式发送数据到web应用实战

阅读更多

一、web应用端

1、servlet

package com.caiz.web.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class AcceptServelet
*/
@WebServlet("/AcceptServelet")
public class AcceptServelet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String title = request.getParameter("title");
String id = request.getParameter("id");
System.out.println("method=" + request.getMethod());
System.out.println("id=" + id);
System.out.println("title=" + title);
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}

}

 

2、filter,用于乱码处理

 

a、过滤器filter

package com.caiz.web.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

/**
* 参数编码处理过滤器
* @author HuangYucai
*/

@WebFilter("/*")
public class EncodingFilter implements Filter {

/**
* Default constructor.
*/
public EncodingFilter() {
}

/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}

/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;
if ("GET".equals(req.getMethod())) {
EncodedHttpServletRequest warpper = new EncodedHttpServletRequest(
req);
chain.doFilter(warpper, response);
} else {
req.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}

}

/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}

}

b、包装request类

package com.caiz.web.filter;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

/**
* request的参数编码出来
* @author HuangYucai
*
*/
public class EncodedHttpServletRequest extends HttpServletRequestWrapper {

private HttpServletRequest request;

public EncodedHttpServletRequest(HttpServletRequest request) {
super(request);
this.request = request;
}

@Override
public String getParameter(String name) {
String value=request.getParameter(name);
if(value!=null){
try {
value=new String(value.getBytes("ISO8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
}
}
return value;
}

}

二、android应用端

 

 1、主程序类:Activity

package com.caiz.android.htmlviewer;

import com.caiz.android.htmlviewer.service.PageService;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 主程序类
 * @author HuangYucai
 */
public class HtmlViewerActivity extends Activity {
    /** Called when the activity is first created. */
    private EditText pathText;
    private Button viewBnt;
    private TextView txtViewer;
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        pathText= (EditText)this.findViewById(R.id.path);
        viewBnt=(Button)this.findViewById(R.id.bnt);
        txtViewer=(TextView)this.findViewById(R.id.viewer);
        viewBnt.setOnClickListener(new BntOnclickListener());
    }
 
 public final class BntOnclickListener implements View.OnClickListener{

  public void onClick(View v) {
   String path=pathText.getText().toString();
   String html;
   try {//获取字符数据设置到TextView空间
    html = PageService.getPageStr(path);
    txtViewer.setText(html);
   } catch (Exception e) {
    e.printStackTrace();
    Toast.makeText(getApplicationContext(), "获取网页失败", Toast.LENGTH_SHORT).show();
   }
  }
  
 }
}

 

2、业务类service

 

package com.caiz.httpreq.service;

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

/**
 * Android发送数据到web的业务类
 * @author HuangYucai
 *
 */
public class HttpSendService {

 // 通过GET方法提交数据
 public boolean saveByGetMethod(int id, String title) throws Exception {
  String path = "http://192.168.0.186:8080/web/AcceptServelet";
  // 构造参数的Map
  HashMap<String, String> params = new HashMap<String, String>();
  params.put("id", String.valueOf(id));
  params.put("title", title);
  // 发送GET请求
  return sendHttpClientRequest(path, params,"UTF-8");
 }

 // 通过HttpClient请求的方法
 public boolean sendHttpClientRequest(String path, Map<String, String> params,String charsetName)
   throws Exception {
  // 设置请求参数的名值对
  List<NameValuePair> pairList=new ArrayList<NameValuePair>();
  for (Map.Entry<String, String> entry : params.entrySet()) {
   pairList.add(new BasicNameValuePair(entry.getKey(),entry.getValue()));
  }
  
  UrlEncodedFormEntity entity=new UrlEncodedFormEntity(pairList,charsetName);//创建请求的url实体
  HttpPost httpPost=new HttpPost(path);//创建http请求实例
  httpPost.setEntity(entity);
  
  DefaultHttpClient client=new DefaultHttpClient();// 实例化请求客户端
  HttpResponse response=client.execute(httpPost);// 执行请求
  if(response.getStatusLine().getStatusCode()==200){// 请求成功
   return true;
  }
  return false;
 }
 
 // 发送GET请求的方法
 public boolean sendGetRequest(String path, Map<String, String> params,String charsetName)
   throws Exception {
  // 拼接带参数的请求路径
  StringBuilder url = new StringBuilder(path);
  url.append("?");
  for (Map.Entry<String, String> entry : params.entrySet()) {
   url.append(entry.getKey()).append("=")
   .append(URLEncoder.encode(entry.getValue(),charsetName))
   .append("&");
  }
  url.deleteCharAt(url.length() - 1);
  
  // 发送请求
  HttpURLConnection conn = (HttpURLConnection) (new URL(url.toString())
  .openConnection());
  
  conn.setRequestMethod("GET");
  conn.setConnectTimeout(5000);
  if (conn.getResponseCode() == 200) {//如果发送成功
   return true;
  }
  return false;
 }
 
 
 // 发送Post请求的方法
 public boolean sendPostRequest(String path, Map<String, String> params,String charsetName)
   throws Exception {
  // 拼接带参数的请求路径
  StringBuilder data = new StringBuilder("");
  for (Map.Entry<String, String> entry : params.entrySet()) {
   data.append(entry.getKey()).append("=")
   .append(URLEncoder.encode(entry.getValue(),charsetName))
     .append("&");
  }
  data.deleteCharAt(data.length() - 1);
  
  byte[] dataBytes=data.toString().getBytes();
  
  
  // 发送请求
  HttpURLConnection conn = (HttpURLConnection) (new URL(path.toString()).openConnection());
  conn.setRequestMethod("POST");
  conn.setConnectTimeout(5000);
  conn.setDoOutput(true);//设置可以输出数据
  //设置内容类型
  conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  //设置内容长度
  conn.setRequestProperty("Content-Length", String.valueOf(dataBytes.length));
  
  OutputStream outStream =conn.getOutputStream();
  outStream.write(dataBytes);
  
  if (conn.getResponseCode() == 200) {//如果发送成功
   return true;
  }
  return false;
 }

}

3、在主配置文件Androidmanifset.xml配置访问网络的权限

 

<uses-permission  android:name="android.permission.INTERNET"/>

 

 

 

分享到:
评论

相关推荐

    Android通过POST和GET向服务器发送数据

    通常,我们使用HTTP协议的两种主要方法:POST和GET来传输数据。本文将详细讲解如何在Android中实现这两种方法,并讨论使用普通HTTP协议和Android内置的HttpClient库的区别。 1. **POST方法**: - POST请求常用于...

    安卓网络通信之通过GET和POST方式提交参数给web应用

    总的来说,Android中提交参数给Web应用可以通过GET和POST两种方式实现,选择哪种取决于具体需求,如数据量大小、是否包含敏感信息等。GET适合数据量小且不敏感的情况,POST则适用于传输大量数据或涉及用户隐私的场景...

    Android中通过GET和POST方式以及使用HttpClient框架通过网络通信提交参数给web应用案例

    本文将深入探讨如何在Android中利用这两种方式以及HttpClient框架来提交参数给Web应用。 首先,GET和POST的主要区别在于它们处理数据的方式。GET方法通常用于获取资源,其参数附加在URL后面,易于观察但对数据长度...

    android客户端向服务端上传数据 post和get两种方式

    本文将深入探讨两种主要的HTTP请求方法:POST和GET,以及它们在Android中用于上传数据的应用。同时,我们还将讨论XML数据的发送和文件上传的相关技术。 首先,GET和POST是HTTP协议中的两种主要请求类型。GET主要...

    android基础 - POST GET

    在Android开发中,POST和GET是两种主要的HTTP请求方法,用于从服务器获取数据或向服务器发送数据。本文将深入探讨这两种方法的工作原理、应用场景以及如何在Android中实现它们。 一、POST与GET方法的区别 1. 工作...

    Android端使用get post 方法提交数据到服务器demo

    在Android应用开发中,与服务器进行数据交互是常见的需求,主要通过HTTP协议的GET和POST方法来实现。本文将详细讲解如何在Android端使用GET和POST方法提交数据到服务器,并结合传智播客张泽华Android视频54-57中的...

    .net 后台Post,get方式调用webapi

    以上代码示例展示了如何在.NET后台通过GET和POST方式调用WebAPI以及如何实现文件上传。注意,实际使用时需要根据具体的WebAPI接口要求调整请求参数和数据格式。同时,确保正确处理异常和错误响应,以提供健壮的服务...

    android get,post获取数据

    在Android开发中,GET和POST是两种常见的HTTP请求方法,用于从服务器获取或发送数据。本文将详细探讨这两种方法以及如何处理JSON和XML格式的数据。 首先,GET和POST的主要区别在于它们的使用场景和数据传输方式。...

    Android中Https请求get和post

    POST请求常用于提交数据到服务器。在Android中实现HTTPS POST请求,基本步骤与GET类似,但需添加请求参数: 1. 添加请求头(Content-Type): ```java connection.setRequestProperty("Content-Type", "application...

    Android Get和Post方式访问网络

    在Android开发中,网络通信是应用与服务器交互的重要方式,主要分为GET和POST两种请求方法。本篇文章将详细解析这两种方法以及如何在Android中实现它们。 1. GET方法: GET是最常见的HTTP请求方法,用于从服务器...

    C++ 实现 HTTP HTTPS POST GET(包含curl版本和winhttp两种实现)

    玩过抓包,网络协议分析的朋友肯定都知道http https post get,web端和用户的交互主要是通过post get完成的。 我这里有两种实现: 1:libcurl实现的CHttpClient类,该类实现了Htpp和Https的get post方法。 2:...

    C# 使用Get和Post请求获取数据

    在IT行业中,C#是一种广泛使用的编程语言,特别是在开发Windows应用程序、Web服务和游戏等领域。在Web开发中,与服务器进行交互的一个...通过理解和熟练掌握GET和POST请求的使用,可以更高效地开发和维护Web应用程序。

    android 后台 get和post请求数据

    在Android开发中,与服务器进行数据交互是必不可少的步骤,主要通过HTTP协议的GET和POST方法来实现。本文将深入探讨这两种方法以及如何在Android后台实现它们。 首先,GET和POST是HTTP协议中最常见的两种请求方法。...

    VC通过HttpGet和HttpPost方式与WebService通信,解析返回的Json

    HttpGet和HttpPost是HTTP协议中的两种主要请求方法。HttpGet是一种无状态、幂等的请求方法,通常用于获取资源,它的请求参数包含在URL中。HttpPost则可以携带大量数据,包括在请求体中,适合上传文件或发送复杂的...

    android httpclient文件上传 http协议post get方法向服务器传输数据

    在Android开发中,HTTPClient是常用的网络通信库,它提供了HTTP协议的支持,允许应用程序通过POST和GET方法向服务器传输数据。本项目中的四个知识点聚焦于HTTPClient的使用,特别是文件上传以及HTTP的基本请求方法。...

    android采用post方式获取服务器数据

    通常有GET和POST两种方法来发送数据。本文将深入探讨如何通过POST方式在Android中获取服务器数据。 首先,我们需要了解HTTP POST请求的基本概念。HTTP POST请求用于向服务器提交数据,常用于表单提交。与GET方法...

    C#的http发送post和get请求源码

    本文将详细介绍如何在C#中实现这两种请求,并结合给定的文件名,推测这是一个简单的C#桌面应用程序,用于测试HTTP POST和GET请求。 1. **HTTP GET请求**: - GET请求是最基本的HTTP请求类型,用于从服务器获取资源...

    Android 通过get和post方法访问网络demo

    此demo演示android通过get和post请求方法同服务器交互,测试需要tomcat,具体参考 http://blog.csdn.net/youmingyu/article/details/52524538

    android 的OkHttp3网络的POST和GET请求

    在Android开发中,网络通信是应用与服务器交互的重要方式,OkHttp3是一个高效且功能强大的网络请求库。本文将深入探讨如何使用OkHttp3进行GET和POST请求。 首先,我们来了解一下OkHttp3的基本概念。OkHttp是由...

Global site tag (gtag.js) - Google Analytics