android中的网络通信(二) HTTP网络编程

来源:互联网 发布:cuda 8.0 linux下载 编辑:程序博客网 时间:2024/05/16 09:13
   上一篇是关于网络底层Socket编程的网络通信,这篇是之上的高级的网络编程协议HTTP协议,也是运用的比较广泛的互联网协议,通常所说的B/S的结构程序就是基于此协议的。
   android中基于HTTP的网络通信的有两种分别是:HttpURLConnection和ApacheHTTP。这篇主要是HttpURLConnection通信。HttpURLConnection通过基于http的url来访问资源进行请求和响应。本篇以一个简单的登陆界面来展示HttpURLConnection。 

   首先在建立android客户端,布局文件分别是输入用户名和密码,传给服务器进行判断,如输入正确则返回成功。布局文件如下

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:background="#ffffff" android:layout_height="match_parent"><TableLayout android:layout_width="fill_parent" android:id="@+id/table"android:stretchColumns="1" android:layout_height="wrap_content"><TableRow android:layout_width="fill_parent"android:layout_height="wrap_content"><TextView android:text="name:" android:textColor="#000000"android:textSize="20dp" android:layout_width="wrap_content"android:layout_height="wrap_content" /><EditText android:layout_width="fill_parent"android:layout_height="wrap_content" android:id="@+id/name" /></TableRow><TableRow android:layout_width="fill_parent"android:layout_height="wrap_content"><TextView android:text="password:" android:textColor="#000000"android:textSize="20dp" android:layout_width="wrap_content"android:layout_height="wrap_content" /><EditText android:layout_width="fill_parent"android:layout_height="wrap_content" android:id="@+id/password" /></TableRow></TableLayout><Button android:layout_below="@id/table" android:layout_width="fill_parent"android:layout_height="wrap_content" android:id="@+id/submit"android:text="submit" /></RelativeLayout>
java文件通过url来访问服务器的LoginServlet通过LoginServlet来进行判断

/** *  */package com.test;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;/** * @author liguiwu *  */public class login extends Activity {private EditText name;private EditText password;private Button submit;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.login);name = (EditText) findViewById(R.id.name);password = (EditText) findViewById(R.id.password);submit = (Button) findViewById(R.id.submit);submit.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString getName = name.getText().toString();String getPassword = password.getText().toString();login(getName, getPassword);}});}public void login(String name, String password) {String urlStr = "http://192.168.1.101:8080/MyServer/servlet/LoginServlet?";String queryString = "name=" + name + "&password=" + password;urlStr = urlStr + queryString;try {URL url = new URL(urlStr);// 获得http连接的实例HttpURLConnection conne = (HttpURLConnection) url.openConnection();// 判断是否请求成功if (conne.getResponseCode() == HttpURLConnection.HTTP_OK) {InputStream in = conne.getInputStream();byte[] b = new byte[in.available()];// 将b读到缓冲区in.read(b);String msg = new String(b);AlertDialog.Builder build = new AlertDialog.Builder(this);build.setMessage(msg).setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stub}});AlertDialog alert = build.create();alert.show();}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}
在Myeclipse新建LoginServlet的servlet类来进行判断,通过apache作为服务器,运行的时候先配置apache,我测试的时候由于忘了配置纠结了好久,测试的时候可以再浏览器中输入客户端的url看是否服务端正常启动。

package com.test;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet {/** * Constructor of the object. */public LoginServlet() {super();}public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String name = request.getParameter("name");String password = request.getParameter("password");response.setContentType("text/html");response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();String msg = null;if (name.equals("admin") && password.equals("admin")) {msg = "successful";} else {msg = "fail";}// 传信息给客户端out.print(msg);// 刷新输出流out.flush();out.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
运行结果,返回“successful”



原创粉丝点击