Jakarta ee 不正确的数据会将用户从Servlet登录页重定向到空白页

Jakarta ee 不正确的数据会将用户从Servlet登录页重定向到空白页,jakarta-ee,servlets,login,Jakarta Ee,Servlets,Login,在我的项目中,用户通过提供他/她的emailid和密码登录。如果两者匹配,则可以成功登录。如果没有,他将被重定向到UserHome.jsp页面。这是我的密码: import getset.Getset; import java.io.IOException; import java.io.PrintWriter; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletExcep

在我的项目中,用户通过提供他/她的
emailid
密码登录。如果两者匹配,则可以成功登录。如果没有,他将被重定向到
UserHome.jsp
页面。这是我的密码:

import getset.Getset;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import accessdb.Dao;

public class LoginAuthentication extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Authentication and Logging in The Registered User
        Getset g=new Getset();
        Dao dao=new Dao();
        String userid="";
        String fname="";
        //    PrintWriter pw=response.getWriter();
        String loginemail=request.getParameter("loginemail");
        String loginpassword=request.getParameter("loginpassword");
        if (loginemail.equals("") || 
            loginemail.equals(" ") || 
            loginpassword.equals("") || 
            loginpassword.equals(" "))

            response.sendRedirect("WelcomePage.jsp");

        g.setloginemail(loginemail);
        g.setloginpassword(loginpassword);
        try {
            ResultSet rs=dao.loginauthentication(g);
            while(rs.next())
            {
                String regemail=rs.getString("regemail");
                String regpassword=rs.getString("regpassword");
                if(loginemail.equals(regemail) && 
                   (loginpassword.equals(regpassword))==true)
                {
                    ResultSet rs1=dao.getnameid(g);
                    while(rs1.next())
                    {
                         userid=rs1.getString("USERID");
                         fname=rs1.getString("FNAME");
                    }
                    HttpSession session = request.getSession(true);
                    session.setAttribute("USERID", userid);
                    session.setAttribute("FNAME", fname);
                    response.sendRedirect("UserHome.jsp");
                    break;
                }
                else if(loginemail.equals(regemail) && (loginpassword.equals(regpassword))==false)
                {
                    response.sendRedirect("WelcomePage.jsp");
                    return;
                }
            }
        } 
        catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
