您的位置:首页 > 理论基础 > 计算机网络

"Android下使用HttpUrlConntion"进行最简单的get,post请求(包括创建服务器)

2016-07-10 00:48 1161 查看
一服务端 MyEclipse创建服务器
创建Servlet

编写doGet和doPost方法

部署工程

验证服务器

浏览器验证

二客户端Android
验证网络

get请求

post请求

添加网络权限

我们把过程分成两大块(服务端和客户端),服务端用Myeclipse创建一个Web项目服务,客户端用安卓进行访问,好了现在就开始进行

一.服务端: MyEclipse创建服务器

创建Servlet

1.创建Web工程(第三个)



2.写工程名



3.右击工程名,创建Servlet



4.设置好名称,然后记住只选择doGet和doPost方法,点击Next



5.设置访问路径注意只要斜杠+我们方便的字即可

(PS:注意,这个路径是你以前重来没有用过的路径,如果有用过,那么等下部署后运行就会有警告,访问也会404错误),点击finish完成



编写doGet和doPost方法



部署工程



工程添加到tomcat



添加后就会显示出来了



点击开始



验证服务器



浏览器验证

打开浏览器,输入地址8080和你的工程名如果能出现JSP页面就证明没有错



然后再进行get请求 路径加上问号+名字+&+密码验证,就会出现登陆成功



所以服务器就配置好了

二.客户端:Android

(网络请求耗时操作,都在子线程执行,如果想谈吐司就RunOnUI主线程)

(PS:我们只需要获取网络返回来的数据即可);

验证网络

首先先打开我们的桌面浏览器看看我们的模拟器是不是被拒绝了,如果你们访问不了tomcat主界面,10.0.2.2:8080或者127.0.0.1的话,就上网查询解决方法(搜索:genymotion无法访问10.0.2.2,然后教程就会告诉你设置里面的ip代理即可)

验证能访问tomcat



验证能访问路径



get请求

要点:

1.直接拼接路径访问
2.Url获取连接,设置时间和请求方法get
3.获取读取流转成字符串并输出


代码:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*--------------get--------------*/
huc_get();
/*--------------post--------------*/
huc_post();
}

/**
* 子线程中耗时操作
* 直接拼接提交数据到路径即可
*/
private void huc_get() {
new Thread(new Runnable() {
@Override
public void run() {
try {
String name = "admin";
String pwd = "10086";
//1.url和获取到连接对象
//不用localhost,用10.0.2.2或者127.0.0.1
URL url = new URL("http://10.0.0.2:8080/LoginTest/login?name=" + name + "&pwd=" + pwd);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

//两个时间,连接和读取时间
conn.setConnectTimeout(3000);
conn.setReadTimeout(3000);

//
conn.setRequestMethod("GET");
conn.connect();

InputStream is = conn.getInputStream();

String s = readStringFromIs(is);
System.out.println(s);

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


post请求

要点:

1.路径不再是拼接形式
2.路径变成到服务的路径
3.后面的name和pwd采用流的形式
4.通过获取输出流输出


代码:

public static String Stream2String(InputStream is) throws IOException {

String res = "";
//"字节流"变成"字符转化流",再通过"缓冲读取字符"即可获取
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
try {
//每次读一行,就累加,然后继续下一行,直到最后.
line = reader.readLine();
while (line != null){
res += line;
line = reader.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
return res;
}

/**
* post不能直接拼接,采用参数形式
* post里路径里问号也不要
*/
private void huc_post() {
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL("http://10.0.0.2:8080/LoginTest/login");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(3000);
conn.setReadTimeout(3000);
//方法是get
conn.setRequestMethod("POST");
//提交数据写出
OutputStream os = conn.getOutputStream();

String data = "name=admin" + "&pwd=10086";
os.write(data.getBytes());
//获取输出读取
InputStream is = conn.getInputStream();
String s = readStringFromIs(is);
System.out.println(s);

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


添加网络权限

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


输出结果

07-09 12:47:03.296 4792-4806/? I/System.out: login success
07-09 12:47:03.296 4792-4807/? I/System.out: login success


正常访问;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息