JSP:登录页面向servlet传递登录页面消息

JSP: Login page to servlet to login page message passing

本文关键字:登录 消息 servlet JSP      更新时间:2023-09-26

我希望我的this登录页面加载两次,即第一次用户键入用户名和密码,然后从servlet获得响应,然后它将被重定向到带有"messages"的登录jsp页面。

我有两个用于登录和注销的按钮。这个脚本可以像我尝试过的那样通过使用count变量加载两次吗?任何其他方法也是优选的。

另一个问题:我是否可以在登录成功后才启动会话,这样我就可以在每个页面上检查用户是否有效?

p.S:我试过使用getAttributesetAttribute,但它们不起作用。

if(userExists) {
    // check if password matches username or not
    if (pwd.equals(rs.getString("password"))) {
        System.out.println("Login Successful");
        message = "ValidUser";
    } else {
        message = "Invalid Password";
        System.out.println("Invalid Password from userExists");
    }
} else {
    message = "Invalid Username";
    System.out.println("Invalid Username");
}
request.getSession().setAttribute("message", message);
request.getSession().setAttribute("count", count); // count = 1;
response.sendRedirect(dest);  // dest ==> same login.jsp page

登录.jsp:-

<script type="text/javascript">
    var msg = <%= request.getAttribute("message") %>;
    var cnt = <%= request.getAttribute("count") %>;
    function log() {
        if (cnt != 1) {
            // document.userlogin.login.type = "submit";
            alert("Form Submitted");
            alert("count is " + cnt);
            alert("msg = " + msg);
        } else {
            document.userlogin.login.type = "button";
            if (msg == "ValidUser") {
                document.userlogin.login.disabled = true;
                document.userlogin.logout.disabled = false;
            } else if (msg == "Invalid Password") {
                alert("Invalid Password");
                document.userlogin.userpass.focus();
            } else if (msg == "Invalid Username") {
                alert("Invalid Username/ Please register and then login");
                document.userlogin.username.focus();
            } else {
                alert("msg = " + msg);
            }
        }
    }
</script>
<form name="userlogin" method="POST" action="../Login" onload="log();" >

我可以看到的一个问题是,在.jsp页面中,您正在request对象中查找messagecount属性,这些属性实际上存在于session中,而不是request中。因此更改如下:

var msg = '<%= request.getAttribute("message") %>'; // Here session needs to be checked
var cnt = '<%= request.getAttribute("count") %>';  // Here session needs to be checked

从jsp中的隐式会话对象获取属性。

var msg = '<%= session.getAttribute("message")%>';
var cnt = parseInt(<%= session.getAttribute("count")%>);

另一个问题can i have a session start only after login successfull so that i can check if user is valid or not at each page一旦用户向服务器发出请求,就会创建一个新会话(如果以前的会话不存在)。因此,无法阻止创建会话。

此外,如果登录失败,您可以将会话用于多个googd操作,例如您可以通过存储会话中的登录尝试次数并在检查登录信息之前将其与maximum login attempts allowed进行比较,将用户在多次失败后的最大登录尝试次数限制为