移动端向服务端提交数据——实现简单登录

来源:互联网 发布:莫一兮 知乎 编辑:程序博客网 时间:2024/06/07 06:37

移动端通过网络连接与服务端进行数据交互,在App开发中占有很大比重,可以说服务端是移动端的“后勤部队”,服务端可以向移动端源源不断的更新“新鲜的血液”,使得移动端在应用市场上不那么轻易地“倒下”。


服务器端:

新建一个WEB工程

在src中新建一个servlet

package login_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 login extends HttpServlet {public login() {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 username=request.getParameter("username");//采用ISO8859-1编码String password=request.getParameter("password");username=new String (username.getBytes("ISO8859-1"),"UTF-8");//采用iso8859-1进行你转换,转换成功字节数组,在采用utf——1编码对数据进行转换password=new String (password.getBytes("ISO8859-1"),"UTF-8");System.out.println("姓名"+username);System.out.println("密码"+password);if(username.equals("tianjie")&&password.equals("123")){//默认情况下使用的是iso8859——1编码,但是如果发现码表中没有当前字符,会使用当前系统下默认编码:GBKresponse.getOutputStream().write("登录成功".getBytes("utf-8"));}else{response.getOutputStream().write("登录失败".getBytes("UTF-8"));}} public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("dopost!!!!!!");this.doGet(request, response);}}

移动端:

新建android 工程

页面布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:orientation="vertical"    tools:context=".MainActivity" >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="账号" />    <EditText         android:id="@+id/edt_username"        android:layout_width="match_parent"        android:layout_height="wrap_content"        />    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="密码" />    <EditText         android:id="@+id/edt_password"        android:layout_width="match_parent"        android:layout_height="wrap_content"        />    <Button         android:id="@+id/btn_submit_get"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="GET提交"        />    <Button         android:id="@+id/btn_submit_post"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="POST提交"        /></LinearLayout>


MainActivity.class

package com.example.login;import com.example.Utils.NetUilts;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener {private EditText edt_username,edt_password;private Button btn_submin_get,btn_submit_post;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();//初始化控件}public void init(){edt_username=(EditText) findViewById(R.id.edt_username);edt_password=(EditText) findViewById(R.id.edt_password);btn_submin_get=(Button) findViewById(R.id.btn_submit_get);btn_submit_post=(Button) findViewById(R.id.btn_submit_post);btn_submin_get.setOnClickListener(this);btn_submit_post.setOnClickListener(this);}@Overridepublic void onClick(View v) {String username=edt_username.getText().toString();String password=edt_password.getText().toString(); switch(v.getId()){ case R.id.btn_submit_get: doget(username,password); break; case R.id.btn_submit_post: dopost(username,password); break; }}private void doget(final String username, final String password) {new Thread(new Runnable() {@Overridepublic void run() {final String state=NetUilts.loginOfGet(username, password);runOnUiThread(new Runnable() {//执行任务在主线程中@Overridepublic void run() {//就是在主线程中操作Toast.makeText(MainActivity.this, state, 0).show();}});}}).start();}private void dopost(final String username, final String password) {new Thread(new Runnable(){@Overridepublic void run() {final String state=NetUilts.loginofPost(username, password);runOnUiThread(new Runnable() {//执行任务在主线程中@Overridepublic void run() {//就是在主线程中操作Toast.makeText(MainActivity.this, state, 0).show();}});}}).start();}}

NetUils.class
package com.example.Utils;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.media.MediaRecorder.OutputFormat;public class NetUilts {/* * 用post方式登录 * @param username * @param password * @return 登录状态 * */public static String  loginofPost(String username,String password){HttpURLConnection conn=null;try {URL url=new URL("http://192.168.1.106:8080/server_login/servlet/login");conn=(HttpURLConnection) url.openConnection();conn.setRequestMethod("POST");//设置请求方式conn.setConnectTimeout(10000);//设置连接超时时间conn.setReadTimeout(5000);//设置读取超时时间//POST请求的参数OutputStream out=conn.getOutputStream();//获得输出流对象,用于向服务器写数据String data="username="+username+"&"+"password="+password;out.write(data.getBytes());//向服务器写数据;out.close();//关闭输出流conn.connect();//开始连接int responseCode=conn.getResponseCode();//获取响应吗if(responseCode==200){//访问成功InputStream is=conn.getInputStream();//得到InputStream输入流String state=getstateFromInputstream(is);return state;}else{//访问失败}} catch (Exception e) {e.printStackTrace();}finally{if(conn!=null){//如果conn不等于空,则关闭连接conn.disconnect();}}return null;}/* * 使用GET的方式登录 * @param username * @param password * @return 登录状态 * */public static String loginOfGet(String username,String password){HttpURLConnection conn=null;try {String data="username="+username+"&"+"password="+password;URL url=new URL("http://192.168.1.106:8080/server_login/servlet/login?"+data);conn=(HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");//设置请求方式conn.setConnectTimeout(10000);//设置连接超时时间conn.setReadTimeout(5000);//设置读取超时时间conn.connect();//开始连接int responseCode=conn.getResponseCode();//获取响应吗if(responseCode==200){//访问成功InputStream is=conn.getInputStream();//得到InputStream输入流String state=getstateFromInputstream(is);return state;}else{//访问失败}} catch (Exception e) {e.printStackTrace();}finally{if(conn!=null){//如果conn不等于空,则关闭连接conn.disconnect();}}return null;}private static String getstateFromInputstream(InputStream is) throws IOException {ByteArrayOutputStream baos=new ByteArrayOutputStream();//定义一个缓存流byte[] buffer=new byte[1024];//定义一个数组,用于读取isint len=-1;while((len =is.read(buffer)) != -1){//将字节写入缓存baos.write(buffer,0,len);}is.close();//关闭输入流String state =baos.toString();//将缓存流中的数据转换成字符串//String state=new String (baos.toByteArray(),"GBK");//把流中的数据转换成字符串,采用的是GBkbaos.close();return state;}}

最后在AndroidManifest中添加权限

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

如有不妥之处,请予以指正,谢谢!

2 0
原创粉丝点击