An Example Servlet by HC120229101654

VIEWS: 0 PAGES: 18

									An Example Servlet

   Putting it all together




                             29-Feb-12
       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

								
To top