Android与后台数据交互学习

摘要 任何系统在没有用户登录就可操作数据是非常危险的,链接客户端与服务器的是用户登录后的session,用户登录系 统后存在一个sessionid,这个sessionid就是客户端的cookie,客户端获取到sessionid设置cookie后就可以发起任意的 HTTP服务器请求了。

HTTP 客户端编程中最常碰见的问题,很多网站的内容都只是对注册用户可见的,这种情况下就必须要求使用正确的用户名和口令登录成功后,方可浏览到想要的页面。因 为HTTP协议是无状态的,也就是连接的有效期只限于当前请求,请求内容结束后连接就关闭了。在这种情况下为了保存用户的登录信息必须使用到Cookie 机制。以JSP/Servlet为例,当浏览器请求一个JSP或者是Servlet的页面时,应用服务器会返回一个参数,名为jsessionid(因不 同应用服务器而异),值是一个较长的唯一字符串的Cookie,这个字符串值也就是当前访问该站点的会话标识。浏览器在每访问该站点的其他页面时候都要带 上jsessionid这样的Cookie信息,应用服务器根据读取这个会话标识来获取对应的会话信息。

对于需要用户登录的网站,一般在 用户登录成功后会将用户资料保存在服务器的会话中,这样当访问到其他的页面时候,应用服务器根据浏览器送上的Cookie中读取当前请求对应的会话标识以 获得对应的会话信息,然后就可以判断用户资料是否存在于会话信息中,如果存在则允许访问页面,否则跳转到登录页面中要求用户输入帐号和口令进行登录。这就 是一般使用JSP开发网站在处理用户登录的比较通用的方法。

这样一来,对于HTTP的客户端来讲,如果要访问一个受保护的页面时就必须模 拟浏览器所做的工作,首先就是请求登录页面,然后读取Cookie值;再次请求登录页面并加入登录页所需的每个参数;最后就是请求最终所需的页面。当然在 除第一次请求外其他的请求都需要附带上Cookie信息以便服务器能判断当前请求是否已经通过验证。说了这么多,可是如果你使用httpclient的 话,你甚至连一行代码都无需增加,你只需要先传递登录信息执行登录过程,然后直接访问想要的页面,跟访问一个普通的页面没有任何区别,因为类 HttpClient已经帮你做了所有该做的事情了,太棒了!下面的例子实现了这样一个访问的过程。

 1 package http.demo;
 2 import org.apache.commons.httpclient.*;
 3 import org.apache.commons.httpclient.cookie.*;
 4 import org.apache.commons.httpclient.methods.*;
 5
 6 /**
 7  * 用来演示登录表单的示例
 8  * @author Liudong
 9  */
10 public class FormLoginDemo {
11    static final String LOGON_SITE = "localhost" ;
12    static final int     LOGON_PORT = 8080;
13
14    public static void main(String[] args) throws Exception{
15       HttpClient client = new HttpClient();
16       client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);
17
18       // 模拟登录页面 login.jsp->main.jsp
19       PostMethod post = new PostMethod( "/main.jsp" );
20       NameValuePair name = new NameValuePair( "name" , "ld" );
21       NameValuePair pass = new NameValuePair( "password" , "ld" );
22       post.setRequestBody( new NameValuePair[]{name,pass});
23       int status = client.executeMethod(post);
24       System.out.println(post.getResponseBodyAsString());
25       post.releaseConnection();
26
27       // 查看 cookie 信息
28       CookieSpec cookiespec = CookiePolicy.getDefaultSpec();
29       Cookie[] cookies = cookiespec.match(LOGON_SITE, LOGON_PORT, "/" , false , client.getState().getCookies());
30       if (cookies.length == 0) {
31          System.out.println( "None" );
32       } else {
33          for ( int i = 0; i < cookies.length; i++) {
34             System.out.println(cookies[i].toString());
35          }
36       }
37
38       // 访问所需的页面 main2.jsp
39       GetMethodget=newGetMethod("/main2.jsp");
40       client.executeMethod(get);
41       System.out.println(get.getResponseBodyAsString());
42       get.releaseConnection();
43    }

参考:http://my.oschina.net/u/218583/blog/42923

时间: 2024-11-04 18:06:11

