📘 Premium Read: Access my best content on Medium member-only articles — deep dives into Java, Spring Boot, Microservices, backend architecture, interview preparation, career advice, and industry-standard best practices.
🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.
▶️ Subscribe to My YouTube Channel (176K+ subscribers): Java Guides on YouTube
▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube
In part 1, we will develop user registration and login module implementation.
Table of Contents
User Registration Module
1. Create a JavaBean - User.java
package net.javaguides.todoapp.model;
import java.io.Serializable;
/**
* JavaBean class used in jsp action tags.
* @author Ramesh Fadatare
*/
public class User implements Serializable {
private static final long serialVersionUID = 1 L;
private String firstName;
private String lastName;
private String username;
private String password;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2. Configure JDBC Connection- JDBCUtils.java
package net.javaguides.todoapp.utils;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.time.LocalDate;
public class JDBCUtils {
private static String jdbcURL = "jdbc:mysql://localhost:3306/demo";
private static String jdbcUsername = "root";
private static String jdbcPassword = "root";
public static Connection getConnection() {
Connection connection = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}
public static void printSQLException(SQLException ex) {
for (Throwable e: ex) {
if (e instanceof SQLException) {
e.printStackTrace(System.err);
System.err.println("SQLState: " + ((SQLException) e).getSQLState());
System.err.println("Error Code: " + ((SQLException) e).getErrorCode());
System.err.println("Message: " + e.getMessage());
Throwable t = ex.getCause();
while (t != null) {
System.out.println("Cause: " + t);
t = t.getCause();
}
}
}
}
public static Date getSQLDate(LocalDate date) {
return java.sql.Date.valueOf(date);
}
public static LocalDate getUtilDate(Date sqlDate) {
return sqlDate.toLocalDate();
}
}
3. DAO Layer - UserDao.java
package net.javaguides.todoapp.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import net.javaguides.todoapp.model.User;
import net.javaguides.todoapp.utils.JDBCUtils;
public class UserDao {
public int registerEmployee(User employee) throws ClassNotFoundException {
String INSERT_USERS_SQL = "INSERT INTO users" +
" (first_name, last_name, username, password) VALUES " +
" (?, ?, ?, ?);";
int result = 0;
try (Connection connection = JDBCUtils.getConnection();
// Step 2:Create a statement using connection object
PreparedStatement preparedStatement = connection.prepareStatement(INSERT_USERS_SQL)) {
preparedStatement.setString(1, employee.getFirstName());
preparedStatement.setString(2, employee.getLastName());
preparedStatement.setString(3, employee.getUsername());
preparedStatement.setString(4, employee.getPassword());
System.out.println(preparedStatement);
// Step 3: Execute the query or update query
result = preparedStatement.executeUpdate();
} catch (SQLException e) {
// process sql exception
JDBCUtils.printSQLException(e);
}
return result;
}
}
4. Controller Layer - UserController.java
package net.javaguides.todoapp.web;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.javaguides.todoapp.dao.UserDao;
import net.javaguides.todoapp.model.User;
/**
* @email Ramesh Fadatare
*/
@WebServlet("/register")
public class UserController extends HttpServlet {
private static final long serialVersionUID = 1 L;
private UserDao userDao;
public void init() {
userDao = new UserDao();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
register(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.sendRedirect("register/register.jsp");
}
private void register(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String firstName = request.getParameter("firstName");
String lastName = request.getParameter("lastName");
String username = request.getParameter("username");
String password = request.getParameter("password");
User employee = new User();
employee.setFirstName(firstName);
employee.setLastName(lastName);
employee.setUsername(username);
employee.setPassword(password);
try {
int result = userDao.registerEmployee(employee);
if (result == 1) {
request.setAttribute("NOTIFICATION", "User Registered Successfully!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
RequestDispatcher dispatcher = request.getRequestDispatcher("register/register.jsp");
dispatcher.forward(request, response);
}
}
5. View Layer - register.jsp
header.jsp
<header>
<nav class="navbar navbar-expand-md navbar-dark"
style="background-color: tomato">
<div>
<a href="https://www.javaguides.net" class="navbar-brand"> Todo App</a>
</div>
<ul class="navbar-nav navbar-collapse justify-content-end">
<li><a href="<%= request.getContextPath() %>/login" class="nav-link">Login</a></li>
<li><a href="<%= request.getContextPath() %>/register" class="nav-link">Signup</a></li>
</ul>
</nav>
</header>
footer.jsp
<style>
.footer {
position: fixed;
bottom: 0;
width:100%;
height: 40px;
background-color: tomato;
}
</style>
<footer class="footer font-small black">
<!-- Copyright -->
<div class="footer-copyright text-center py-3" style="color: white">© 2019 Copyright:
<a href="https://www.javaguides.net/" > <strong> Java Guides </strong></a>
</div>
</footer>
<!-- Footer -->
register.jsp
- firstName
- lastName
- username
- password
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
</head>
<body>
<jsp:include page="../common/header.jsp"></jsp:include>
<div class="container">
<h2>User Register Form</h2>
<div class="col-md-6 col-md-offset-3">
<div class="alert alert-success center" role="alert">
<p>${NOTIFICATION}</p>
</div>
<form action="<%=request.getContextPath()%>/register" method="post">
<div class="form-group">
<label for="uname">First Name:</label> <input type="text" class="form-control" id="uname" placeholder="First Name" name="firstName" required>
</div>
<div class="form-group">
<label for="uname">Last Name:</label> <input type="text" class="form-control" id="uname" placeholder="last Name" name="lastName" required>
</div>
<div class="form-group">
<label for="uname">User Name:</label> <input type="text" class="form-control" id="username" placeholder="User Name" name="username" required>
</div>
<div class="form-group">
<label for="uname">Password:</label> <input type="password" class="form-control" id="password" placeholder="Password" name="password" required>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
<jsp:include page="../common/footer.jsp"></jsp:include>
</body>
</html>
Login Module
1. Create a JavaBean - LoginBean.java
package net.javaguides.todoapp.model;
import java.io.Serializable;
public class LoginBean implements Serializable {
private static final long serialVersionUID = 1 L;
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2. DAO Layer - LoginDao.java
package net.javaguides.todoapp.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import net.javaguides.todoapp.model.LoginBean;
import net.javaguides.todoapp.utils.JDBCUtils;
public class LoginDao {
public boolean validate(LoginBean loginBean) throws ClassNotFoundException {
boolean status = false;
Class.forName("com.mysql.jdbc.Driver");
try (Connection connection = JDBCUtils.getConnection();
// Step 2:Create a statement using connection object
PreparedStatement preparedStatement = connection
.prepareStatement("select * from users where username = ? and password = ? ")) {
preparedStatement.setString(1, loginBean.getUsername());
preparedStatement.setString(2, loginBean.getPassword());
System.out.println(preparedStatement);
ResultSet rs = preparedStatement.executeQuery();
status = rs.next();
} catch (SQLException e) {
// process sql exception
JDBCUtils.printSQLException(e);
}
return status;
}
}
3. Controller Layer - LoginController.java
package net.javaguides.todoapp.web;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.javaguides.todoapp.dao.LoginDao;
import net.javaguides.todoapp.model.LoginBean;
/**
* @email Ramesh Fadatare
*/
@WebServlet("/login")
public class LoginController extends HttpServlet {
private static final long serialVersionUID = 1 L;
private LoginDao loginDao;
public void init() {
loginDao = new LoginDao();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.sendRedirect("login/login.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
authenticate(request, response);
}
private void authenticate(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String username = request.getParameter("username");
String password = request.getParameter("password");
LoginBean loginBean = new LoginBean();
loginBean.setUsername(username);
loginBean.setPassword(password);
try {
if (loginDao.validate(loginBean)) {
RequestDispatcher dispatcher = request.getRequestDispatcher("todo/todo-list.jsp");
dispatcher.forward(request, response);
} else {
HttpSession session = request.getSession();
// session.setAttribute("user", username);
// response.sendRedirect("login.jsp");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
4. View Layer - login.jsp
- username
- password
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<jsp:include page="../common/header.jsp"></jsp:include>
<div class="container col-md-8 col-md-offset-3" style="overflow: auto">
<h1>Login Form</h1>
<form action="<%=request.getContextPath()%>/login" method="post">
<div class="form-group">
<label for="uname">User Name:</label> <input type="text" class="form-control" id="username" placeholder="User Name" name="username" required>
</div>
<div class="form-group">
<label for="uname">Password:</label> <input type="password" class="form-control" id="password" placeholder="Password" name="password" required>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
<jsp:include page="../common/footer.jsp"></jsp:include>
</body>
</html>
👍
ReplyDelete