首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

http、session相关有关问题

2013-07-16 
http、session相关问题1.请问一下大家,在移动互联网的开发中,手机端发送一个请求到后台服务器,后台处理好以

http、session相关问题
1.请问一下大家,在移动互联网的开发中,手机端发送一个请求到后台服务器,后台处理好以后返回手机,这个请求是通过http协议发送的吗?
2.还有就是我们通常所说的session、cookie中的session(或者说是javaEE中后台操作的session)是http协议特有的吗?就是说其他协议还有session吗?还是只能是http协议才有session?
3.假如:(1)手机发送请求是通过http协议,(2)session是http请求就能够创建的,那么是不是手机端发生的请求在后台也会产生session,也就是说我们可以用session进行会话跟踪 session http协议 移动互联网 java
[解决办法]
这个类是用来跟服务器连接的    
具体写了些什么东西你自己看看 
我原先做.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;
}






}


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

[解决办法]
session和cookie严格意义上应该不算HTTP协议,这2者都属于会话跟踪技术。

HTTP协议是无状态的,也就是说你先后发起2次HTTP请求,第二次无法获取第一次的相关信息,这一点会造成浏览器使用的极度不方便,所以浏览器都提供了会话跟踪技术,无论是session还是cookie都是提供一种方法,让用户发起的多次HTTP请求之间有一个沟通的渠道。

手机APP经常使用web service和后台服务器沟通,一般web service的框架都是支持session的,也就是所谓的跨服务会话。

热点排行
Bad Request.