我必须创建一个小型应用程序,其中用户以html形式输入其用户名和密码,然后在具有用户和密码HashMap的servlet中对其进行处理。 HashMap应该在servlet的init方法中用一些用户名和密码初始化。我必须检查HashMap条目的用户输入,这就是我遇到的问题。我不知道如何将HashMap条目与用户输入的用户名和密码进行比较。 到目前为止,我的代码如下:
public class User {
String username;
String password;
public User (String user, String pass){
this.username = user;
this.password = pass;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/AthorizationServlet")
public class AthorizationServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public AthorizationServlet() {
super();
}
public void init(ServletConfig config) throws ServletException {
super.init(config);
HashMap<Integer, User> uc = new HashMap <Integer, User>(); {
uc.put(1, new User("user1", "pass1"));
uc.put(2, new User ("user2", "pass2"));
uc.put(3, new User ("user3", "pass3"));
uc.put(4, new User ("user4", "pass4"));
}
Iterator<Entry<Integer, User>> it = uc.entrySet().iterator();
while (it.hasNext()){
//some code to validate user input against HashMap entries
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String user = request.getParameter("username");
String pass = request.getParameter("password");
}
}
答案 0 :(得分:0)
我想说的是,您被卡住的原因是,将用户名字符串映射到密码的HashMap需要使用HashMap<String, String> uc
,但是您已经创建了HashMap<Integer, User> uc
,并且消除了使用HashMap的价值!如果您打算利用java.util.HashMap提供的“优化”功能-意味着将String的“散列”以在数据结构中快速轻松地查找,则可以将HashMap保存如下:
HashMap<Integer, User> uc = new HashMap <Integer, User>(); {
uc.put("user1", "pass1");
uc.put("user2", "pass2");
uc.put("user3", "pass3");
uc.put("user4", "pass4");
}
您可以按照以下方式查找用户名和密码组合:
public boolean checkPassword(String enteredUserName, String enteredPassword)
{
String userPassword = uc.get(enteredUserName);
return enteredPassword.equals(userPassword);
}
如果您绝对必须在HashMap中使用“用户”数据结构,则另一种选择是:
HashMap<Integer, User> uc = new HashMap <Integer, User>(); {
uc.put("user1", new User("user1", "pass1"));
uc.put("user2", new User ("user2", "pass2"));
uc.put("user3", new User ("user3", "pass3"));
uc.put("user4", new User ("user4", "pass4"));
}
此时获取密码可能如下所示:
public boolean checkPassword(String enteredUserName, String enteredPassword)
{
String userPassword = uc.get(enteredUserName).getPassword();
return enteredPassword.equals(userPassword);
}
我不确定您用来启动HashMap<Integer, User>
的“整数”(用户ID?)- 如何 -最重要的要意识到的是,HashMap的目的是使表中的“查找”要快得多,因为对查找值执行了“哈希”功能。
如果您不打算使用“用户ID整数”查找内容,则 将其存储为HashMap的键并没有太大的作用 全部。
您的迭代器必须遍历整个表才能找到用户:
public boolean checkPassword(String enteredUserName, String enteredPassord)
{
Iterator<Entry<Integer, User>> it = uc.entrySet().iterator();
while (it.hasNext()){
//some code to validate user input against HashMap entries
User u = it.next().getValue();
if (u.getUserName().equals(enteredUserName())
return u.getPassword().equals(enteredPassword);
}
}