朋友让写一个关于android与server端servlet交互的demo,比项目中的例子要简单很多,入门的朋友可以参考下。
1.服务器端Servlet
核心代码:
/**
*
* 项目名称 JSONDemo
* 包 名 servlet
* 文 件 名 CustomerServlet.java
* 开 发 人 Administrator
* 描述信息 客户端验证用户登陆Servlet
* 发布日期 2012-4-6下午03:28:47
* 修改日期
* 修 改 人
* 版本信息 V1.0
*
*/
public class CustomerServlet extends HttpServlet {
private static final long serialVersionUID = 314719472293387358L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//登陆成功标志
String LOGIN_FLAG="";
//获得客户端提交用户名密码
String username = req.getParameter("username");
String password = req.getParameter("password");
//调用UserDAO中isLogin方法判断数据中用户名密码是否正确
boolean flag=UserDAO.isLogin(username, password);
try {
DataOutputStream output=new DataOutputStream(resp.getOutputStream());
if (flag) {
LOGIN_FLAG="success";
output.writeUTF("服务器端数据:"+LOGIN_FLAG);
System.out.println(LOGIN_FLAG);
output.writeInt(1);
output.close();
}else{
//登录失败
LOGIN_FLAG="failure";
System.out.println(LOGIN_FLAG);
output.writeUTF("服务器端数据:"+LOGIN_FLAG);
output.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.android客户端
ClientDemo 核心代码:
public class MainActivity extends Activity {
//private static final int REQUEST_CODE = 2;
HttpPost httpRequest=new HttpPost(UriAPI.HTTPCustomer);
EditText et_name;
EditText et_pwd;
TextView show_login;
Button btn_login;
Button btn_cancle;
ProgressDialog progressDialog;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化登陆界面
btn_login=(Button) findViewById(R.id.btn_login);
btn_cancle=(Button) findViewById(R.id.btn_cancle);
et_name=(EditText) findViewById(R.id.et_name);
et_pwd = (EditText) findViewById(R.id.et_pwd);
show_login=(TextView) findViewById(R.id.show_login);
progressDialog = new ProgressDialog(this);
btn_login.setOnClickListener(new OnClickListener() {
@SuppressWarnings("unchecked")
@Override
public void onClick(View v) {
//通过AsyncTask类提交数据 异步显示
new AT().execute(et_name.getText().toString(),et_pwd.getText().toString());
}
});
}
public class UriAPI {
/** 定义一个Uri **/
public static final String HTTPCustomer ="http://10.0.1.9:8026/JSONDemo/servlet/CustomerServlet";
}
@SuppressWarnings("rawtypes")
class AT extends AsyncTask{
String result="";
@Override
protected void onPreExecute() {
//加载progressDialog
progressDialog.show();
}
@Override
protected Object doInBackground(Object... params_obj) {
CharSequence username="";
CharSequence password="";
username=et_name.getText();
password =et_pwd.getText();
if(!username.equals("")&&!password.equals("")){
//请求数据
HttpPost httpRequest = new HttpPost(UriAPI.HTTPCustomer);
//创建参数
List<NameValuePair> params=new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", username.toString()));
params.add(new BasicNameValuePair("password", password.toString()));
//params.add(new BasicNameValuePair("flag","0"));
try {
//对提交数据进行编码
httpRequest.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
HttpResponse httpResponse=new DefaultHttpClient().execute(httpRequest);
//获取响应服务器的数据
if (httpResponse.getStatusLine().getStatusCode()==200) {
//利用字节数组流和包装的绑定数据
byte[] data =new byte[2048];
//先把从服务端来的数据转化成字节数组
data =EntityUtils. toByteArray((HttpEntity)httpResponse.getEntity());
//再创建字节数组输入流对象
ByteArrayInputStream bais = new ByteArrayInputStream(data);
//绑定字节流和数据包装流
DataInputStream dis = new DataInputStream(bais);
//将字节数组中的数据还原成原来的各种数据类型,代码如下:
result=new String(dis.readUTF());
Log.i("服务器返回信息:", result);
}
} catch(ClientProtocolException e){
e.printStackTrace();
}catch(UnsupportedEncodingException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
@Override
protected void onPostExecute(Object result) {
//获得服务器返回信息成功后
show_login.setText(result.toString());
//取消进度条
progressDialog.cancel();
}
}
}
3.界面截图
3.1 未登录
3.2 登陆中
3.3 登陆成功
3.4 登陆失败