1

我是 servlet 和 jsp 的新手,但我可以编写简单的。目前在我的 webapp 的所有页面上,都有一个登录表单,添加了 jsp:include。我想创建登录机制,以便在验证用户后,我不会被重定向(简单的 servlet 机制),但登录表单会消失(就像在大多数普通网站中一样)。

我找到的所有示例,它们都教我如何验证+重定向。我怎么能做我指定的呢?如果它很复杂,那么至少是大方向,现在我什至不知道到底该用谷歌搜索什么。

谢谢

4

2 回答 2

0

您可以使用会话变量来检查当前是否有任何用户登录。如果用户已登录,则不显示登录表单,可能只显示一个注销按钮。如果用户未登录,则显示登录表单。

会话变量可以这样设置:

HttpSession ses=request.getSession(); ses.setAttribute("name",user);

会话变量可以这样引用:

HttpSession ses=request.getSession(false); if(ses.getAttribute("name")== null) //set flag to default value and check flag to know no one is currently logged in else //set flag to some other value to show someone is currently logged in

编辑

在您的验证 servlet 和注销 servlet 中使用以下代码(您需要一个)。对于其他事情,您可以使用简单的 if-else 条件。

HttpSession ses=request.getSession(); ses.setAttribute("name",user);

和:

HttpSession ses=request.getSession(); ses.invalidate();

于 2012-04-24T17:57:34.250 回答
0

使用两个 servlet - 一个登录表单 jsp 和一个登录验证 servlet。登录表单 jsp 与您当前的 jsp 类似,但不会验证/重定向,如果用户未登录,则仅显示登录表单。您可以使用会话属性进行检查。如果用户已登录,则在呈现时它应该只是空白。登录表单本身不应重定向到另一个页面,而是执行 AJAX 请求。

TL;DR:登录 jsp 需要使用 javascript (AJAX) 处理与 LoginServlet 的通信。

登录.jsp:

<% if (session.getAttribute("isLoggedIn") != null) {%>
    $.post('LoginServlet', function(data) {
        //hide this with js
    });
<% } %>

这将发布到 LoginServlet,它将isLoggedIn在成功登录时设置属性。它还会向 AJAX 表单返回一些 json 或 xml 响应。

public class LoginServlet extends HttpServlet
{
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException
    {
        String user = req.getParameter("username");
        String pass = req.getParameter("password");

        if (login(user, pass))
        {
            req.getSession().setAttribute("isLoggedIn", true);
            returnJsonOKAnswer();
        }
        else
        {
            returnJsonInvalidUserOrPassAnswer();
        }
    }
    //...
}
于 2012-04-24T20:28:15.280 回答