2015-01-06 51 views
0

我已用JSP形式并通过Servlet.I显示主页创建了一个简单登录应用程序还创建内部的servlet一个HashMap,其存储了几个用户名和passwords.When的用户输入用户名和密码它与那些本内相比地图和相应的消息是displayed.But这里的问题是HashMap的是用户点击登录按钮后,即Servlet程序开始up.I要初始化前手的地图,当与地图进行比较以往用户登录时进行初始化,应发生,而不是登录后初始化地图。一定要帮助我如何去做。 以下是我迄今所做如何在服务器启动时初始化哈希映射?

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

    } 

TIA

+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中为较旧的servlet引擎指定侦听器。 – zack6849

0

你的情况,最好的方法是创建一个名为用户一个单独的类,它会像下面。

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))