使用hibernate登录以检索用户名和密码

时间:2015-10-21 03:34:59

标签: java html mysql hibernate session

我希望有一个使用hibernate的登录页面从mySQL数据库中检索用户名和密码。

我的代码如下 对于我的HTML页面,我有一个使用方法get的表单。

form action="PlaylistServlet" method="get">
<input type = "text" name ="userId" placeholder="userName">
<input type="password" name="password" placeholder="Password">
<input type="submit" value="submit">
</form>

下面是我的servlet doGet方法,它将数据从HTML页面传递到服务类,如果用户名和密码对正确,则重定向回登录页面。

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    Users user1 = new Users();
    String userName = request.getParameter("userName");
    String password = request.getParameter("password");
    SetData sd = new SetData();
    Users us = sd.get(userName); //get method in service class. Line 38
    String passwordDB = us.getPassword();// line 39
    if (user1.checkPassword(password, passwordDB)) {
        response.sendRedirect("UserLogin.html");
    }
}

下面是我的服务类get方法,它使用hibernate会话从mySQL数据库中检索数据。我从HTML页面传递用户名作为session.get()方法的主键。

public Users get(String userName) {

    Users us = null;
    SessionFactory sf = null;
    Session session1 = null;
    try {
        sf = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();
        session1 = sf.openSession();
        Transaction tx = session1.beginTransaction();

        us = (Users) session1.get(Users.class,userName); // line 64
        tx.commit();
        session1.close();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        sf.close();
    }
    return us;

}

在运行代码之后的所有内容我得到下面的错误消息

java.lang.IllegalArgumentException: id to load is required for loading
at com.marv.service.SetData.get(SetData.java:64)
at com.marv.service.PlaylistServlet.doGet(PlaylistServlet.java:38)

java.lang.NullPointerException
at com.marv.service.PlaylistServlet.doGet(PlaylistServlet.java:39)

我相信我的问题是在hibernate session get(Class clazz,Serializable id)抛出HibernateException方法,但我不知道我做错了什么。

3 个答案:

答案 0 :(得分:0)

whitelist

正在寻找id(主键)作为session1.get(Users.class,userName); 参数。您可以更改表格,以便用户名是主键,或者创建一个执行选择以通过用户名查找ID的dao。

答案 1 :(得分:0)

session.get需要一个pk。另外检查你的参数\表单变量,它们似乎不一致。   试试hibernate的这个语法:

user = session.createCriteria(Users.class,&#34; user&#34;)         。新增(Restriction.eq(&#34; user.username&#34;,用户名))。uniqueResult();

答案 2 :(得分:0)

您的HTML文件中有一个错误。您必须将方法发布为method =“ post”

request.getParameter()方法仅适用于String数据类型。

在Hibernate中,可以通过session.get(Employee.class,Id)方法从数据库中获取数据,并且仅当我们将第二个参数指定为Interger时,该方法才有效。

相反,您可以使用我的抽象代码:

HTML代码

form action="login.jsp" method="post">
<input type="text" name="empId" required>
<input type = "text" name ="userName" placeholder="userName">
<input type="password" name="passWord" placeholder="Password">
<input type="submit" value="submit">
</form>

login.jsp的抽象代码。这里的login.jsp页面用于存储Bean对象以与您的html文件和Java pojo类进行映射。

<% String path1 = "/LoginServlet";%>

    <jsp:useBean id="login" class="com.bean.Employee" scope="session">
        <jsp:setProperty name="login" param="empId" property="empId" />
        <jsp:setProperty name="login" param="userName" property="userName" />
        <jsp:setProperty name="login" param="passWord" property="passWord" />
    </jsp:useBean>

    <jsp:forward page="<%=path1 %>" />

登录Servlet代码:

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            PrintWriter out = response.getWriter();
            HttpSession session = request.getSession();

            Employee emp = (Employee)session.getAttribute("login");

            LoginDAO login = new LoginDAO();

            boolean flag = login.login(emp);

            if(flag == true)
            {
                out.print("Employee Login Successfully !!!");
            }
            else
            {
                out.print("Incorrect Username or Password !!!");
            }

    }

}

登录DAO代码:

    public boolean login(Employee emp)
    {

        SessionFactory sf = new Configuration().configure().buildSessionFactory();
        Session session = sf.openSession();

        Transaction tx = session.beginTransaction();

        Employee employeeDatafromDB = (Employee)session.get(Employee.class,emp.getEmpId());


        boolean key = false;

        if(emp.getUserName().equals(employeeDatafromDB.getUserName()) && emp.getPassWord().equals(employeeDatafromDB.getPassWord()))
        {
            System.out.println("Employee Login Successfully !!!");
            return key = true;
        }
        else
        {
            System.out.println("Incorrect Username or Password !!!");
            return key = false;
        }

    }