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