【问题标题】:Why is servlet not forwarding after successful AJAX call?为什么 AJAX 调用成功后 servlet 不转发?
【发布时间】:2014-09-26 04:14:30
【问题描述】:

我试图在用户成功登录后将其转发到 admin.jsp 页面。用户名和密码的检查是通过 AJAX 完成的。一切正常,直到我尝试将它们转发到 admin.jsp 页面,这是引发 AJAX 错误的时候。

这里是 AJAX:

$("#loginForm").submit(function(e){
    e.preventDefault(); //STOP default action
    var postData    = $("#loginForm").serializeArray();
    var username    = $("#username").val();
    var password    = $("#password").val();

        if(username.length > 0 && password.length){
            $.ajax(
                {
                    type: "POST",
                    url : "HomeController",
                    data : postData,
                    success: function(data) 
                    {
                        $("#loginResult").html(data);


                    },
                    error: function(jqXHR, textStatus, errorThrown) 
                    {
                        $("#loginResult").html("<p>ss"+errorThrown+textStatus+jqXHR+"</p>");
                    }
                });
            //$("#loginForm").hide();


        }else{
            $("#loginResult").html("<p>Unable to login: ensure details are correct.</p>");
        }
});

这里是处理登录的 servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String form         = request.getParameter("form");
    String views        = "/WEB-INF/views/";

    // check login details
    if(form.equals("loginForm")){
        String username = request.getParameter("username").trim();
        String password = request.getParameter("password").trim();

        PrintWriter out = response.getWriter(); 

        password = loginService.hashPassword(password);
        boolean isValidUser = loginService.checkUser(username, password);

        if(isValidUser){
            // set session
            HttpSession session = request.getSession();

            session.setAttribute("loggedIn", "true");
            response.sendRedirect(views + "admin.jsp");

        }else{
            out.println("Incorrect login details.");
        }


    }

}

为什么 AJAX 调用收到错误而不转发到 admin.jsp 页面?

【问题讨论】:

    标签: java jquery ajax jsp servlets


    【解决方案1】:

    您不能重定向到WEB-INF 内的资源。根据设计,该目录中的所有资源对浏览器都是不可见的。

    要么将 JSP 保留在 WEB-INF 之外,要么转发到 JSP。

    RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/admin.jsp");
    view.forward(request, response);
    

    注意: forward/include 不会改变浏览器中的 URL。

    Read more...

    【讨论】:

    • 使用此代码将管理页面的内容返回给 AJAX 调用,并在 loginResult div 中显示管理页面。我希望能够在成功登录后真正转发到管理页面。
    猜你喜欢
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多