2015-01-06 2 views
0

Я создал простое приложение для входа в систему с использованием формы JSP и отображения HomePage через Servlet.I также создал HashMap внутри сервлета, который хранит пару имени пользователя и паролей. Когда пользователь вводит имя пользователя и пароль, он сравнивается с присутствующими внутри отображается карта и соответствующее сообщение. Но проблема заключается в том, что HashMap инициализируется после того, как пользователь нажимает кнопку «Вход», то есть когда запускается программа сервлета. Я хочу инициализировать карту перед рукой, и когда когда-либо пользователь регистрируется при сравнении с картой, вместо инициализации карты после входа в систему. Помогите мне, как я могу это сделать. Вот что я сделал до сих порКак инициализировать хэш-карту при запуске сервера?

Login.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> 

UserAuthentication.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>"); 
     } 
    } 

    } 

ТИА

+0

вы можете использовать статический блок .. – Prashant

ответ

2

Сделать HashMap Статическом в классе (я и предполагал его окончательный вариант):

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 будет заполняться, когда зарегистрирован класс.

Если вы не знали об инициализаторах, прочитайте это article.

+0

Это хорошая идея, но альтернатива, которая может быть интересна ['ContextListener'] (http://docs.oracle.com/javaee/7/api/javax/servlet/ServletContextListener.html), если вы укажете класс ContextListener, этот класс запускается сразу же после развертывания приложения. Что-то вроде [этого] (https://gist.github.com/zack6849/9dad0f195da94bf15d4b) должно работать. вам также может потребоваться указать слушателя в вашем web.xml для старых сервлет-движков. – zack6849

0

Лучший способ в вашем случае - создать класс singleton, называемый пользователями, который будет выглядеть ниже.

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

и в вашем UserAuthentication.java, когда вы хотите сделать проверку,

if(Users.singleInstance.validate(userName,password)) 
Смежные вопросы