13
-
Nov
-
13
An Example Servlet
Putting it all together
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
Enter the password to open this PDF file:
File name:
-
File size:
-
Title:
-
Author:
-
Subject:
-
Keywords:
-
Creation Date:
-
Modification Date:
-
Creator:
-
PDF Producer:
-
PDF Version:
-
Page Count:
-
Preparing document for printing…
0%
Comments 0
Log in to post a comment