【问题标题】:How to properly call ajax from jquery to Servlet? [duplicate]如何正确地从 jquery 调用 ajax 到 Servlet? [复制]
【发布时间】:2018-03-11 09:20:39
【问题描述】:

我在调用 ajax 请求时遇到问题。Servlet 返回整个页面作为响应

HTML 代码

<form action="userlogin" method="POST">
            User name : <input type="text" name="username" id="username"/><br/>
            Password : <input type="text" name="password" id="password"/><br/>
            <input type="submit" value="Login" name="submitbtn" id="submitbtn"/><br/>
            <label id="failedText"></label>
</form>

JQuery 代码

$(document).ready(function () {
$("input[name='submitbtn']").click(function (e) {
    e.preventDefault();
    $.ajax({
        url: 'userlogin',
        type: 'POST',
        data: $("form[action='userlogin']").serializeArray(),
        success: function (responseText) {
            if (responseText != 'failure')
                $("form[action='userlogin']").submit();
            else
                $('#failedText').text('Invalid Username or password');
        }
    });

});
});

Serlet 代码

String username = request.getParameter("username");
String password = request.getParameter("password");
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
if (username.equals("admin") && password.equals("password")) {
    path = "adminhome.html";
    response.sendRedirect(path);
}else
    response.getWriter().write("failure");

如果失败,它会按照我想要的方式工作,如果成功,我需要导航到管理主页,但代码会以整个页面作为响应文本进行响应。

【问题讨论】:

    标签: java jquery servlets


    【解决方案1】:

    当您执行response.sendRedirect(path) 时,浏览器将再次调用以加载新路径。在您的情况下,对userlogin 的第一个请求 是一个 AJAX 调用,$.ajax 将遵循重定向并获取要呈现的最终 html,因此您将获得该结果。 不用sendRedirect,您可以将路径作为字符串返回并使用JS加载内容。

    更新用于管理员用户检查的 Servlet 代码

    if (username.equals("admin") && password.equals("password")) {
        path = "adminhome.html";
        response.getWriter().write(path);
    }
    

    并将 JS 更新为

    success: function (responseText) {
        if (responseText != 'failure')
            // make sure you provide the correct URL from the server
            window.location = responseText;
        else
            $('#failedText').text('Invalid Username or password');
    }
    

    【讨论】:

    • 使用您的方法是否存在安全相关问题?,感谢您的回答。
    • 我认为,您这样做是为了学习。当然,您不会硬编码 Servlet 上的凭据来检查管理员用户。所有其他资源,应该只允许管理员用户,必须检查用户是否有正确的授权,然后允许用户。如果您无论如何都要进行重定向,为什么要使用 Ajax。只需根据用户重定向到正确的页面。
    • 是的,这是针对我的项目的,不使用硬编码凭据,它用于检查代码,以及用于管理员的单独 servlet,如何在不使用 ajax 的情况下以用户友好的方式进行交互?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 2011-01-12
    • 2011-04-06
    • 1970-01-01
    • 2012-06-05
    • 2014-03-26
    • 2013-03-28
    相关资源
    最近更新 更多