不确定如何解决此问题,请在此处寻求帮助。
Ajax调用将用户信息带到servlet,我将用户对象保存在HttpSession中,控制权返回到Ajax,从那里我通过控制器servlet将控制权重定向到下一个JSP页面。但是,如果我尝试从HttpSession检索对象,则为null ..不知道如何解决此问题。
这是我的firstservlet代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get values from http request
// persist "user" object to database
HttpSession session = request.getSession(); //
session.setAttribute("user", user); //setting session variable
Gson gson = new Gson();
JsonElement jsonElement = null;
jsonElement = gson.toJsonTree("/nextservlet");
response.setContentType("text/plain");
PrintWriter out=response.getWriter();
}
这是我的Javascript / AJAX代码,用于将请求重定向到nextservlet
$.ajax({
type: 'POST',
url: ‘firstservlet’,
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify(quiz),
success: function(result) {
//result = /nextservlet
window.location.href = result;
},
error:function(data,status,er) {
console.log("Error:",er);
}
});
最后,控制权进入nextservlet-我要在其中处理数据,然后显示新的JSP页面。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
HttpSession session = request.getSession();
User user = session.getAttribute(“user”); //<--- this is NULL
LOG.warning("User id is : " + user.getId()); //<--- hence error here
RequestDispatcher dispatcher = request.getRequestDispatcher
("/anotherpage.jsp");
dispatcher.forward(request, response);
}
是有问题的,因为我正在使用-> window.location.href = result将请求发送到nextservlet ..并转到doGet?
答案 0 :(得分:0)
我不确定,但是我在Ajax中看到
url: ‘firstservlet’,
type: 'POST'
和控制转到nextservlet的doGet方法。应该是post方法的nextservlet,所以请使用doPost方法。
答案 1 :(得分:0)
我不确定...但是尝试一下
success: function(result) {
// result = /nextservlet
var form = document.createElement('form');
form.action = result;
form.method = 'GET'
form.submit();
}
$.ajax({
type: 'POST',
url: '/firstservlet',
dataType: 'json',
contentType: 'application/json',
data: JSON.stringfy(quiz),
success: function(result) {
console.info(result);
var form = document.createElement('form');
form.action = result;
form.method = 'GET';
document.body.appendChild(form);
form.submit();
},
error: function(data, status, err) {
console.log("Error: ", err);
}
});
HttpSession session = request.getSession();
session.setAttribute("test", "test");
Gson gson = new Gson();
JsonElement jsonElement = gson.toJsonTree("/nextservlet");
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
out.print(gson.toJson(jsonElement));
可以在doGet方法中读取会话属性。