Putting it all together
11-Apr-20
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
<html>
<head>
<title>Beer Selection</title>
</head>
<body>
<h1 align="center">Beer Selection Page</h1>
...the form (on the next slide)...
</body>
</html>
<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 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
<?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>
<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>
} 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. ..
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);
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);
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
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 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
<%@ 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>
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
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