An Example Servlet Putting it all together 26-Jul-16

advertisement

An Example Servlet

Putting it all together

11-Apr-20

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

Download