我已尝试涵盖登录期间可能出现的所有情况。如果出现以下情况,则用户无法访问

  • 两个字段都保持为空
  • 电子邮件
    已填写(包含正确或不正确的数据),但
    密码
    未填写
  • password
    已填写(数据正确或不正确),但未填写
    emailid
  • 我试图涵盖的领域是,如果任何字段填充了不正确的数据,则不允许用户访问。对于这一部分,我在代码中编写了:

     if(loginemail.equals(regemail) && (loginpassword.equals(regpassword))==true)
         //user accesses
     else 
         if(loginemail.equals(regemail) && (loginpassword.equals(regpassword))==false)
             //user cannot access
    
    但我不知道为什么它没有显示预期的行为,当两个字段都填充了不正确的数据时,用户被重定向到一个空白页

    添加:我也尝试了

    if(loginemail.equals(regemail) && (loginpassword.equals(regpassword)))
       //User accesses
     else if(!loginemail.equals(regemail) || (!loginpassword.equals(regpassword)))
      //User cannot access
    
    但它也无能为力

    使用简单的

    else
    
    而不是

    else if(loginemail.equals(regemail) && (loginpassword.equals(regpassword))==false)
    
    另外,请查收


    例如,您有
    loginemail.equals(regemail)和&(loginpassword.equals(regpassword))==false
    ,这似乎被视为:
    false&&false==false
    ,它将返回false。

    您将得到一个空白页。这意味着代码中的
    if
    条件都没有被执行以重定向到页面

    我没有得到你想要达到的目标。理想情况下,您应该只有两个条件:

  • 在电子邮件和密码正确的情况下重定向到UsersHome

  • 如果其中一个页面不正确,请重定向到欢迎页面

  • 代码段:

    // Servlet instance variable
    String redirectPage = "WelcomePage.jsp";
    
    改变

    if(loginemail.equals("")||loginemail.equals(" ")||loginpassword.equals("")||loginpassword.equals(" "))
            response.sendRedirect("WelcomePage.jsp");
    


    经过长时间的尝试,我终于得到了我的工作代码。这是:

    import getset.Getset;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import accessdb.Dao;
    
    public class LoginAuthentication extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Authentication and Logging in The Registered User
        Getset g=new Getset();
        Dao dao=new Dao();
        String userid="";
        String fname="";
    //  PrintWriter pw=response.getWriter();
        String loginemail=request.getParameter("loginemail");
        String loginpassword=request.getParameter("loginpassword");
        if(loginemail.equals("")||loginemail.equals(" ")||loginpassword.equals("")||loginpassword.equals(" "))
        {
            response.sendRedirect("WelcomePage.jsp");
        }
        else{
        g.setloginemail(loginemail);
        g.setloginpassword(loginpassword);
        try {
            ResultSet rs=dao.loginauthentication(g);
            while(rs.next())   //Fetching all emails and passwords from user table
            {
                String regemail=rs.getString("regemail");
                String regpassword=rs.getString("regpassword");
                System.out.println(""+regemail);
                if(loginemail.equals(regemail) && (loginpassword.equals(regpassword)))
                {   
                    System.out.println("55555");
                    ResultSet rs1=dao.getnameid(g);
                    while(rs1.next())   //GET USERID and name FROM NEWUSER TO USE AS PRIMARY KEY
                    {
                         userid=rs1.getString("USERID");
                         fname=rs1.getString("FNAME");
                        System.out.println(""+userid);
    
                    }
    
                    HttpSession session = request.getSession(true);
                      session.setAttribute("USERID", userid);
                      session.setAttribute("FNAME", fname);
                    response.sendRedirect("UserHome.jsp");
                    break;
                }
    
            }
    
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
    }
    }
    }
    

    谢谢所有试图帮助我的人

    您提到:“如果两个字段都填写了不正确的数据,请不要让用户访问”。理想情况下,如果电子邮件或密码不可用,则不应允许登录incorrect@Hardik米什拉:你说得对。我将相应地更改代码。这是真的。我还想实现,如果任何字段为空,用户将被重定向到欢迎页面。@SubirAdhikari:检查编辑的答案。Dpn不复制粘贴所有内容。它的代码片段,在代码中进行调整。好的。尝试一下。只是想知道创建
    redirectMyPage
    extra的功能是什么?@SubirAdhikari:尝试调试代码。我只是想了个主意。我没有试过。也许有一些逻辑上的缺陷应该被引入。你确定它适用于不正确的电子邮件和密码吗?如果是我surprised@HardikMishra对它完全起作用了。但你为什么感到惊讶?有什么问题吗?
    import getset.Getset;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import accessdb.Dao;
    
    public class LoginAuthentication extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Authentication and Logging in The Registered User
        Getset g=new Getset();
        Dao dao=new Dao();
        String userid="";
        String fname="";
    //  PrintWriter pw=response.getWriter();
        String loginemail=request.getParameter("loginemail");
        String loginpassword=request.getParameter("loginpassword");
        if(loginemail.equals("")||loginemail.equals(" ")||loginpassword.equals("")||loginpassword.equals(" "))
        {
            response.sendRedirect("WelcomePage.jsp");
        }
        else{
        g.setloginemail(loginemail);
        g.setloginpassword(loginpassword);
        try {
            ResultSet rs=dao.loginauthentication(g);
            while(rs.next())   //Fetching all emails and passwords from user table
            {
                String regemail=rs.getString("regemail");
                String regpassword=rs.getString("regpassword");
                System.out.println(""+regemail);
                if(loginemail.equals(regemail) && (loginpassword.equals(regpassword)))
                {   
                    System.out.println("55555");
                    ResultSet rs1=dao.getnameid(g);
                    while(rs1.next())   //GET USERID and name FROM NEWUSER TO USE AS PRIMARY KEY
                    {
                         userid=rs1.getString("USERID");
                         fname=rs1.getString("FNAME");
                        System.out.println(""+userid);
    
                    }
    
                    HttpSession session = request.getSession(true);
                      session.setAttribute("USERID", userid);
                      session.setAttribute("FNAME", fname);
                    response.sendRedirect("UserHome.jsp");
                    break;
                }
    
            }
    
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
    }
    }
    }