Android+struts2+json方式模拟手机登录功能
涉及到的知识点:
1.Struts2框架的搭建(包括Struts2的jSON插件)
2.Android前台访问Web采用HttpClient方式。
3.Android采用JSON的解析。
服务端主要包含一个Action,通过struts的web配置配置struts.xml驱动业务逻辑的执行,然后对于符合条件的登录,返回给客户端通过jsonobject包装的数据。
服务端代码:
- package com.easyway.json.android;
- import java.util.HashMap;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.struts2.interceptor.ServletRequestAware;
- import org.apache.struts2.interceptor.ServletResponseAware;
- import com.opensymphony.xwork2.ActionSupport;
- /** * 模拟登录,并返回json数据 @author xiangzhihong
- */
- public class LoginAction extends ActionSupport implements ServletRequestAware,
- ServletResponseAware {
- /** * */
- private static final long serialVersionUID = 1L;
- HttpServletRequest request;
- HttpServletResponse response;
- private String userName;
- private String password;
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public void setServletRequest(HttpServletRequest request) {
- this.request = request;
- }
- public void setServletResponse(HttpServletResponse response) {
- this.response = response;
- }
- /**
- * 模拟用户登录的业务
- */
- public void login() {
- try {
- this.response.setContentType("text/json;charset=utf-8");
- this.response.setCharacterEncoding("UTF-8");
- //JSONObject json=new JSONObject();
- Map<String,String> <span style="color: #ff0000;">json</span>=new HashMap<String,String>();
- if ("admin".equals(userName)&&"123456".equals(password)) {
- json.put("message", "欢迎管理员登陆");
- } else if ((!"admin".equals(userName))&&"123456".equals(password)) {
- json.put("message", "欢迎"+userName+"登陆!");
- } else {
- json.put("message", "非法登陆信息!");
- }
- byte[] jsonBytes = json.toString().getBytes("utf-8");
- response.setContentLength(jsonBytes.length);
- response.getOutputStream().write(jsonBytes);
- response.getOutputStream().flush();
- response.getOutputStream().close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
package xzh.com.listviewhover.ui;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import xzh.com.listviewhover.R;
import xzh.com.listviewhover.base.Constants;
/**
* Created by xiangzhihong on 2016/3/14 on 12:07.
* 测试服务端的登录json
*/
public class LoginActivity extends AppCompatActivity {
@InjectView(R.id.account)
EditText account;
@InjectView(R.id.pwd)
EditText pwd;
@InjectView(R.id.login)
Button login;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
initProxy();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ButterKnife.inject(this);
initView();
}
private void initProxy() {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.penaltyLog()
.build());
//设置虚拟机的策略
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
private void initView() {
}
@OnClick(R.id.login)
void loginClick(View v){
String userName=account.getText().toString();
String password=pwd.getText().toString();
doLogin(userName,password);
}
private void doLogin(String userName, String password) {
final String[] result = {null};
String reqUrl=null;
reqUrl= Constants.LOGIN_URL+"userName="+userName+"&password="+password;
try {
doHttp(result, reqUrl);
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("提示")
.setMessage(result[])
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(LoginActivity.this,MainActivity.class));
}
}).setNegativeButton("取消",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create().show();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void doHttp(final String[] result, String reqUrl) {
// HttpClient httpclient = new DefaultHttpClient();
// HttpGet request=new HttpGet(reqUrl);
// request.addHeader("Accept","text/json");
// HttpResponse response =httpclient.execute(request);
// HttpEntity entity=response.getEntity();
// String json = EntityUtils.toString(entity,"UTF-8");
// if(json!=null&&json.contains("message")){
//// JSONObject jsonObject=new JSONObject(json);
//// result=jsonObject.get("message").toString();
// result="登录成功";
// }else {
// result="登录失败请重新登录";
// }
AsyncHttpClient client = new AsyncHttpClient();
client.get(this,reqUrl,new AsyncHttpResponseHandler(){
@Override
public void onSuccess(String content) {
super.onSuccess(content);
if (content!=null&&content.contains("message")){
] ="登录成功";
}else {
] ="登录失败";
}
}
});
}
}
好了,就到这,有需要的需要体验的请到我的git账号下载测试程序。
服务端代码:https://github.com/xiangzhihong/login
客户端代码:https://github.com/xiangzhihong/loginAndroid
Android+struts2+json方式模拟手机登录功能的更多相关文章
- Android+struts2+JSON方式的手机开发(Login)
在手机的后台服务无论是调用WebService还是Http请求,多数都是采用Android的HttpClient实现相关的调用实现.本文实现Android+Struts2+JSON方式实现为手机前台提 ...
- Struts2整合Hibernate3实现用户登录功能
所用技术:struts2 ,hibernate,jsp,mysql 本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰 ...
- Struts2的一个入门实例----登录功能
一.搭建环境与测试 1.web.xml文件,配置核心Filter 1: <?xml version="1.0" encoding="UTF-8"?> ...
- chrome模拟手机功能
在搭建好web側环境之后.能够使用chrome来模拟手机的功能 直接上图吧: 图1是直接模拟一个通用的界面 图2里面能够选择不同的手机型号,还是比較全的! 选择一个查看一下,和手机是一样的效果,非常赞 ...
- 重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 对于代码你有编程感觉吗 很多人写代码往往是没有编程感觉的,也就是除了可以把功能按照固 ...
- 设计基于HTML5的APP登录功能及安全调用接口的方式
转自:http://blog.csdn.net/linlzk/article/details/45536065 最近发现群内大伙对用Hbuilder做的APP怎么做登录功能以及维护登录状态非常困惑,而 ...
- 设计基于HTML5的APP登录功能及安全调用接口的方式(原理篇)
登录 保存密码 安全 加密 最近发现群内大伙对用Hbuilder做的APP怎么做登录功能以及维护登录状态非常困惑,而我前一段时间正好稍微研究了一下,所以把我知道的告诉大家,节约大家查找资料的时间. 你 ...
- 8、ABPZero系列教程之拼多多卖家工具 添加手机注册登录功能
现在网站基本都用手机注册,很少用邮箱注册,本篇内容比较多,代码我会尽量加备注,有些操作需要连续添加几个文件才不报错,如果VS显示错误,请继续后续步骤. 前面已经有一篇文章讲到集成短信发送模块:http ...
- android使用smack实现简单登录功能
android端采用xmpp协议实现即时通讯,在最开始的登录功能就遇到了不少障碍.首先在官网(https://www.igniterealtime.org/projects/openfire/)下载o ...
随机推荐
- [ExtJS5学习笔记]第二十七节 CMD打包错误 Error C2009: YUI Parse Error (identifier is a reserved word => debugger;)
本文地址:http://blog.csdn.net/sushengmiyan/article/details/41242993 本文作者:sushengmiyan ------------------ ...
- qsort函数应用大全
七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一.对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , c ...
- Android开发 Jar mismatch! Fix your dependencies的问题
有时候,当我们在导入Library的时候,会遇到Jar mismatch! Fix your dependencies这个错误.可能有如下原因: 1.两个项目的android-support-v4.j ...
- JAVA之旅(三十三)——TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录
JAVA之旅(三十三)--TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录 我们继续网络编程 一.TCP 说完UDP,我们就来说下我们应该重点掌握的TCP了 TCP传输 Soc ...
- 14 ListFragment 代码案例
MainActivity.java: package com.qf.day14_fragment_demo9_list; import android.os.Bundle; import androi ...
- 5.3、Android Studio录像
Android Monitor允许你从设备中录制一段MP4格式的视频,最长允许3分钟. 录制视频 在硬件设备中录制视频: 1. 打开一个项目 2. 在设备中运行应用 3. 显示Android Moni ...
- 1.0、Android Studio管理你的项目
项目概览 Android Studio中的项目包含了开发一个app的工作环境所需要的一切.从代码,到资源,到测试到构建配置.当你创建一个新的项目的时候,Android Studio为所有的文件创建了必 ...
- (九十六)借助APNS实现远程通知、后台任务
APNS全称为Apple Push Notification Service,可以实现在app不启动时也能通过服务器推送到iOS端特定设备的功能. APNS的实现原理为先发送设备的UDID和应用的Bu ...
- 查看LOV对应查询语句的研究
一.获取当前会话id 1.方法一 tools: Help > About 2.方法二 打开个性化定义界面(如果没有权限,到系统配置文件设置中,查看是否是"隐藏诊断菜单"被设置 ...
- Android的事件处理-android学习之旅(四十四)
androd事件处理简介 控制飞机移动的简单实例 package peng.liu.test; import android.app.ActionBar; import android.app.Act ...