Android与后台数据交互学习的相关文章

UMI学习-10 Dva 与后台数据交互

明天在线办公没时间学习了,今天晚上再更新一篇 代码提交一次:https://github.com/zhaogaojian/jgdemo 1.src下创建services目录 创建文件userSrv.ts export async function query(): Promise<any> { return request('user/getuserinfo'); } import axios from "axios" export default async functi

MUI框架-09-MUI 与后台数据交互

MUI框架-09-MUI 与后台数据交互 本篇介绍使用 art-template 和原生 MUI 的数据交互 mui.ajax 来实现 我们大家都知道,想要数据交互就要有数据,每次当我们发送请求,我们要清楚,怎么发,发给谁,返回的数据是什么内容,格式 先放一张图,给大家学习的动力: 然后今天呢,介绍的是调用 API,API 是什么呢,就是一个接口,比如知乎日报的API ,我们可以通过这个 API 获取到知乎上最新的消息,并且是 json 格式,我们就不用再去找数据了,其他类型 API 还有 百度

Android与服务器端数据交互(基于SOAP协议整合android+webservice)

此文出自:http://www.cnblogs.com/zhangdongzi/archive/2011/04/19/2020688.html 上一节中我们通过http协议,采用HttpClient向服务器端action请求数据.当然调用服务器端方法获取数据并不止这一种.WebService也可以为我们提供所需数据, 那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起. 我们在PC机器java客

[email&#160;protected]$http服务与后台数据交互

1.httpBasic.html: <!DOCTYPE HTML><html ng-app="app"><head>    <title>$http与后台数据交互</title>    <meta charset="utf-8">        <link rel="stylesheet" href="../css/bootstrap.css">

使用Jquery.AJAX方法和PHP后台数据交互小结

使用jQuery的AJAX方法和后台PHP进行数据交互,交互采用的数据格式JSON格式. 我主要小小的总结了一下,我使用AJAX方法时候遇到一些小小的问题. 第一:在传递数据的时候,传输地址注意是否正确. 第二:在传输数据时,传输的数据格式是否正确. 第三:我遇到过 200 但是执行的是AJAX方法的错误方法,我总结了一下,一般都是PHP的数据格式不正确,所以,当遇到200 error时候,应该认真,仔细的检查PHP传输的数据格式是否争取,由于JSON的特性,所以,使用JSON的时候对数据格式规

困扰几周了,请教啊,android与websevice数据交互很诡异的问题

============问题描述============ 传输数据(title,imgurl,account)当传输title或title+account时数据正常传输,但是无法传输Imgurl项,即使imgurl+title都一样,没有任何数据显示 请教 1.httpcon.java复制内容到剪贴板代码: //数据交互,输入输出流与读取流 import java.io.IOException; import java.io.InputStream; import java.io.OutputS

Android与webserver数据交互编程---3网络爬虫项目实现虚拟浏览器的jsp后台执行

背景:原先的b/s设计中在一个jsp界面中实现多个复杂的工作流... 为实现移动接口的调用保证工作流的正常webproject特别给提供了该虚拟浏览器的方案 原理:通过该方案实现虚拟浏览器后台运行jsp脚本,以达到我们要求 要求: 1.session保持.不然总会跳转到login界面 2.jsp脚本必须被运行,不能仅仅是单纯的发起一个请求 先上 private String submitHandler(HttpServletRequest request,String msg,String se

Android 读取后台数据并显示。模拟小区车辆管理系统

帮别人做的演示系统,只具有基本的增删查改功能. 核心是android端和后台通过http传输数据 后台是asp.net,数据库是ms sql 2008 android端 private void getData() { RequestParams params = new RequestParams(); params.put("action", "getlista"); params.put("chepai", etSearch.getText

Android与服务器端数据交互(http协议整合struts2+android)

在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据,那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有 一:基于Http协议获取数据方法.二:基于SAOP协议获取数据方法,三:忘了------- 那么我们的这篇文章主要是将关于使用Http协议获取服务器端数据,这里我们采取的服务器端技术为java,框架为Struts2,或者可以有Servlet,又或者可直接从JSP页面中获取数据. 那么,接下来我们便开始这一路程: 首先:编写服务器端