An Example Servlet

indexadjustmentInternet and Web Development

Nov 13, 2013 (3 years and 9 months ago)

72 views

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