A simple HTML form processing servlet example

This servlet tutorial will teach you how to handle and process HTML form with Servlet. You will learn following things

  1. How to write HTML forms
  2. How to forward request from a servlet to a JSP
  3. How to read form parameters from request object
  4. How to process HTML form input elements like text box, password fields, text area, radio button and checkbox
  5. How to generate response from servlet.
  6. How to define servlet and servlet mapping in web.xml

Create HTML Form

Copy following code into form.jsp file under /pages directory.

<%@ page contentType="text/html; charset=ISO-8859-1"%>
<html>
	<head>
		<title>A simple form processing Servlet example</title>
	</head>
	<body>
		<h3>User registration example</h3>
		<form action="formServlet" method="post">
		<table>
			<tr>
				<td>User Name</td>
				<td><input type="text" name="username"></td>
			</tr>
			<tr>
				<td>Password</td>
				<td><input type="password" name="password"></td>
			</tr>
			<tr>
				<td>Bio</td>
				<td><textarea rows="5" cols="50" name="bio"></textarea> </td>
			</tr>
			<tr>
				<td>Country</td>
				<td>
					<select name="country">
						<option value="ind">India</option>
						<option value="usa">America</option>
						<option value="ca">Canada</option>
						<option value="aus">Australia</option>
					</select> 				
				</td>
			</tr>
			<tr>
				<td>Subscribe for newsletter</td>
				<td>	
					<label for="newsletter1">Yes</label>				
					<input type="radio" id="newsletter1" name="newsletter" value="Yes" checked="checked">
					<label for="newsletter2">No</label>
					<input type="radio" id="newsletter2"name="newsletter" value="No">
				</td>
			</tr>
			<tr>
				<td>Preferences</td>
				<td>
					<label for="preference1">Receive mail from members</label>	
					<input type="checkbox" id="preference1" name="receivemail" value="yes" checked="checked"><br/>
					<label for="preference2">Receive notifications</label>
					<input type="checkbox" id="preference2" name="receivenotification" value="yes"><br/>
				</td>
			</tr>	
			<tr>
				<td>
					<input type="submit" value="Submit">&nbsp;
					<input type="reset">
				</td>
				<td></td>
		</table>
	</form>
	</body>
</html>

Create a Servlet to process HTML form submission

Copy following code into FormServlet.java, compile the class and put it under WEB-INF/classes directory

import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
 
public class FormServlet extends HttpServlet {
 
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		getServletContext().getRequestDispatcher("/WEB-INF/pages/form.jsp").forward(req, resp);
	}
 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String userName = request.getParameter("username");
		String password = request.getParameter("password");
		String bio = request.getParameter("bio");
		String country = request.getParameter("country");
		String subscribeForNewsletter = request.getParameter("newsletter");
		String receiveMail = request.getParameter("receivemail");
		String reveiveNotifications = request.getParameter("receivenotification");
 
		response.setContentType("text/html");
 
		PrintWriter writer = response.getWriter();		
		writer.write("<h2> You have entered following values </h2>");
		writer.write("<br/>");
		writer.write("<table>");
		startTableRow(writer);
		addTableColumn(writer, "username");
		addTableColumn(writer, userName);
		closeTableRow(writer);
 
		startTableRow(writer);
		addTableColumn(writer, "password");
		addTableColumn(writer, password);
		closeTableRow(writer);
 
		startTableRow(writer);
		addTableColumn(writer, "Bio");
		addTableColumn(writer, bio);
		closeTableRow(writer);
 
		startTableRow(writer);
		addTableColumn(writer, "Country");
		addTableColumn(writer, country);
		closeTableRow(writer);
 
		startTableRow(writer);
		addTableColumn(writer, "Subscribe for news letter");
		addTableColumn(writer, subscribeForNewsletter);
		closeTableRow(writer);
 
		startTableRow(writer);
		addTableColumn(writer, "Receive mail from members");
		addTableColumn(writer, receiveMail);
		closeTableRow(writer);
 
		startTableRow(writer);
		addTableColumn(writer, "Receive notification");
		addTableColumn(writer, reveiveNotifications);
		closeTableRow(writer);
 
		writer.write("</table>");
 
		writer.close();
 
	}
 
	private static void startTableRow(PrintWriter writer) {
	writer.write("<tr>");	
	}
 
	private static void closeTableRow(PrintWriter writer) {
		writer.write("</tr>");	
	}
 
	private static void addTableColumn(PrintWriter writer, String value) {
		writer.write("<td> "+ value + "</td>");	
	}
 
 
}
Note: It is not a good practice to generate HTML from the servlet, A JSP should be used for generating markup. In this example, the response HTML is generated directly from the servlet, just to make it easy. In real project, the servlet can set the data as request attributes and forward the request to a JSP view which will then display it.

Define servlet in deployment descriptor (web.xml)

A servlet must be defined into web.xml deployment descriptor. Copy the following code into web.xml file and save it under WEB-INF directory.

<?xml version="1.0" encoding="ISO-8859-1"?>
 
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
 
<web-app>
	<servlet>
		<servlet-name>formServlet</servlet-name>
		<servlet-class>FormServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>formServlet</servlet-name>
		<url-pattern>formServlet</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>/formServlet</welcome-file>
	</welcome-file-list>
</web-app>

Deploy form processing servlet application to tomcat server

You just need to create war file of our web application and copy it to webapp directory under your tomcat installation to deploy application to tomcat.

Open command prompt and go to root directory of our application (FormExample). Create a war file using following command.

jar -cvf formexample.war *

It will create formexample.war file under FormExample directory. Copy the war file to webapp directory under tomcat installation.
That’s it, now you are ready to start the tomcat server and see example in action.

Related tutorials

Home
Copyright © 2010 servletworld.com Drupal theme by Kiwi Themes.