Does using 1 form for both login and signup can cause this error? When I run the tomcat and try to login it keeps returning null as the user, even though the user does exist in the database. As for the action and method I use js to set it.
homepage.jsp
<form action="" method="" class="form"><label for="forms-username">Username</label><input type="text" name="forms-username" id="forms-username"><label for="forms-email">Email</label><input type="text" name="forms-email" id="forms-email"><label for="forms-password">Password</label><input type="password" name="forms-password" id="forms-password"><input type="submit" value="Submit"></form>
loginServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("index.jsp").forward(request, response); }protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); UserService userService = new UserService(); PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String password = request.getParameter("password"); User user = new User(); user.setUsername(username); user.setPassword(password); boolean loginSuccess = userService.login(user); if (loginSuccess) { user = userService.getUserByName(user.getUsername()); request.getSession().setAttribute("user", user); doGet(request, response); } else { out.println("Some error occurred, please ensure the username and password are correct!"); }
homepage.js
// sign in $('#sign-in').click(function() { $('#forms-body').show(); $('#forms-header span:last-child').removeClass('selected'); $('#forms-header span:first-child').addClass('selected'); $('.form label:nth-child(3)').hide(); $('.form input[type="text"]:nth-child(2)').hide(); $('.to-block').show(); $('.form').attr('action', 'homepage'); $('.form').attr('method', 'get'); }); $('#forms-header span:first-child').click(function(){ $('#forms-header span:last-child').removeClass('selected'); $(this).addClass('selected'); $('.form label:nth-child(3)').hide(); $('.form input[type="text"]:nth-child(2)').hide(); $('.form').attr('action', 'homepage'); $('.form').attr('method', 'get'); });
I tried to retrieve data by using test.java and it does returns true. I tried to print out the user when the login function is run and it returns null, perhaps the problem is located on the request.getParameter("username"); , but if this is the problem, I do have signUp servlet which also use this as the method to retrieve the username from form, and it works.
test.java
@Test public void retrieveUser() { UserMapper userMapper = session.getMapper(UserMapper.class); boolean loginSuccess = false; String username = "firstuser"; User user = new User(); User retrieved = new User(); user.setUsername(username); retrieved = UserService.getUserByName(username); loginSuccess = UserService.login(retrieved); System.out.println(loginSuccess); }
signUpServlet
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String userName = request.getParameter("forms-username"); String password = request.getParameter("forms-password"); String email = request.getParameter("forms-email"); User user = new User(); user.setUsername(userName); user.setPassword(password); user.setEmail(email); UserService.signUp(user); request.getRequestDispatcher("index.jsp").forward(request, response); }