2016-05-23 7 views
0

サーブレット、JSP、およびHibernateでログインシステムを作成したいと思います。しかし、userId = 'null'というエラーが表示されます。使用されるJavaクラスは次のとおりです。私を手伝ってくれますか?Hibernate query return userId = 'null'

クエリ結果:

休止状態:id0_、email0_としてusers0_.email、lastName0_としてfirstName0_、users0_.lastNameとして users0_.firstName、middleName0_、users0_として users0_.middleNameとしてusers0_.id選択します。パスワードはpassword0_として、userId0_としてユーザーから users0_.userIdはどこ users0_.userId = 'NULL'

このクエリ結果の戻りの重複をusers0_。

ログインサーブレット:

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

にHibernate 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

サーブレットでuserIdの値が取得されているかどうかを確認してください。あなたはストリングをやっているuserId = request.getParameter( "userId"); 。 Sytem.out.println(userId)を実行してください。値を確認してください。 –

+0

私の知る限り、URLは大文字と小文字が区別されます。しかし、あなたの場合、サーブレットが 'Login'にマップされている間はフォームの' action'属性は 'login'です。コールはまったく機能しますか? – ujulu

答えて

-1

ログインサーブレットは、2つの方法doPostメソッドまたはdoGetメソッドのいずれかで呼び出すことができます。それがdoGetであれば、request.getParameter( "userId")を使用するか、投稿フォームの場合はrequest.getAttribute( "userId")を使用します。ログインサーブレットをどのように呼び出しているかわかります。