移动端通过网络连接与服务端进行数据交互,在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" ><TextViewandroid: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"/><TextViewandroid: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"/>

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

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

  1. 超详细的用户认证、权限、安全原理详解(认证、权限、JWT、RFC 7235、HTTPS、HSTS、PC端、服务端、移动端、第三方认证等等)

    用户认证.权限.安全 原 理 与 实 践 作者: jcLee95 邮箱 :291148484@163.com CSDN 主页:https://blog.csdn.net/qq_28550263?spm ...

  2. android 仿微信demo————微信通讯录界面功能实现(移动端,服务端)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  3. 弹弹堂服务器如何修改,弹弹堂端游服务端+手工弹弹堂游戏客户端+GM管理后台+附安裝构建实例教程...

    弹弹堂端游服务端+手工弹弹堂游戏客户端+GM管理后台+附安裝构建实例教程 系统centos 7.2 64位 安装宝塔 yum install -y wget && wget -O in ...

  4. Android端+Java服务端+servlet+MySQL二手商城设计

    项目地址: Android端+Java服务端+servlet+MySQL二手商城设计.zip-Android文档类资源-CSDN下载 项目简介及内容截图如下: 本系统适用于计算机专业作为期末课程设计. ...

  5. android 仿微信demo——持续更新(实现移动端,服务端)

    仿微信UI设计,移动端用android studio写,服务端用idea. 主要功能包括注册登录功能,微信主界面(包含微信消息界面,联系人界面,发现界面,个人信息界面),聊天窗口,朋友圈. andro ...

  6. android客户端访问服务端,服务端返回json数据

    json这里选用了fast-json 先看服务端代码如下 package novelserver.servlet;import java.io.IOException; import java.io. ...

  7. Socket通信 客户端加密数据,传递数据密文到服务端,服务端解密密文 输出明文

    server // sdf_cpp_warpper.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // server端#ifndef UNICODE # ...

  8. canal布在mysql端还是服务端_canal使用入坑,亲测 !!!!

    原来用windows本地运行,在本地模拟客户端和服务端,鼓捣了一天都没运行成功...最后放弃了,改用 windows的客户端+ubuntu的服务端(客户端程序运行在window,canal监听运行在U ...

  9. 使用C++的Socket实现从客户端到服务端,服务端到客户端传输文件

    使用: (1)首先运行服务端,待服务端运行起来: (2)最后运行客户端,输入要传输文件到哪个目标机器的IP地址: (3)输入传输文件的路径及文件(完成的路径),其中包含文件的类型,也就是后缀需要包含( ...

最新文章

  1. ThinkPHP5.1接收post、get参数
  2. Sql PATINDEX 函数
  3. Spring IOC之依赖
  4. 多线程小抄集(新编三)
  5. C++调pytorch模型的全过程记录
  6. Linux学习总结(54)——Red Hat Enterprise Linux与CentOS的区别
  7. wordpress 资料管理系统_说一说库存管理系统。
  8. linux文件权限中 chmod、u+x、u、r、w、x分别代表什么
  9. 懒人版黑苹果mbr安装_黑苹果系统懒人版镜像|黑苹果超级镜像懒人版 OS X EI Capitan10.12.6 变色龙引导黑苹果cdr_ - 极光站...
  10. HTML/CSS居中对齐的方式大全
  11. 计算机图形学中的抗锯齿
  12. 【资源分享新方式】基于IPv6+Windows的共享文件夹,从此告别第三方云盘
  13. Android中使用AudioManager实现按键录音并保存以及点击播放功能
  14. Canvas 指纹图片改成红色
  15. python 会计师_成为会计师所需的9项关键的技能
  16. 朋友圈长文不折叠神器
  17. 做实验好比开车,危险一直都在,为啥出事的就是你?
  18. 精美黑色UI版创客新零售系统源码
  19. 关于element的日历组件改造为考勤页面
  20. python德巴赫猜想_python实现哥德巴赫猜想(任何大于或者等于6的整数都可以写成2个素数之和)...

热门文章

  1. 207-Course Schedule
  2. php多线程解决之stream_socket_client
  3. 【OpenCV学习】矩阵基本操作
  4. openquery基本运用实例
  5. iPhone SDK发布
  6. hssfworkbook 单元格合并后宽度不生效_Excel表格“假”合并,有多牛?
  7. linux tomcat apr安装,Linux下Tomcat安装并开启APR模式-Go语言中文社区
  8. 设计模式系列6:适配器模式(Adapter Pattern)
  9. 正则验证IP、掩码、端口
  10. java8 java9 接口 interface