Servlet根据已有的用户注册文件实现用户登录

Servlet实现根据用户的注册信息,验证用户的登录信息是否正确
用户信息已写入文件中,如图

img


现提供一个方法,获取用户的文件和密码

public static boolean loginCheck(File userFile, String pwd) throws IOException{
        if (userFile.exists()) {
            Properties properties = new Properties();
            FileInputStream fis = new FileInputStream(userFile);
            properties.load(fis);
            if (properties.getProperty("pwd").equals(pwd)) {
                return true;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }

所以应该怎么调用已有的文件作为参数?
我这样写为什么方法中的第一个if判断文件不存在?是因为创建了一个新的空文件吗?

protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        User user = new User();
        String filePath= getServletContext().getRealPath("/users");
        File userFile= new File(filePath+"/"+user.getUserName()+".properties");
        user.setUserName(req.getParameter("userName")if(UserModel.loginCheck(userFile,req.getParameter("pwd"))){
            resp.getWriter().print("登录成功");
        }
        else{
            resp.getWriter().print("登录失败");
        }
    }

应该怎么改呢?

该回答引用于gpt与OKX安生共同编写:
  • 该回答引用于gpt与OKX安生共同编写:

您的代码中,创建 userFile 的语句所在的位置不正确。如果您是在获取 user.getUserName() 值之前创建 userFile,那么 user.getUserName() 将返回 null,从而导致 userFile 被创建为新的空文件。

另外,在调用 loginCheck() 方法时,需要传递正确的参数。根据您提供的方法签名,loginCheck() 方法需要传递一个 File 类型的参数和一个 String 类型的参数。因此,在您的代码中,应该使用正确的参数来调用该方法。

下面是修改后的代码,用于实现用户登录功能:

protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    User user = new User();
    user.setUserName(req.getParameter("userName"));
    String filePath = getServletContext().getRealPath("/users");
    File userFile = new File(filePath + "/" + user.getUserName() + ".properties");
    if (UserModel.loginCheck(userFile, req.getParameter("pwd"))) {
        resp.getWriter().print("登录成功");
    } else {
        resp.getWriter().print("登录失败");
    }
}

在这个代码中,我们首先实例化了一个 User 对象,并设置了其属性 userName 的值。然后,我们使用 getServletContext().getRealPath() 方法获取 users 目录的真实路径,并拼接出用户文件的完整路径。最后,我们通过调用 loginCheck() 方法来验证用户的登录信息是否正确。

希望这能够帮助您解决问题!

因为你没有获取请求中的用户登录信息,只是定义了一个user对象而已,导致user.getName()是一个空值null

protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
   String userName=req.getParameter("userName");
    System.out.println("当前登录账号:"+userName);
    String filePath = getServletContext().getRealPath("/users");
    File userFile = new File(filePath + "/" + userName + ".properties");
    if (UserModel.loginCheck(userFile, req.getParameter("pwd"))) {
        resp.getWriter().print("登录成功");
    } else {
        resp.getWriter().print("登录失败");
    }
}