我能';无法从jsp获取会话

我能';无法从jsp获取会话,jsp,session,servlets,Jsp,Session,Servlets,我要试着解释我的问题。 我有一个login.jsp,您在其中填写用户名和密码并将其发送到一个servlet,这个servlet使用数据库检查是否正确调用userLogged.jsp,如果不正确,则发送到invalidLogin.jsp。 这很好,即使在获取userlogged.jsp时,我也可以检索在servlet中创建的会话数据。 jsp创建一个包含三部分的html页面,一个按钮用于继续,一个表单用于更改密码和一个横幅。然后,当我单击按钮继续时,我调用servlet,但在这里我无法获取会话,始

我要试着解释我的问题。 我有一个login.jsp,您在其中填写用户名和密码并将其发送到一个servlet,这个servlet使用数据库检查是否正确调用userLogged.jsp,如果不正确,则发送到invalidLogin.jsp。 这很好,即使在获取userlogged.jsp时,我也可以检索在servlet中创建的会话数据。 jsp创建一个包含三部分的html页面,一个按钮用于继续,一个表单用于更改密码和一个横幅。然后,当我单击按钮继续时,我调用servlet,但在这里我无法获取会话,始终为null。 单击按钮时如何将会话信息传递给servlet? 我粘贴的代码,如果你需要更多的信息,请让我知道。多谢各位

SERVLET

    private void getLogin(HttpServletRequest request, HttpServletResponse response, DataAccessUtils dao) throws ServletException, IOException
{
    String userName = request.getParameter("username");
    String userPassword = request.getParameter("password");

            // DATABASE ACCESS
    Login login = new Login();
    String[] currentUser = login.validateLogin(userName, userPassword, dao);

    if (!currentUser[0].equals("-1"))
    {                 
        String nextJSP = "/actions/userLogged.jsp";
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);

        HttpSession session = request.getSession(true);     
        session.setAttribute("username", currentUser[0]);                   
        session.setAttribute("agencyname", currentUser[1]);
        session.setAttribute("branchname", currentUser[2]);
        session.setAttribute("currenttravelfile", "N/A");

        dispatcher.forward(request,response);
    }                   
    else
    {
        response.sendRedirect("actions/invalidLogin.jsp"); //error page 
    }
}

private void getGoToMenu(HttpServletRequest request, HttpServletResponse response, DataAccessUtils dao) throws ServletException, IOException
{
    // HERE ALWAYS IS NULL  
    String username = (String)request.getSession().getAttribute("username");

    String nextJSP = "/actions/menu.jsp";       
    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
    dispatcher.forward(request,response);
}   
jsp(仅我调用servlet的部分)



修改密码
当前密码
新密码
确认新密码

赞助链接
您正在设置属性并在同一个servlet中获取它。我认为这是造成问题的原因。尝试在代理表单时调用另一个servlet,并在该servlet中使用getAttribute()。让我知道这是否有效。我刚刚尝试了您所说的方法,但结果相同,为null。我认为问题在于,当您提交表单时,请求对象会重新启动并丢失会话。但我不确定。谢谢您的帮助。继续按钮是否会调用
getGoToMenu()
?如果没有,你能在得到空会话的地方发布servlet代码吗?是的,这是我的想法,如果你不想更改密码,点击“转到菜单”,这个按钮调用servlet。但是当我在servlet中检查会话时,它是空的。我尝试了使用标记,使用它,我得到了会话,但问题是,这个标记是在显示html页面之前执行的。如果我可以在单击按钮时“执行”转发,就可以了。
            <form action="./getjsprequestservlet" method="post" id="userlogged-form">       
            <fieldset>
                <div style="margin-bottom:1em; margin-left: 11em;">     
                    <input type=hidden name=action id=opr value="gotomenu"/>
                    <input type="submit" value="Go To Menu" class="button round blue image-right ic-right-arrow"></input>
                </div>


                <div class="information-box round">
                    <input type=hidden name=action id=opr value="change-password"/>
                    <p>
                        <label class="title">Change Password</label>
                        <label>Current Password</label>                 
                        <input type="password" name="password" id="login-password" class="round full-width-input" />
                        <label>New Password</label>                 
                        <input type="password" name="password" id="login-password" class="round full-width-input" />
                        <label>Confirm New Password</label>                 
                        <input type="password" name="password" id="login-password" class="round full-width-input" />
                        <input type="submit" value="Change" class="button round blue image-right ic-right-arrow"></input>
                    </p>
                </div>
            </fieldset> 
        </form> 

        <div class="banner-box round">
            <label class="alt-label">Sponsored links </label>
            <table id="raw">
                <tr>
                    <td>                    
                        <a href="#" class="fr"><img src="./images/test.gif"/></a>
                    </td>
                    <td>
                        <a href="#" class="fr"><img src="./images/test2.gif"/></a>
                    </td>
                    <td>
                        <a href="#" class="fr"><img src="./images/test3.gif"/></a>
                    </td>
                </tr>
            </table>                                        
        </div>      
    </div> <!-- end content -->