This post explains the Registration applications in Java using Servlet, JSP, and MySQL database servers. This Java registration form follows Model View Controller (MVC) architecture. Let us understand what is MVC and how this should be used while developing any application.
For Login application in java, refer to the post Login application in Java using MVC
The Model View Controller (MVC) architecture can be best explained with the help of the following diagram.

We are making use of Eclipse Integrated development environment(IDE) for this Java Registration Application. To follow the basic coding standards, I have created my folder structure as shown in the following diagram.
Login Applications in Java:
Any Registration or Login application always begins with views. It can be a page in HTML, JSP, PHP, VB, or any other language. Our Java Registration application begins with Register.jsp and from Register.jsp we will call RegisterServlet.java class.
Register.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Register</title>
<script>
function validate()
{
var fullname = document.form.fullname.value;
var email = document.form.email.value;
var username = document.form.username.value;
var password = document.form.password.value;
var conpassword= document.form.conpassword.value;
if (fullname==null || fullname=="")
{
alert("Full Name can't be blank");
return false;
}
else if (email==null || email=="")
{
alert("Email can't be blank");
return false;
}
else if (username==null || username=="")
{
alert("Username can't be blank");
return false;
}
else if(password.length<6)
{
alert("Password must be at least 6 characters long.");
return false;
}
else if (password!=conpassword)
{
alert("Confirm Password should match with the Password");
return false;
}
}
</script>
</head>
<body>
<center><h2>Java Registration application using MVC and MySQL </h2></center>
<form name="form" action="RegisterServlet" method="post" onsubmit="return validate()">
<table align="center">
<tr>
<td>Full Name</td>
<td><input type="text" name="fullname" /></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" name="email" /></td>
</tr>
<tr>
<td>Username</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td>Confirm Password</td>
<td><input type="password" name="conpassword" /></td>
</tr>
<tr>
<td><%=(request.getAttribute("errMessage") == null) ? ""
: request.getAttribute("errMessage")%></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Register"></input><input
type="reset" value="Reset"></input></td>
</tr>
</table>
</form>
</body>
</html>

RegisterServlet.java
package com.mvc.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mvc.bean.RegisterBean;
import com.mvc.dao.RegisterDao;
public class RegisterServlet extends HttpServlet {
public RegisterServlet() {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Copying all the input parameters in to local variables
String fullName = request.getParameter("fullname");
String email = request.getParameter("email");
String userName = request.getParameter("username");
String password = request.getParameter("password");
RegisterBean registerBean = new RegisterBean();
//Using Java Beans - An easiest way to play with group of related data
registerBean.setFullName(fullName);
registerBean.setEmail(email);
registerBean.setUserName(userName);
registerBean.setPassword(password);
RegisterDao registerDao = new RegisterDao();
//The core Logic of the Registration application is present here. We are going to insert user data in to the database.
String userRegistered = registerDao.registerUser(registerBean);
if(userRegistered.equals("SUCCESS")) //On success, you can display a message to user on Home page
{
request.getRequestDispatcher("/Home.jsp").forward(request, response);
}
else //On Failure, display a meaningful message to the User.
{
request.setAttribute("errMessage", userRegistered);
request.getRequestDispatcher("/Register.jsp").forward(request, response);
}
}
}
To summarize RegisterServlet.java flow :
1. Assign all the inputs(user details) to local variables.
2. Call RegisterBean.java to set all the user details using java setters.
3. Next, go to RegisterDao.java where you are just going to insert user details into the database.
4. Once it is successful, you are displaying a successful message.
RegisterDao.java
Data Access Object – It focuses on business logic with database connections and operations.
Here the RegisterDao.java code makes a connection with the Database layer and inserts user details into the database.
package com.mvc.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.mvc.bean.RegisterBean;
import com.mvc.util.DBConnection;
public class RegisterDao {
public String registerUser(RegisterBean registerBean)
{
String fullName = registerBean.getFullName();
String email = registerBean.getEmail();
String userName = registerBean.getUserName();
String password = registerBean.getPassword();
Connection con = null;
PreparedStatement preparedStatement = null;
try
{
con = DBConnection.createConnection();
String query = "insert into users(SlNo,fullName,Email,userName,password) values (NULL,?,?,?,?)"; //Insert user details into the table 'USERS'
preparedStatement = con.prepareStatement(query); //Making use of prepared statements here to insert bunch of data
preparedStatement.setString(1, fullName);
preparedStatement.setString(2, email);
preparedStatement.setString(3, userName);
preparedStatement.setString(4, password);
int i= preparedStatement.executeUpdate();
if (i!=0) //Just to ensure data has been inserted into the database
return "SUCCESS";
}
catch(SQLException e)
{
e.printStackTrace();
}
return "Oops.. Something went wrong there..!"; // On failure, send a message from here.
}
}


