GET和POST提交数据

使用GET方式向服务器端提交数据

步骤:

   1、把需要提交的参数组拼到URL地址的后面:

    http://192.168.22.136:8080/web/servlet/LoginServlet?username=123&password=1233

可以先用网页GET方式提交一次,用HttpWatch软件监视浏览器提交的内容,就可以看到详细的GET内容,

同样,POST方式提交的时候也可以得到POST提交时的内容

   缺点:
   1、提交数据的长度有限制:
     最大长度4kb,windows中提交数据时最大长度为1kb;
   2、不安全
   
   优点:代码简单

代码:

import java.io.InputStream;
	import java.net.HttpURLConnection;
	import java.net.URL;


	import com.itheima.htmlview.utils.StreamTools;


	import android.app.Activity;
	import android.os.Bundle;
	import android.text.TextUtils;
	import android.view.View;
	import android.widget.EditText;
	import android.widget.Toast;


	public class MainActivity extends Activity {


	private EditText et_qq;


	private EditText et_pwd;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		et_qq = (EditText) findViewById(R.id.et_qq);


		et_pwd = (EditText) findViewById(R.id.et_pwd);
	
	}


	public void login(View view){
		final String qq = et_qq.getText().toString().trim();
		
		final String pwd = et_pwd.getText().toString().trim();
		
		if(TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)){
			Toast.makeText(this, "qq和密码不能空", 0).show();
			return;
		}else{
			new Thread(){
				
				public void run() {
					
					try {
						//组拼参数到URL后面
						String path = "http://192.168.22.136:8080/web/servlet/LoginServlet?username="+qq+"&password="+pwd;
	//					1、发送请求
	//				    (1)创建一个URL对象
						 URL url = new URL(path);
						 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
	//					(2)设置请求头信息
						 conn.setRequestMethod("GET");
						 conn.setConnectTimeout(3000);
	//				   2、服务器返回数据
	//				    (1)判断状态码:200 ok,404 没有找到资源、503、509 服务器端错误
						 
						 int code = conn.getResponseCode();
						 if(code == 200){
	//							(2)解析服务器返回的二进制数据,解析成一个字符串
							 InputStream is = conn.getInputStream();
							 String result = StreamTools.readStream(is);
							 System.out.println("---------"+ result);
						 }


					} catch (Exception e) {
						e.printStackTrace();
					}
				};
			}.start();
		}
	}
     
	}






	
	public class StreamTools {
	
	/**
	 * 把输入流转换成一个字符串
	 * @param is
	 * @return
	 */
	public static String readStream(InputStream is){
		
		try {
			byte[] buffer = new byte[1024];
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			StringBuilder sb = new StringBuilder();
			int len = -1;
			while((len = is.read(buffer)) != -1){
				baos.write(buffer, 0, len);
			}
			
			return baos.toString();
		} catch (Exception e) {
			return "";
		}
		
		
	}
	}


使用POST方式提交数据(重点)

业务场景:

1、用户登录
2、文件上传

步骤:

   1、设置请求头信息POST、Content-Length:
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    //必须添加的两个请求头信息
conn.setRequestProperty("Content-Length", data.length()+"");
conn.setRequestMethod("POST");

   2、设置把数据提交到服务器端:
conn.setDoOutput(true);
//把数据写到服务器端
conn.getOutputStream().write(data.getBytes());
   缺点:
    1、代码复杂
   优点:
1、安全;
        2、提交大量的数据

 代码:

import java.io.InputStream;
	import java.net.HttpURLConnection;
	import java.net.URL;


	import com.itheima.htmlview.utils.StreamTools;






	import android.app.Activity;
	import android.os.Bundle;
	import android.text.TextUtils;
	import android.view.View;
	import android.widget.EditText;
	import android.widget.Toast;


	public class MainActivity extends Activity {


	private EditText et_qq;


	private EditText et_pwd;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		et_qq = (EditText) findViewById(R.id.et_qq);


		et_pwd = (EditText) findViewById(R.id.et_pwd);
	
	}


	public void login(View view){
		final String qq = et_qq.getText().toString().trim();
		
		final String pwd = et_pwd.getText().toString().trim();
		
		if(TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)){
			Toast.makeText(this, "qq和密码不能空", 0).show();
			return;
		}else{
			new Thread(){
				
				public void run() {
					
					try {
						String path = "http://192.168.22.136:8080/web/servlet/LoginServlet";
						String data = "username="+qq+"&password="+pwd;
	//					1、发送请求
	//				    (1)创建一个URL对象
						 URL url = new URL(path);
						 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
	//					(2)设置请求头信息
						 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
						 //必须添加的两个请求头信息
						 conn.setRequestProperty("Content-Length", data.length()+"");
						 conn.setRequestMethod("POST");
						 conn.setConnectTimeout(3000);
						 //设置把数据提交到服务器端
						 conn.setDoOutput(true);
						 //把数据写到服务器端
						 conn.getOutputStream().write(data.getBytes());
						 
	//				   2、服务器返回数据
	//				    (1)判断状态码:200 ok,404 没有找到资源、503、509 服务器端错误
						 
						 int code = conn.getResponseCode();
						 if(code == 200){
	//							(2)解析服务器返回的二进制数据,解析成一个字符串
							 InputStream is = conn.getInputStream();
							 String result = StreamTools.readStream(is);
							 System.out.println("---------"+ result);
						 }


					} catch (Exception e) {
						e.printStackTrace();
					}
				};
			}.start();
		}
	}
     
	}

乱码解决

使用POST方式提交数据时的中文乱码解决方法

使用客户端和服务器两边的字符集编码保持一致。
   UTF-8,或者GBK要统一
使用GET方式提交数据的中文乱码的解决方法
    使用URLEncoder.encode(name,"UTF-8")进行url编码:
String path = "http://192.168.22.136:8080/web/servlet/LoginServlet?username="+URLEncoder.encode(name,"UTF-8")+"&password="+URLEncoder.encode(pwd,"UTF-8");

你可能感兴趣的:(post,get)