我的代码是
function showRecords() {
db.transaction(function (tx) {
tx.executeSql(selectAllStatement, [], function (tx, result) {
dataset = result.rows;
for (var i = 0, item = null; i < dataset.length; i++) {
item = dataset.item(i);
$('#results').append('<tr><td><input type="text" value="' + item['lastName'] + '"></input> </td>, <td><input type="text" value="' + item['firstName'] + '"></input></td></tr>');
}
});
});
}
此servlet的url模式是/ loginServlet。 我编写了这段代码,以便如果用户登录并通过点击输入url发出get请求,则必须将请求转发给doPost() 或者如果用户没有登录,那么他会进入登录页面
但问题是它总是返回到登录页面,这意味着request.getSession(false)总是返回null
我该如何解决这个问题
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session=request.getSession(false);
if(session==null){
response.sendRedirect(request.getContextPath());
}else{
doPost(request,response);
}
}
在doPost()中我第一次创建会话
答案 0 :(得分:0)
我认为问题在于,当您直接通过doPost()
方法致电doGet()
时,请求参数name
,commun
和password
不可用。因此,身份验证SQL查询失败,您的else
块执行。
} else {
System.out.println("either ur username or password or community was wrong");
response.sendRedirect(request.getContextPath());
}
这实际上与您的doGet()
if
阻止相同,因此给人的印象是session
为null
。
if (session == null) {
response.sendRedirect(request.getContextPath());
}
因此,要解决此问题,如果session
存在,请立即重定向用户,而不是尝试执行doPost()
再次对其进行身份验证。 name
属性的存在可以进一步确保用户之前已经过身份验证。
if (session != null && session.getAttribute("name") != null) {
RequestDispatcher rd = request.getRequestDispatcher("/homey");
rd.forward(request, response);
} else {
response.sendRedirect(request.getContextPath());
}