HttpSession session = request.getSession(false); ruturning null

时间:2015-08-17 08:55:21

标签: session servlets

我的代码是

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()中我第一次创建会话

1 个答案:

答案 0 :(得分:0)

我认为问题在于,当您直接通过doPost()方法致电doGet()时,请求参数namecommunpassword不可用。因此,身份验证SQL查询失败,您的else块执行。

 } else {
     System.out.println("either ur username or password or community was wrong");
     response.sendRedirect(request.getContextPath());
 }

这实际上与您的doGet() if阻止相同,因此给人的印象是sessionnull

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());
}