【问题标题】:How can I display an error message, that stays when redirected back to a different servlet?如何显示错误消息,当重定向回不同的 servlet 时仍然存在?
【发布时间】:2019-09-08 21:20:57
【问题描述】:

我有一个名为 LoginPage 的 java servlet,它是用户将登录信息输入表单的可视界面,还有另一个名为 Login 的 servlet,它是一个临时页面,仅用于检查、查询数据库在重定向到另一个 servlet 之前确认它确实是一个有效的登录。

//LoginPage
try (PrintWriter out = response.getWriter()) {
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Login</title>");        
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Activities Week Login</h1></br>");
            out.println("<form action=\"login\" method=\"post\">"
                    + "Email:</br>"
                    + "<input type='text' name='Email'></br>"
                    +"Password:</br>"
                    + "<input type='password' name='Password'></br></br>"
                    + "<input type='submit' value='Submit'></form>");
            out.println("</br></br></br>");
            out.println("Dont have an account yet? <a href=\'createaccountpage\'>Create one.</a></br></br>");
            out.println("Forgotten your password? <a href=\'forgottenpasswordpage\'>Reset it.</a>");
            out.println("</body>");
            out.println("</html>");
        }
//Login
SQLConnection sqlconnection = new SQLConnection();
        String Email = (String)request.getParameter("Email");
        String Password = (String)request.getParameter("Password");


        if(sqlconnection.checkValidLogin(Email, Password) == false)//If the login details are incorrect:
        {
            PrintWriter out = response.getWriter();
            out.println("<meta http-equiv='refresh' content='3;URL='>");//redirects after 3 seconds
            out.println("<p style='color:red;'>Login unsuccessful! Please check your details and try again.</p>");      
            response.sendRedirect("");
        }
        else//If the login details are correct:
        {
            User currentUser = sqlconnection.getCurrentUser(Email);
            HttpSession session = request.getSession();
            session.setAttribute("Email", Email);

            if(sqlconnection.isUserTeacher(Email)==true)//If the user is a teacher
            {
                Teacher currentTeacher = new Teacher();
                currentTeacher.setUser(currentUser);
                session.setAttribute("currentTeacher", currentTeacher);
                PrintWriter out = response.getWriter();
                out.println("<meta http-equiv='refresh' content='3;URL=studenthomepage'>");//redirects after 3 seconds
                out.println("<p style='color:green;'>Login successful!</p>");
                response.sendRedirect("studenthome");
            }
            else{
                Student currentStudent;
                currentStudent = sqlconnection.getCurrentStudent(Email, currentUser);
                session.setAttribute("currentStudent", currentStudent);
                PrintWriter out = response.getWriter();
                out.println("<meta http-equiv='refresh' content='3;URL=studenthomepage'>");//redirects after 3 seconds
                out.println("<p style='color:green;'>Login successful!</p>");
                response.sendRedirect("studenthome");
            }
        }

如果提供的登录信息不正确,如何在重定向回 LoginPage 时显示错误消息?

我已经看到并尝试了一些其他方法(没有帮助),例如 Login servlet 中已有的方法:

out.println("<meta http-equiv='refresh' content='3;URL=studenthomepage'>");//redirects after 3 seconds
                out.println("<p style='color:green;'>Login successful!</p>");

这种方法不是一个好的解决方案(还是我做错了),如果是我应该使用什么?

【问题讨论】:

    标签: java servlets


    【解决方案1】:

    你可以set attribute 和一些message 如下:

     String msg=  "Sorry !! You have an error";
                request.getSession().setAttribute("msg", msg);//setting attribute
                // forwards message to your page
                 request.getRequestDispatcher("yourloginpage").forward(request,response);
    

    现在,在您的login page 表格顶部写下如下内容:

         HttpSession session = request.getSession();//getting session
         String msg;
       //checking if msg is not null 
          if(session.getAttribute("msg")!=null){
             msg= (String)session.getAttribute("msg");
            out.println("<p style='color:green;'> "+msg+"</p>"); //printing message
           }
    

    希望对你有帮助!

    【讨论】:

    • 谢谢!在您回答的第一段代码中,您选择使用request.getRequestDispatcher("yourloginpage").forward(request,response); 而不是response.sendRedirect("yourloginpage") 有什么特别的原因吗?
    • 这里阅读this
    • 已经完成了。我仍然不确定何时使用哪个,那么在大多数情况下使用forward(request,response) 是可取/更好的做法吗?
    • 阅读this也,这里给出了例子,什么时候使用..它会帮助你:)
    • 我明白了......所以通过使用forward,用户查看的页面不会改变,但请求已传递到服务器上的另一个 servlet,从而允许打印错误。我想我现在明白了吗?非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    相关资源
    最近更新 更多