【发布时间】:2014-02-12 00:07:54
【问题描述】:
我有一个 Java/Jsp Web 应用程序,在 search_list.jsp 页面中,我正在像这样在会话对象中设置结果 --
<%
Object resultdata = req.getSession().getAttribute("search_result");
if(resultdata == null)
{
resultdata = (SearchResult)getSearchResult();
request.getSession().setAttribute("search_result", resultdata);
}
%>
当我点击另一个页面并返回到 search_list.jsp 从会话中检索结果对象时,从 Web 浏览器工作正常,但相同的场景总是在 android 本机 webview 中返回 > resultdata null。以下是android原生应用的webview代码。
public class HomeActivity implements OnClickListener {
public WebView mWebView;
public String sessionCookie = null;
protected void onCreate(Bundle savedInstanceState) {
mWebView = (WebView) findViewById(R.id.webView1);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webSettings.setLoadsImagesAutomatically(true);
mWebView.loadUrl(appPrefer.getAppURL());
mWebView.setWebViewClient(new WebViewClient());
}
public void saveSession()
CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(mWebView.getContext());
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
if(mWebView!=null)
{
sessionCookie = cookieManager.getCookie(getCurrentURLLoad());
}
}
private void addSession(String url)
{
CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(mWebView.getContext());
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
if (sessionCookie != null) {
cookieManager.setCookie(url, sessionCookie);
CookieSyncManager.getInstance().sync();
}
}
这是本地按钮单击(返回结果的快捷方式)我再次加载 search_list.jsp 以显示结果。但在 Web 级别,我们已经搜索并显示结果并查看 profile.jsp 页面。所以点击原生 listview(url is search_list.jsp) 我添加会话如下:
public void onClick(View v) {
if(v.getId().== R.id.listview)
{
saveSession();
mWebView.loadUrl(HOST_URL + SEARCH_LIST );
addSession();
}
}
我的问题是它保存/传递所有其他会话 cookie 值,但设置为 request.session.attribute 的值没有出现,它们都是 >null,在 jsp 级别从本机点击更改后,url 结果数据始终为 null。
我已经尝试过回答中提到的方法,也尝试过 -https://gist.github.com/arpit/610754 方式,我总是看到我所有的 cookie 正确值(这已经在我发布的问题上工作了..).. 但是属性设置在HTTPRequest 会话不存在.. 我不认为它的 cookie 部分是 httpRequets 属性(HttpServletRequest->httpSession->setAttribute()),我的结论是它不在 Android webview 或 httpclient 端。请有人告诉我是正确的还是有办法读取http请求会话属性???
【问题讨论】:
-
你不是从 android 端的 jsp 端尝试
-
尝试保存会话?我不明白。
-
可以直接写
session.setAttribute()而不是request.getSession().setAttribute(),因为jsp中有session对象 -
是的,我知道,如果我这样做,我的会话属性也不会在 webview 下一个 url 加载中传递。
-
嗯,亲爱的你的解决方案
标签: java android jsp session webview