In this article we will create a small web application that uses the Model View Controller (MVC) pattern with Java Server Pages (JSP) and JSP Standard Template Library (JSTL). A container like Tomcat is needed to run this combination.
Thanks go out to the author of the JSP – MVC Tutorial, who thought of the sample application that we will use here, the coffee advisor. The user is first presented with a choice in coffee taste she prefers. Pressing a button moves on to a page with advise about the type of coffee to drink based on that taste.
An MVC application has three parts:
- Model. The model is the domain-specific representation of the data upon which the application operates. In our case this is implemented in the CoffeeExpert class.
- View. The view renders the model into a form suitable for interaction, typically a user interface element. In our case this is implemented in a JSP file called coffee.jsp.
- Controller. The controller receives input and initiates a response by making calls on model objects. In our case this is implemented in the CoffeeSelect class.
In addition to these three file we need a web.xml file that tells the container how to map a URL (e.g. /CoffeeSelect.do) into a class to run (e.g. com.example.web.CoffeeSelect). We also need a start page for the user input, which we will call coffee.html. In total this means we should create a .war file with the following structure:

coffee.html
<html>
<body>
<h2>Coffee Advisor Input</h2>
<form method="POST" action="CoffeeSelect.do">
<select name="taste" size=1">
<option value="milky">Milky</option>
<option value="froffy">Froffy</option>
<option value="icey">Icey</option>
<option value="strong">Spaced Out</option>
</select>
<br/><br/>
<input type="Submit"/>
</form>
</body>
</html>
CoffeeExpert.java
package com.example.model;
import java.util.*;
public class CoffeeExpert {
public List<String> getTypes(String taste) {
List<String> result = new ArrayList<String>();
if (taste.equals("milky")) {
result.add("Latte");
result.add("Cappuccino");
} else if (taste.equals("froffy")) {
result.add("Latte");
result.add("Cappuccino");
result.add("Frappuccino");
} else if (taste.equals("icey")) {
result.add("Frappuccino");
} else if (taste.equals("strong")) {
result.add("Espresso");
result.add("Double espresso");
} else {
result.add("Vending machine");
}
return (result);
}
}
CoffeeSelect.java
package com.example.web;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.example.model.CoffeeExpert;
public class CoffeeSelect extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
List<String> types = new CoffeeExpert().getTypes(request.getParameter("taste"));
request.setAttribute("types", types);
RequestDispatcher view = request.getRequestDispatcher("coffee.jsp");
view.forward(request, response);
}
}
coffee.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<body>
<h2>Coffee Advisor Output</h2>
<c:forEach var="type" items="${types}">
<c:out value="${type}"/>
<br />
</c:forEach>
</body>
</html>
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>Coffee</servlet-name>
<servlet-class>com.example.web.CoffeeSelect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Coffee</servlet-name>
<url-pattern>/CoffeeSelect.do</url-pattern>
</servlet-mapping>
</web-app>

Awesome article!
Thanks a ton guys.
Very Useful information for a Beginner.
Keep Blogging…
Finally a complete code that works!
Thank you! More! :D