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 ...
随机推荐
- gitlab的搭建及问题的解决
gitlab则是类似于github的一个工具,github无法免费建立私有仓库,并且为了代码安全,于是在内网安装了一个自己实验室的一个git服务器,gitlab有很多依赖,而bitnami制作了一键安 ...
- 两个activity或者activity和fragment传值
使用Fragment的时候可能需要在两个Fragment之间进行参数的传递,开始想着可以使用SharedPreferences进行处理,想想这些简单的参数没有必要使用这么麻烦的方式去实现,翻了一下Fr ...
- 06_MyBatis,Spring,SpringMVC整合
项目结构 Spring的配置: beans.xml <?xml version="1.0" encoding="UTF-8"?> <be ...
- Android初级教程以动画的形式弹出窗体
这一篇集合动画知识和弹出窗体知识,综合起来以动画的形式弹出窗体. 动画的知识前几篇已经做过详细的介绍,可翻阅前面写的有关动画博文.先简单介绍一下弹出窗体效果的方法: 首先,需要窗体的实例:PopupW ...
- dbms_lob使用之-基础
在Oracle中,存储在LOB中数据称为LOB的值,如使用Select 对某一LOB字段进行选择,则返回的不是LOB的值,而是该LOB字段的定位器(可以理解为指向LOB值的指针).如执行如下 ...
- Collections类解析
最常用的排序: 需要实现Comparable接口 1.什么是Comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它 ...
- StarUML中InteractionOperation的画法
StarUML画InteractionOperation的方法:http://stackoverflow.com/questions/16152278/using-alt-in-sequence-di ...
- 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)
: 12MHz 晶振 对应 405 ~ 532 MHz 处理速度; -- : 16K 指令缓存, 16K 数据缓存; -- : 32KB 指令缓存, 32KB 数据缓存; (3) 内存接口对比 : 提 ...
- Java-IO之FilterInputStream和FilterOuptStream
FilterInputStream的作用是用来封装其他的输入流,并为它们提供了额外的功能,它的常用的子类有BufferedInputStream和DataInputStream.FilterOutpu ...
- go: 一个通用log模块的实现
在go里面,虽然有log模块,但是该模块提供的功能并不强,譬如就没有我们常用的level log功能,但是自己实现一个log模块也并不困难. 对于log的level,我们定义如下: const ( L ...