サーブレット、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>
pleas share login.jsp – shankarsh15
サーブレットでuserIdの値が取得されているかどうかを確認してください。あなたはストリングをやっているuserId = request.getParameter( "userId"); 。 Sytem.out.println(userId)を実行してください。値を確認してください。 –
私の知る限り、URLは大文字と小文字が区別されます。しかし、あなたの場合、サーブレットが 'Login'にマップされている間はフォームの' action'属性は 'login'です。コールはまったく機能しますか? – ujulu