我现在正在开发我的第一个Android应用程序。
我的应用程序使用SOAP消息与Web服务交互。
Web服务位于glassfish4
服务器。
所以我希望每个与Web服务交互的用户都会获得代表Web服务的类的新实例。
我阅读了如何执行此操作,我需要将@HttpSessionScope
注释添加到Web服务类。
但是我应该在客户端编写什么,在Android应用程序中启用会话跟踪?
由于
答案 0 :(得分:0)
应该是Android用户登录的web服务。 webservice的结果还应包含登录用户的会话ID(仅当用户已登录时)。 并且可以通过在会话头(或请求属性)中将会话ID作为cookie传递来跟踪会话。 这是一个从this answer引用的java代码,用于发出请求属性请求。
try {
URL url = new URL("https://visruthcv.appspot.com/project/listUsers");
URLConnection con = url.openConnection();
HttpURLConnection httpUrlConnection = (HttpURLConnection) con;
httpUrlConnection.setReadTimeout(10000);
httpUrlConnection.setConnectTimeout(15000);
httpUrlConnection.setRequestMethod("POST");
httpUrlConnection.setDoInput(true);
httpUrlConnection.setDoOutput(true);
/*
* for request headers
*/
httpUrlConnection.setRequestProperty("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
httpUrlConnection.setRequestProperty("Accept-Charset",
"ISO-8859-1,utf-8;q=0.7,*;q=0.3");
httpUrlConnection.setRequestProperty("Accept-Encoding", "gzip,deflate,sdch");
httpUrlConnection.setRequestProperty("Accept-Language", "en-US,en;q=0.8");
httpUrlConnection.setRequestProperty("Connection", "keep-alive");
httpUrlConnection.setRequestProperty("Cookie", "JSESSIONID=9550495DDC72AAC410B07B6C16908CB5");
/*
* for adding request parameters
*/
Map<String, Object> params = new HashMap<String, Object>();
params.put("username", "Visruth");
params.put("password", "passwd");
OutputStream os = httpUrlConnection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
os.close();
httpUrlConnection.connect();
// To write to a file, something like this
InputStream is = httpUrlConnection.getInputStream();
FileOutputStream fos = new FileOutputStream("/home/visruth/Desktop/output.txt");
int i = 0;
byte[] b = new byte[1024];
while((i = is.read(b)) != -1) {
fos.write(b);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
在上面的代码中,httpUrlConnection.setRequestProperty("Cookie", "JSESSIONID=9550495DDC72AAC410B07B6C16908CB5");
将会话ID(9550495DDC72AAC410B07B6C16908CB5
)设置为请求属性中的Cookie。 Cookie值格式为JSESSIONID=9550495DDC72AAC410B07B6C16908CB5
,其中9550495DDC72AAC410B07B6C16908CB5
仅是会话ID在网络中创建的内容。通过添加cookie来进行每个请求可以跟踪会话。