2016-05-23 199 views
0

我想用Servlet,JSP和Hibernate創建登錄系統。但是我收到一個錯誤,userId ='null'。使用的Java類如下。請問你能幫幫我嗎?Hibernate查詢返回userId ='null'

查詢結果:

休眠:選擇users0_.id如id0_,users0_.email如email0_, users0_.firstName如firstName0_,users0_.lastName如lastName0_, users0_.middleName如middleName0_,users0_。密碼password0_, users0_.userId作爲userId0_從用戶那裏users0_ users0_.userId = '空'

此查詢結果返回重複。

登錄的Servlet:

@WebServlet(name = "Login", urlPatterns = {"/Login"}) 
public class Login extends HttpServlet { 
protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    String userId = request.getParameter("userId");  
    String password = request.getParameter("password"); 
    LoginService loginService = new LoginService(); 
    boolean result = loginService.authenticate(userId, password); 
    Users user = loginService.getUserByUserId(userId); 
    if(result == true){ 
     request.getSession().setAttribute("user", user);  
     response.sendRedirect("deneme.jsp"); 
    } 
    else{ 
     response.sendRedirect("login.jsp"); 
    } 
} 
@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 
@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 
@Override 
public String getServletInfo() { 
    return "Short description"; 
} 
} 

用戶模型:

Entity 
@Table(name="users") 
public class Users implements Serializable { 

@Id @GeneratedValue 
private Long id; 
private String firstName; 
private String middleName; 
private String lastName; 
private String email; 
private String userId; 
private String password; 

//Constructor and Getter Setter methods 
} 

登錄服務:

public class LoginService { 
public boolean authenticate(String userId, String password) { 
    Users user = getUserByUserId(userId);  
    if(user!=null && user.getUserId().equals(userId) && user.getPassword().equals(password)){ 
     return true; 
    }else{ 
     return false; 
    } 
} 
public Users getUserByUserId(String userId) { 
    Session session = HibernateUtil.openSession(); 
    Transaction tx = null; 
    Users user = null; 
    try { 
     tx = session.getTransaction(); 
     tx.begin(); 
     Query query = session.createQuery("from Users where userId='"+userId+"'"); 
     user = (Users)query.uniqueResult(); 
     tx.commit(); 
    } catch (Exception e) { 
     if (tx != null) { 
      tx.rollback(); 
     } 
     e.printStackTrace(); 
    } finally { 
     session.close(); 
    } 
    return user; 
} 

public List<Users> getListOfUsers(){ 
    List<Users> list = new ArrayList<Users>(); 
    Session session = HibernateUtil.openSession(); 
    Transaction tx = null; 
    try { 
     tx = session.getTransaction(); 
     tx.begin(); 
     list = session.createQuery("from Users").list();     
     tx.commit(); 
    } catch (Exception e) { 
     if (tx != null) { 
      tx.rollback(); 
     } 
     e.printStackTrace(); 
    } finally { 
     session.close(); 
    } 
    return list; 
} 
} 

休眠的Util:

public class HibernateUtil { 

    private static final SessionFactory sessionFactory; 

    static { 
     try { 
      sessionFactory = new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory(); 
     } catch (Throwable ex) { 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static Session openSession() { 
     return sessionFactory.openSession(); 
    } 
    } 

的hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
    <hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.url">jdbc:mysql://localhost/test?zeroDateTimeBehavior=convertToNull</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.connection.password"></property> 
     <property name="show_sql">true</property> 
     <property name="hbm2ddl.auto">update</property> 
     <mapping class="com.bookstore.model.Users" /> 
    </session-factory> 
    </hibernate-configuration> 

的login.jsp

<!-- Account Login--> 

       <div align="right"> 
       <form role="form" action="login" method="post" > 

         <label class="control-label">User Id:</label>     
         <input type="text" name="userId" class="span3"> 
        <label class="control-label" >Password:</label>     
         <input type="password" name="password"> 

         <input type="submit" value="Login" > 
       </form> 
      </div> 
+0

pleas share login.jsp – shankarsh15

+0

在你的servlet中檢查你是否獲得了userId的值。你正在做String userId = request.getParameter(「userId」); 。只要做一個Sytem.out.println(userId);並檢查值。 –

+0

據我所知,URL區分大小寫。但在你的情況下,當你的servlet被映射到'Login'時,你的表單的'action'屬性是'login'。通話功能完全在嗎? – ujulu

回答

-1

登錄servlet可以以兩種方式無論是doPost方法或的doGet被調用。如果它是doGet,那麼使用request.getParameter(「userId」)或者如果它是提交表單然後使用request.getAttribute(「userId」)。讓我們知道您是如何調用您的登錄servlet的。