You are on page 1of 18

An Example Servlet

Putting it all together

Oct 17, 2008


Credits
 This is the first
example in Head
First Servlets & JSP
by Brian Basham,
Kathy Sierra, and
Bert Bates
 This is an excellent
book, and goes into
considerably more
detail than we will in
this course
It starts with an HTML form...
The HTML page, 1
<html>
<head>
<title>Beer Selection</title>
</head>
<body>
<h1 align="center">Beer Selection Page</h1>

...the form (on the next slide)...

</body>
</html>
The HTML page, 2
<form method="POST" action="SelectBeer.do">
Select beer characteristics:<p>
Color:
<select name="color" size="1">
<option>light</option>
<option>amber</option>
<option>brown</option>
<option>dark</option>
</select>
<br>
<br>
<center>
<input type="SUBMIT">
</center>
</form>
The deployment descriptor
 The request goes to the server, with the action
<form method="POST" action="SelectBeer.do">
 The name "SelectBeer.do" is not the name of an
actual file anywhere; it is a name given to the user
 Partly, this is for security; you don’t want the user to have
access to the actual file without going through your form
 The extension .do is just a convention used by this
particular book; no extension is necessary
 It is up to the deployment descriptor to find the correct
servlet to answer this request
 The deployment descriptor must be named web.xml
web.xml 1 -- boilerplate

<?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/web-app_2_4.xsd"
version="2.4">

...important stuff goes here...


</web-app>
web.xml 2 -- actual work

<servlet>
<servlet-name>Ch3 Beer</servlet-name>
<servlet-class>
com.example.web.BeerSelect
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Ch3 Beer</servlet-name>
<url-pattern>/SelectBeer.do</url-pattern>
</servlet-mapping>
BeerSelect.java 1
package com.example.web;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

import com.example.model.BeerExpert; // notice this

public class BeerSelect extends HttpServlet {

... doPost method goes here. ..

}
BeerSelect.java 2

public void doPost(HttpServletRequest request,


HttpServletResponse response)
throws IOException, ServletException {

String c = request.getParameter("color");

BeerExpert be = new BeerExpert();


List result = be.getBrands(c);

request.setAttribute("styles", result);
RequestDispatcher view =
request.getRequestDispatcher("result.jsp");
view.forward(request, response);
}
MVC
 BeerSelect.java acts as the controller
 It delegates the actual work to a model,
BeerExpert.java
 It delegates (forwards) the information to a JSP page
that will provide the view
 RequestDispatcher view =
request.getRequestDispatcher("result.jsp");
view.forward(request, response);
The model class
 BeerExpert is the model class; it computes results and
adds them to the HttpServletRequest object
 Not the HttpServletResponse object; that’s the HTML
output
 It returns, in the usual fashion, to the BeerSelect class,
which will then forward it to the JSP
BeerExpert.java
package com.example.model;
import java.util.*;

public class BeerExpert {

public List getBrands(String color) {


List brands = new ArrayList();
if (color.equals("amber")) {
brands.add("Jack Amber");
brands.add("Red Moose");
} else {
brands.add("Jail Pale Ale");
brands.add("Gout Stout");
}
return brands;
}
}
The JSP file
 The JSP file must have the extension .jsp
 It is basically HTML, plus a few JSP directives
 It receives the HttpServletRequest and the
HttpServletResponse objects
 The HttpServletResponse object may have been
partially written by the servlet (but it’s a bad idea)
 The resultant HTML page goes back to the user
result.jsp
<%@ page import="java.util.*" %>

<html>
<body>
<h1 align="center">Beer Recommendations JSP</h1>
<p>

<%
List styles = (List)request.getAttribute("styles");
Iterator it = styles.iterator();
while (it.hasNext()) {
out.print("<br>TRY: " + it.next());
}
%>

</body>
</html>
Directory structure
jakarta-tomcat-5.0.12/
| webapps/  this is http://m174pc4.cis.upenn.edu:8080/
| | beerV1/
| | | form.html
| | | result.jsp
| | | WEB-INF/
| | | | web.xml
| | | | classes/
| | | | | com/
| | | | | | example/
| | | | | | | model/
| | | | | | | | BeerExpert.class
| | | | | | | web/
| | | | | | | | BeerSelect.class
| | | | lib/
| | yourLastName  when you ftp, this is where you are
Accessing the class server
 Tomcat should be running 24/7 on m174pc4.cis.upenn.edu
 To try it, point your browser to:
http://m174pc4.cis.upenn.edu:8080/beerV1/form.html

 When you ftp to m174pc4, pwd will tell you that you are in a
directory “/”, but you are really in a directory
C:\Tomcat\webapps\yourLastName
 This is the top-level directory for your web applications
 You should be able to put an HTML file here, say, index.html,
and access it with
http://m174pc4.cis.upenn.edu:8080/yourLastName/index.html
The End

You might also like