RegisterBean.java
JavaBeans are classes that encapsulate many objects into a single object (the bean). A JavaBean property is a named feature that can be accessed by the user of the object. Here the RegisterBean encapsulates registration properties fullName, email, userName, password. To set or access individual properties, set and get functions have been implemented.
package com.mvc.bean;
public class RegisterBean {
private String fullName;
private String email;
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;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getFullName() {
return fullName;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
}
DBConnection.java We are making use of MySQL database server in this application. The URL format and driver name going to be different for different database servers.
package com.mvc.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBConnection {
public static Connection createConnection()
{
Connection con = null;
String url = "jdbc:mysql://localhost:3306/customers"; //MySQL URL followed by the database name
String username = "root"; //MySQL username
String password = "root123"; //MySQL password
System.out.println("In DBConnection.java class ");
try
{
try
{
Class.forName("com.mysql.jdbc.Driver"); //loading MySQL drivers. This differs for database servers
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
con = DriverManager.getConnection(url, username, password); //attempting to connect to MySQL database
System.out.println("Printing connection object "+con);
}
catch (Exception e)
{
e.printStackTrace();
}
return con;
}
}
web.xml
The web.xml is known as the deployment descriptor. It declares which Servlets exist and which URLs they handle. You need to mention the fully qualified path for Servlet here.
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>RegistrationMVC</display-name>
<welcome-file-list>
<welcome-file>Register.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>RegisterServlet</display-name>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.mvc.controller.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/RegisterServlet</url-pattern>
</servlet-mapping>
</web-app>
Home.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Home Page</title>
</head>
<body>
<center><h2>Home Page</h2></center>
<b>User Registration Successful</b>
<br></br>
<b>Please <a href="https://krazytech.com/programs/a-login-application-in-java-using-model-view-controllermvc-design-pattern">log-in</a> to continue.</b>
</body>
</html>

The code base can be downloaded from here.
good morning sir,
sir,what is the use of bean class??? and without this bean class also project will run aa sir?????
Good Morning Siva.
JavaBeans are classes that encapsulate many objects into a single object. Bean class is used to hold multiple input data in a single object so that you can simply access user data with the help of object of the bean class. It just contains set and get functions. Initially, you will set all the input data and later on you will make use of the get method wherever you want to access the data.
Ecplise IDE, automatically generates set and get methods based on the global variables defined in the class.
I created same type of Db and updated the same code, i am getting registration page but when i enterdata and submit it it throws an error as below..
HTTP Status 500 – Error instantiating servlet class com.mvc.controller.RegisterServlet
type Exception report
message Error instantiating servlet class com.mvc.controller.RegisterServlet
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Error instantiating servlet class com.mvc.controller.RegisterServlet
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
root cause
java.lang.Error: Unresolved compilation problem:
The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files
Hi Shambu,
Have you placed the jar files?
Hi Ravi, yes i have put the 2 jar files in lib folder and verified in build path as shown in ur screenshot. I have put mysql-connector-java.jar and servlet-api.jar these 2 jar files. I have a doubt i have mysql version 5.5.57 do i need to update mysql jar file of same version or any mysql jar file would be fine.
Shambu,
I think Jar version is fine.
Have you placed xml file and made sure your servlet name and package name is matching there?
Do add some debug statements in the beginning of the servlet and before DB connection. We will understand where exactly it is throwing an exception.
I recommend you to follow the video to understand how it works. It helps you in debugging. https://youtu.be/dyme-pYvSio
Hi Ravi, I deleted all the projects in eclipse and created a new project again. Now after entering the details in register.jsp and click on Register i am getting Oops.. Something went wrong there..! in the same page. I have created MYSQL DB with same as the screenshot. I want to debug it but where exactly i need to put the debug command is it in RegisterDao.java and what is the exact command for System.out.println.
I am seeing error like this in console
java.sql.SQLException: Column count doesn’t match value count at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
Hi,
Did you create the table with the given script?
You can add
System.out.println(" write something here");
statement in Servlet, DAO, and DBConnection classesI solved it, after correcting the SQL command, Thanks Ravi for your help.
That’s great. Good luck ahead and you are welcome.
HI Ravi, I have created a new project which includes this Registration project and the login project. as in https://krazytech.com/programs/a-login-application-in-java-using-model-view-controllermvc-design-pattern. I am able to do Registration but when i get login form and hit the credentials it is showing a 404 error resource not available, My question is what all changes we have to make if we are including both the projects in a single project,
Hi Shambu,
It is easy. You will have to include following two tags in the web.xml for the LoginServlet.
….
…
Let me know if you face any difficulty.
I added below
LoginServlet
LoginServlet
com.mvc.controller.LoginServlet
LoginServlet
/LoginServlet
still getting 404 error resource not available. My register form works fine but when we hit credentials in login form and hit submit gives 404 error. What could be the problem and how to troubleshoot further.
Shambu,
404 error occurs when you are trying to access a URL/page that is incorrect.
You must be sending your requests to LoginServlet while logging in. You need to check the action element in the Login form. You can also add some debug statements in the LoginServlet to verify if the request is correctly being routed there.
Hi sir,
i have done the very same code,and received the below error,can you please help me regarding the same.
HTTP Status 404 – /one/WEB-INF/Register.jsp
type Status report
message /one/WEB-INF/Register.jsp
description The requested resource is not available.
Apache Tomcat/7.0.47
Hi,
Did you choose the project type to be Dynamic web application?
When are you getting this error?
You need to open the Register.jsp via localhost.
Good evening sir,
Thank u sir for yesterday answer but i have another one mistake sir,
SQL query:
ALTER TABLE `wipro4` CHANGE `ID` `ID` VARCHAR( 20 ) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL AUTO_INCREMENT
MySQL said: Documentation
#1063 – Incorrect column specifier for column ‘ID’
what to do sir???
Siva,
You can simply use the script
ALTER TABLE table_name MODIFY COLUMN column_name datatype;
To go even easy, just drop your table and recreate everything according to following script
https://krazytech.com/programs/java-programs/java-registration-page-using-jsp-servlet-mysql-mvc/attachment/ceatetable-sql-script
Thank you very much sir….