GETとPOST提出データ

5897 ワード

GET方式でサーバー側にデータを提出する
ステップ:   1、提出したいパラメータセットをURLアドレスの後ろにつづり合わせる:
    http://192.168.22.136:8080/web/servlet/LoginServlet?username=123&password=1233
ウェブページGETで一回提出して、HttpWatchソフトでブラウザの提出内容を監視してもいいです.詳細なGET内容が見られます.
同様にPOST方式で提出する場合もPOST提出時の内容を得ることができます.   短所:
   1、提出データの長さには制限があります.
     最大長さ4 kb、windowsでデータを提出する時の最大長さは1 kbです.
   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、Conteet Lengthを設定する:
conn.set Request Property(「Content-Type」、「appication/x-wn-form-urlencoded」);
   //追加すべき二つの要求ヘッダ情報
conn.set Request Property(「Conteet Length」、data.length()+「」);
conn.set Request Method(「POST」);
   2、設定はサーバにデータを提出する:
conn.set DoOutput(true);
//サーバにデータを書き込む
conn.get OutputStream().write(data.getByttes();
   短所:
    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を使ってurl符号化を行います.
String path="http://192.168.22.136:8080/web/servlet/LoginServlet?username=“+URLEncoder.encode”UTF-8"+&password=“+URLEncoder.encode”UTF-8";