Http编程两种方式
GET方式:数据附在网址中,好处是速度快,并可设为书签;不足是传输的数据有限,并且不保密
POST方式:数据封装成表单发送,好处是传输的数据量大,保密;不足是速度稍慢,不能设为书签
1、在AndroidManifest.xml添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
2、传值方式
1)直接传值
//直接传值:返回响应的结果
String name="小王";
try {
name = URLEncoder.encode(name, "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String pwd="123";
path="http://192.168.31.145:8080/MyHttpServer/MyServlet"+"?username="+name+"&userpwd="+pwd;
2)JSON传值
String name="小王";
String pwd="123";
User user=new User(name, pwd);
Gson gson=new Gson();
String jsonUser=gson.toJson(user);
Log.d("lhm", jsonUser);
try {
jsonUser = URLEncoder.encode(jsonUser, "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("lhm","换码后"+ jsonUser);
path="http://192.168.31.145:8080/MyHttpServer/MyServlet"+"?user="+jsonUser;
new Thread(){
public void run() {
String str=HttpUtil.getMethod(path);
Message message=Message.obtain();
message.arg1=1;
message.obj=str;
handler.sendMessage(message);
};
}.start();
注意:在调用HttpUtil的getMethod要开启多线程
Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
if (msg.arg1==1) {
Toast.makeText(MainActivity.this, "返回的结果是"+msg.obj.toString(), Toast.LENGTH_SHORT).show();
}
};
};
整体代码:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myhttpclient"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.myhttpclient.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
实体类
package entity;
public class User {
private String userName;
private String userPwd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public User(String userName, String userPwd) {
super();
this.userName = userName;
this.userPwd = userPwd;
}
public User() {
super();
}
@Override
public String toString() {
return "User [userName=" + userName + ", userPwd=" + userPwd + "]";
}
}
工具类
package com.example.myhttpclient.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.util.Log;
public class HttpUtil {
/**
* 采用get方法访问http服务器
* @param path http路径
* @return
*/
public static String getMethod(String path){
String str="";
//声明返回结果
String result="";
//将访问地址转换成url对象
URL url;
try {
url = new URL(path);
//打开http连接对象
HttpURLConnection huc=(HttpURLConnection) url.openConnection();
//开启连接
huc.connect();
//GET和POST必须全部大写,默认GET方法
// huc.setRequestMethod("GET");
//设置连接超时时间5秒
huc.setConnectTimeout(5*1000);
//设置字符串缓冲流对象
BufferedReader br=null;
//实例化缓冲流对象
br=new BufferedReader(new InputStreamReader(huc.getInputStream()));
while ((result=br.readLine())!=null) {
str+=result;
Log.d("lhm", "result="+result);
Log.d("lhm", "str="+str);
}
//读取完毕后关闭对应的连接
br.close();
huc.disconnect();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("lhm", "url发生异常");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("lhm", "close发生异常");
}
return str;
}
}
package com.example.myhttpclient;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import com.example.myhttpclient.util.HttpUtil;
import com.google.gson.Gson;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import entity.User;
public class MainActivity extends Activity implements OnClickListener{
private Button send;
private String path;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
send=(Button) findViewById(R.id.main_send);
send.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.main_send:
/*//直接传值:返回响应的结果
String name="小王";
try {
name = URLEncoder.encode(name, "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String pwd="123";
path="http://192.168.31.145:8080/MyHttpServer/MyServlet"+"?username="+name+"&userpwd="+pwd;*/
String name="小王";
String pwd="123";
User user=new User(name, pwd);
Gson gson=new Gson();
String jsonUser=gson.toJson(user);
Log.d("lhm", jsonUser);
try {
jsonUser = URLEncoder.encode(jsonUser, "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("lhm","换码后"+ jsonUser);
path="http://192.168.31.145:8080/MyHttpServer/MyServlet"+"?user="+jsonUser;
new Thread(){
public void run() {
String str=HttpUtil.getMethod(path);
Message message=Message.obtain();
message.arg1=1;
message.obj=str;
handler.sendMessage(message);
};
}.start();
break;
default:
break;
}
}
Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
if (msg.arg1==1) {
Toast.makeText(MainActivity.this, "返回的结果是"+msg.obj.toString(), Toast.LENGTH_SHORT).show();
}
};
};
}
MyEclipse的实体类和Eclipse的实体类相同包名、类名
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
import entity.User;
public class MyServlet extends HttpServlet {
/**
* Constructor of the object.
*/
public MyServlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
/*//直接取值
String name=request.getParameter("username");
String name1=new String(name.getBytes("iso-8859-1"), "utf-8");
String pwd=request.getParameter("userpwd");
System.out.println(name1+" "+pwd);
out.println("username="+name+",userpwd="+pwd);*/
String jsonUser=request.getParameter("user");
Gson gson=new Gson();
User user=gson.fromJson(jsonUser, User.class);
String name=user.getUserName();
String name1=new String(name.getBytes("iso-8859-1"), "utf-8");
String pwd=user.getUserPwd();
System.out.println(name1+" "+pwd);
out.println("username="+name+",userpwd="+pwd);
out.flush();
out.close();
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}