1.请问一下大家,在移动互联网的开发中,手机端发送一个请求到后台服务器,后台处理好以后返回手机,这个请求是通过http协议发送的吗?
2.还有就是我们通常所说的session、cookie中的session(或者说是javaEE中后台操作的session)是http协议特有的吗?就是说其他协议还有session吗?还是只能是http协议才有session?
3.假如:(1)手机发送请求是通过http协议,(2)session是http请求就能够创建的,那么是不是手机端发生的请求在后台也会产生session,也就是说我们可以用session进行会话跟踪sessionhttp协议移动互联网java

解决方案 »

  1.   

    同事做过一个android应用程序
    数据都是通过访问servlet读取服务器上的数据的.
    是有session的   一定时间不访问服务器session还会被清掉.
      

  2.   

    这个类是用来跟服务器连接的    
    具体写了些什么东西你自己看看 
    我原先做.net的  java看起来很吃力    你自己看看吧
    package cn.zj.sunda.util;import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.CookieStore;
    import org.apache.commons.httpclient.HttpStatus;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.cookie.Cookie;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;import cn.zj.sunda.R;import android.content.Context;
    import android.util.Log;
    import android.widget.Toast;public class ConnUtil {


    private DefaultHttpClient hc = null;
    private Context context;
    // session
    public static String server="http://192.168.1.5:8080/SWS";
    public static String JSESSIONID = null; /**
     * 以POST方式提交表单
     * 
     * @param url
     *            服务器路径
     * @param param
     *            参数键值对
     * @return 响应结果
     * @throws Exception
     */
    public String Login(Map<String, Object> param, Context context) {
    HttpPost post = new HttpPost(server + "/servlet/LoginServlet");
    if (param != null && param.size() > 0) {
    List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(param.size());
    Set<String> keys = param.keySet();
    for (Object o : keys) {
    String key = (String) o;
    nameValuePairs.add(new BasicNameValuePair(key, String.valueOf(param.get(key))));
    }
    if (null != JSESSIONID) {
    post.setHeader("Cookie", "JSESSIONID=" + JSESSIONID);
    }
    try {
    post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    }
    HttpResponse response;
    StringBuffer sb = new StringBuffer();
    try {
    response = hc.execute(post); /** 返回状态 **/
    int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) {
    HttpEntity entity = response.getEntity();
    if (entity != null) {
    InputStream instream = entity.getContent();
    BufferedReader br = new BufferedReader(new InputStreamReader(instream));
    String tempLine;
    while ((tempLine = br.readLine()) != null) {
    sb.append(tempLine);
    }
    }
    // 获取服务端的session
    CookieStore mCookieStore = hc.getCookieStore();
    List<Cookie> cookies = mCookieStore.getCookies();
    for (int i = 0; i < cookies.size(); i++) {
    Log.i("session", cookies.get(i).toString());
    // 这里是读取Cookie['JSPSESSID']的值存在静态变量中,保证每次都是同一个值
    if ("JSESSIONID".equals(cookies.get(i).getName())) {
    JSESSIONID = cookies.get(i).getValue();
    break;
    }
    }
    } else {
    // str = "" + statusCode;// 请求失败返回代码
    Toast.makeText(context, "连接失败,请查检网络", Toast.LENGTH_SHORT).show();
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    post.abort();
    return sb.toString();
    }

    /**
     * 发送服务器请求
     * **/
    public String Post(String url, List<BasicNameValuePair> params) { HttpPost post = new HttpPost(server + url);
    if (null != JSESSIONID) {
    post.setHeader("Cookie", "JSESSIONID=" + JSESSIONID);
    }
    try {
    post.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }

    HttpResponse response;
    StringBuffer sb = new StringBuffer();
    try {
    response = hc.execute(post); /** 返回状态 **/
    int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) {
    HttpEntity entity = response.getEntity();
    if (entity != null) {
    InputStream instream = entity.getContent();
    BufferedReader br = new BufferedReader(new InputStreamReader(instream));
    String tempLine;
    while ((tempLine = br.readLine()) != null) {
    sb.append(tempLine);
    }
    }
    // 获取服务端的session
    CookieStore mCookieStore = hc.getCookieStore();
    List<Cookie> cookies = mCookieStore.getCookies();
    for (int i = 0; i < cookies.size(); i++) {
    Log.i("session", cookies.get(i).toString());
    // 这里是读取Cookie['JSPSESSID']的值存在静态变量中,保证每次都是同一个值
    if ("JSESSIONID".equals(cookies.get(i).getName())) {
    JSESSIONID = cookies.get(i).getValue();
    break;
    }
    }
    } else {
    if (context != null) {
    Toast.makeText(context, "连接失败,请查检网络", Toast.LENGTH_SHORT).show();
    }
    }
    post.abort();
    // System.out.println(sb.toString());
    } catch (ClientProtocolException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    return sb.toString(); } /**
     * @return the context
     */
    public Context getContext() {
    return context;
    } /**
     * @param context
     *            the context to set
     */
    public void setContext(Context context) {
    this.context = context;
    }
    }
      

  3.   

    个人理解
    1、一般用的都是http的,也有https或者其他的。
    2、不是特有的,https那些也有的,这个不用纠结吧,知道http有就行。
    3、先有会话再有请求,request里可以拿到对应的session,session可以进行会话跟踪。
      

  4.   

    session和cookie严格意义上应该不算HTTP协议,这2者都属于会话跟踪技术。HTTP协议是无状态的,也就是说你先后发起2次HTTP请求,第二次无法获取第一次的相关信息,这一点会造成浏览器使用的极度不方便,所以浏览器都提供了会话跟踪技术,无论是session还是cookie都是提供一种方法,让用户发起的多次HTTP请求之间有一个沟通的渠道。手机APP经常使用web service和后台服务器沟通,一般web service的框架都是支持session的,也就是所谓的跨服务会话。