Java 在Ajax调用中获取会话数据
您好,我正在查询数据库以根据某些条件加载所有项目,并将会话中的结果设置为Java 在Ajax调用中获取会话数据,java,ajax,jsp,session,jakarta-ee,Java,Ajax,Jsp,Session,Jakarta Ee,您好,我正在查询数据库以根据某些条件加载所有项目,并将会话中的结果设置为 data = service.getData(); session.setAttribute("data", data); 现在我试图通过Ajax调用访问这些数据,我的Ajax调用由另一个servlet提供,而不是从DB获取数据的servlet 使用jquery的Ajax调用 $.ajax({ type: "POST", url: "/com/tp/AjaxXML.jsp", data: ({cm
data = service.getData();
session.setAttribute("data", data);
现在我试图通过Ajax调用访问这些数据,我的Ajax调用由另一个servlet提供,而不是从DB获取数据的servlet
使用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 ");
}
}
if(“report.equals(cmd)){
列表数据=(列表)请求.getSession().getAttribute(“数据”);
如果(数据==null){
System.out.println(“数据为空”);
}
}
每次我通过Ajax调用将数据获取为null时,无论我如何尝试从第一个servlet正常访问会话数据,它都能正常工作
如果我做错了什么,有人能告诉我吗
当我们执行session.getId()时,我注意到了另一件事代码>和pageContext.getSession().getId()代码>
他们两个都返回了不同的Id?这对我来说应该是一样的吗?有人对此有不同意见吗
当我们执行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模式的servlet的doPost()
方法中
另见:
当我们执行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模式的servlet的doPost()
方法中
另见:
您需要显示更多围绕您发布的两行代码的代码。@gurung我认为其余代码与此无关,我只是想知道我们是否可以通过ajax调用访问会话中的数据集?请尝试使用request.getSession(false)
在第二种情况下。您可能想检查一下:这仍然无法处理request.getSession(false),该链接指的是Php,但是我在J2EEM中遇到了这个问题。您需要显示更多围绕您发布的两行代码的代码。@gurung我认为其余代码与此无关。我只想知道我们是否可以通过ajax调用访问会话中的数据集?请尝试使用request.getSession(false)
在第二种情况下。您可能想检查一下:这仍然无法处理请求。getSession(false),该链接指向Php,但是我在J2EE中遇到了这个问题