嗨我正在查询数据库,根据某些条件加载所有项目,并将此结果设置为会话
data = service.getData();
session.setAttribute("data", data);
现在我试图通过Ajax调用访问这些数据,我的Ajax调用由不同的servlet提供,而不是从DB获取数据。
使用jquery调用Ajax
$.ajax({
type: "POST",
url: "/com/tp/AjaxXML.jsp",
data: ({cmd: "report"}),
dataType: "xml",
success: function(xml) {
$(xml).find('site').each(function(){
var url = $(this).attr('url');
});
}
});
在我的AjaxXML.jsp
中我在做
if("report".equals(cmd)){
List<Object> data = (List<Object>)request.getSession().getAttribute("data");
if(data == null){
System.out.println("data is null ");
}
}
每次我通过Ajax调用将数据作为null获取时,我是如何尝试通常从我的第一个servlet访问会话数据。
如果我做错了什么,有人会告诉我吗?当我们session.getId();
和pageContext.getSession().getId();
时,我注意到了另一件事
他们俩都回归不同的身份?对我来说,他们应该和那些人有什么不同吗?
答案 0 :(得分:1)
当我们
session.getId();
和pageContext.getSession().getId();
两个人都返回不同的ID时,我又注意到了一件事情?对我来说,他们应该和那些人有什么不同吗?
不,他们绝对不应该有所不同。但我假设您已在相同请求中检查过它们。如果您在不同的请求中检查它们,那么差异可以通过缺少正确的JSESSIONID cookie来解释。 Cookie是域和特定于上下文的。您显然是将ajax请求发送到其他域/上下文。 ajax URL中的前导斜杠/
也证实了这个更少或更多。确保您将其发送到相同的域/上下文。使用与上下文相关的URL,如url: "AjaxXML.jsp"
,并将代码移动到相同的域/上下文,或在服务器级别打开不同上下文之间的会话共享。
无关具体问题,在JSP中执行Ajax响应处理是一个坏主意。而是在servlet中进行。
替换
url: "/com/tp/AjaxXML.jsp",
通过
url: "/com/tp/AjaxXML",
并将代码放在servlet的doPost()
方法中,该方法映射在该URL模式上。