Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果用户已登录,则重定向到主页_Java_Jsp_Session_Servlets - Fatal编程技术网

Java 如果用户已登录,则重定向到主页

Java 如果用户已登录,则重定向到主页,java,jsp,session,servlets,Java,Jsp,Session,Servlets,可能重复: 如果登录用户单击了login.jsp页面,那么他应该自动重定向到他的home.jsp。在身份验证之前,用户转到login.jsp,在通过servlet(doPost)成功身份验证之后,他被重定向到home.jsp,但是当同一用户再次单击登录页面时,他应该被自动重定向到home.jsp,而不是再次登录。如何在JSP/Servlet中实现这一点?在成功验证后,我正在从该servlet设置会话 在登录之前,用户单击login.jsp并转到servlet的doPost()方法并转到home

可能重复:

如果登录用户单击了
login.jsp
页面,那么他应该自动重定向到他的
home.jsp
。在身份验证之前,用户转到
login.jsp
,在通过servlet(doPost)成功身份验证之后,他被重定向到
home.jsp
,但是当同一用户再次单击登录页面时,他应该被自动重定向到
home.jsp
,而不是再次登录。如何在JSP/Servlet中实现这一点?在成功验证后,我正在从该servlet设置会话

在登录之前,用户单击
login.jsp
并转到servlet的
doPost()
方法并转到
home.jsp
。成功登录后,如果用户再次单击
login.jsp
,则控件不应转到
login.jsp
,而应直接转到
home.jsp
。我怎么做


如果用户已注销,则只有在单击
login.jsp
后,控件才会转到
login.jsp
,然后转到servlet的
doPost()
,最后才会出现
home.jsp

在您的login.jsp中尝试此代码

if(session.getAttribute("authenticated")!=null && session.getAttribute("authenticated").equals(true))
{
   response.sendRedirect("home.jsp");
}

为了您的帮助,我已经编写了一个示例,并在我的机器上执行了代码

在servlet页面的
doPost
中:

String username = request.getParameter("username");
String password = request.getParameter("password");
boolean isCredentialValid = validateCredentials(username, password);
String nextPage ="";
HttpSession session = request.getSession(true);
if(isCredentialValid){
    nextPage = "home.jsp";
    session.setAttribute("isLoggedIn", "true");
}else{
    request.setAttribute("error", "Either username or password is invalid.");
    nextPage ="login.jsp";
}
RequestDispatcher rd = request.getRequestDispatcher(nextPage);
rd.forward(request, response);
login.jsp中

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script type="text/javascript">
  var isLoggedIn = "<%= (String)session.getAttribute("isLoggedIn")%>";
  if(isLoggedIn === "true")
     window.location.href="home.jsp";
  }
</script>
</head>
<body>
   <form action="Test" method="post">
    ${error}
    <br/>
     UserName : <input type="text" name="username"/>
    <br/>
     Password : <input type="text" name="password"/>
    <br/>
    <input type="submit" value="submit"/>
  </form>
</body>

在此处插入标题
var isLoggedIn=“”;
如果(isLoggedIn==“真”)
window.location.href=“home.jsp”;
}
${error}

用户名:
密码:

检查用户是否已登录登录登录页面/操作,如果已登录,则重定向到主页:

if (alreadyLoggedIn) {
    response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + "/home"));
    return;
}

但是,如果用户已经登录,您可能首先不应该有登录页面的链接

我需要在身份验证之前设置它?是的,当用户第一次访问login.jsp并成功进行身份验证时,您可以像这样创建此属性。session.setAttribute(“已验证”,true);登录页面在主主页中,所以在通过servlet验证后,如果用户来到主主页并单击login.jsp,那么他会被重定向到home.jsp吗?是的。若authenticated属性设置为true,那个么用户将被重定向到home.jsp。还有一点,一旦用户登录,您需要隐藏登录链接。jsp@KashifKhan:如果他使用session.setAttribute(“authenticated”,true),并且如果(session.getAttribute(“authenticated”).equals(“true”),这将不起作用。字符串和布尔值永远不会相等。我需要在login.jsp?nope.中编写此代码。。登录页面将重定向到servlet。。在servlet中写入,因为您无法在浏览器右侧验证凭据。。根据我的理解,您需要通过servlet联系数据库。只有在用户给出用户名和密码后,登录页面才会重定向到servlet,如果他在单击login.jsp链接之前已经通过了身份验证,那么就不要转到login.jsp页面,而是转到login.jsp页面,然后login.jsp页面将如何自动重定向到servlet?更新了答案。。请检查一下。。希望一切都会清楚谢谢你的帮助我已经写了一个例子,并在我的机器上执行了代码,正如你所期望的那样。谢谢JB…但是我应该在servlet的doPost中写什么呢?我有到登录页面的链接,即使用户已经登录了。我应该写home.jsp而不是/home。。如下所示:response.sendRedirect(response.encodeRedirectURL(request.getContextPath()+“/home.jsp”);