如何在服务器启动时初始化哈希映射



我使用JSP表单创建了一个简单的登录应用程序,并通过Servlet显示HomePage.我还在servlet中创建了一个HashMap,它存储了几个用户名和密码。当用户输入用户名和密码时,会将其与地图中存在的用户名和密码进行比较,并显示相应的消息。但这里的问题是 HashMap 是在用户点击登录按钮后初始化的,即当 servlet 程序启动时。我想事先初始化地图,当用户登录时应该与地图进行比较,而不是在登录后初始化地图。请帮助我如何去做。这是我到目前为止所做的

登录.jsp

  <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <title>Login</title>
  </head>
  <body>
  <center>
  <b>LOGIN PAGE</b><br>
  </center>
  <form name="login" method="post" action="UserAuthentication">
  <center>
  USER NAME: <input type="text" name="username"> 
  <br>
  <br>
  PASSWORD: <input type="password" name="password"> 
  <br>
  <br> 
  <input type="submit" value="LOGIN">
  </center>
  </form>
  </body>
  </html>

用户身份验证.java

  public class UserAuthentication extends HttpServlet{
  public void doPost(HttpServletRequest request,HttpServletResponse response)
  throws IOException{
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    PrintWriter out = response.getWriter();

    Map<String,String>users = new HashMap<String,String>();
    users.put("Sheetal", "sss");
    users.put("Raj","rrr");
    users.put("Anjali", "aaa");
    users.put("Bhavya","bbb");
    if(users.containsKey(username) && users.containsValue(password))
    {
        if(password.equals(users.get(username)))
    {
        out.println("<html>"+
                    "<body>"+
                    "Login Successful" + "<br>" +
                    "Welcome " + username + "<br>" +
                    "</body>" +
                    "</html>");
        }
    }
    else
    {
        out.println("<html>"+     
                    "<body>"+
                    "Login Unsuccessful" + "<br>" +
                    "Try again" + "<br>" +
                    "</body>" +
                    "</html>");
      }
   }
   }

蒂亚

使哈希映射在类中成为静态的(我也假设了它的最终):

private static final Map<String,String> users = new HashMap<>();

并将其填充在静态初始值设定项块中:

static {
    users.put("Sheetal", "sss");
    users.put("Raj", "rrr");
    users.put("Anjali", "aaa");
    users.put("Bhavya", "bbb");
}

这样,在注册类时,将填充HashMap

如果您不知道初始值设定项,请阅读本文。

在您的情况下,最好的方法是创建一个名为 users 的单例类,如下所示。

public class Users{
private static Map<String,String> users = new HashMap<>();
private users(){
users.put("Sheetal", "sss");
users.put("Raj", "rrr");
users.put("Anjali", "aaa");
users.put("Bhavya", "bbb");
}
public static Users singleInstance = new Users();
public boolean validate(String userName,String password)
{
 boolean result = false;
 if(condition)
  result = true;
 return result;
}

在您的用户身份验证中.java当您要进行验证时,

if(Users.singleInstance.validate(userName,password))

最新更新