java - 如何显示重定向回不同 servlet 时保留的错误消息?

标签 java servlets

我有一个名为 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");
            }
        }

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

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

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

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

最佳答案

您可以使用一些消息设置属性,如下所示:

 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);

现在,在您的登录页面上在表单顶部写下如下内容:

     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
       }

希望这对您有帮助!

关于java - 如何显示重定向回不同 servlet 时保留的错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55747696/

相关文章:

json - <不可读> 对于 100000 字节或以上的 POST 正文长度,也适用于 blob/FormData

java - 从 mysql DB 检索数据后如何创建 XML 文件?

java - 这段代码是否滥用了观察者模式?

java - 如何在BoxLayout中的JButton之间添加垂直空间?

java.lang.ClassCastException : com. sun.xml.bind.v2.runtime.JAXBContextImpl 无法转换为 com.sun.xml.bind.api.JAXBRIContext

java - spring-boot 如何提供特定的 url?

java - Eclipse调试: Stack trace on event

java - 为什么打印静态变量值会在静态 block 中给出错误,而分配它却不会

java - 如何通过 Java File api 加载 Tomcat 中的资源

具有请求和 session 范围的 Java Bean