我是 servlet 和 jsp 的新手,但我可以编写简单的。目前在我的 webapp 的所有页面上,都有一个登录表单,添加了 jsp:include。我想创建登录机制,以便在验证用户后,我不会被重定向(简单的 servlet 机制),但登录表单会消失(就像在大多数普通网站中一样)。
我找到的所有示例,它们都教我如何验证+重定向。我怎么能做我指定的呢?如果它很复杂,那么至少是大方向,现在我什至不知道到底该用谷歌搜索什么。
谢谢
我是 servlet 和 jsp 的新手,但我可以编写简单的。目前在我的 webapp 的所有页面上,都有一个登录表单,添加了 jsp:include。我想创建登录机制,以便在验证用户后,我不会被重定向(简单的 servlet 机制),但登录表单会消失(就像在大多数普通网站中一样)。
我找到的所有示例,它们都教我如何验证+重定向。我怎么能做我指定的呢?如果它很复杂,那么至少是大方向,现在我什至不知道到底该用谷歌搜索什么。
谢谢
您可以使用会话变量来检查当前是否有任何用户登录。如果用户已登录,则不显示登录表单,可能只显示一个注销按钮。如果用户未登录,则显示登录表单。
会话变量可以这样设置:
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();
使用两个 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();
}
}
//...
}