Survey							
                            
		                
		                * Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Servlets and the Java Web Server
Server-Side Programming Made Easy
Written by Alex Chaffee (alexc@purpletech.com)
Contents Copyright (c) 1998 Purple Technology, Inc.
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
1
Servlets and the Java Web Server
Course Outline
 Servlet Overview
 Using Servlets
 Writing Servlets
 Saving State
 Java Web Server Features
 Appendix: CGI Tutorial
 Appendix: FAQ
 Inside the Exercises Handout
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
2
Section I
Servlet Overview
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
3
Servlets and the Java Web Server
What Is A Servlet
 A Java object
 Plug-in for a web server
 Replacement for CGI scripts
 Can also be used to extend server as a plug-in
 Full power of Java
 Platform-independent
 Database access
 Fun to write
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
4
Servlets and the Java Web Server
Server/Service/Servlet
 server - a process running on a host
machine
 Apache, Java Web Server
 service - a protocol running on a port
 HTTP, FTP
 servlet - a module running inside a service
 PhoneServlet
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
5
Servlets and the Java Web Server
Servlet/Service/Server Diagram
 (diagram from Java Web Server tutorial)
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
6
Servlets and the Java Web Server
Servlets vs. Applets
 Servlets have no GUI
 Server-side, not client-side
 Different security model
 Installed, not downloaded
 But you can download remote servlets too
 Consistent server-side VM
 Much easier to test
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
7
Servlets and the Java Web Server
Servlets vs. CGI
 "performance, flexibility, portability, and
security" (whitepaper)
 Faster and Leaner
No fork-process like Perl
No need to initialize for each request
Only lightweight thread context switching
Built-in multithreading
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
8
Servlets and the Java Web Server
Servlets vs. CGI (Cont.)
 Easy to manage state
 share data across successive requests
 share data between concurrent requests
 use hidden fields, cookies, or sessions
 Write once, run anywhere
 It's easy to write unportable Perl
 Servlets have standard API
 Supports all methods
 GET, POST, PUT, DELETE, et al.
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
9
Servlets and the Java Web Server
Servlets vs. FastCGI
 FastCGI sends multiple requests to a single
separate process
 requires process context switch
 Servlets send multiple requests to multiple threads
in same process
 requires lightweight thread context switch
 (Also applies to ISAPI)
 Nice diagram in White Paper
 Servlets also automatically take advantage of
multiprocessors
 if the underlying JVM does
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
10
Servlets and the Java Web Server
Supported Servers
 Java Web Server
 Apache
 Netscape
 Many others (see web site)
 Servlet Engines
 IBM's ServletExpress
 Live Software’s JRun
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
11
Servlets and the Java Web Server
Servlet Security
 Trusted Servlets (full access)
 JWS Internal
 Local (in the "servlets" directory)
 Servlet Sandbox
 Signed Network Servlets (full access)
 Unsigned Network Servlets (limited access)
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
12
Servlets and the Java Web Server
Servlet Security: Implications
 IT managers can sign servlets for use in
their organization
 ISPs can allow users to run servlets
 less of a security hole than CGI scripts, since Java is
safe and secure (at least more so than C or Perl)
 still allows denial-of-service attacks
 Network servlets are possible
 chaining / proxying
 allows agents
 common servlet repository for multiple servers
 one place to install updates
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
13
Servlets and the Java Web Server
Servlet Security: Problems
 Too simplistic
 All or nothing
 Should allow ACLs for particular signers
 They claim it will in a future version
 Should get better with 1.2 security model
 Finer-grained access control
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
14
Servlets and the Java Web Server
Servlet Client Security
 Java Web Server
 Allows Access Control Lists for clients
 Supports HTTP authentication
 Supports Digest Authentication
 Other Web Servers
 Usually support HTTP authentication
 May have other security features
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
15
Servlets and the Java Web Server
SSL in JWS
 It works
 Extra $$
 https: supported
 Digest Authentication supported
 SSL 3 (client certificates) required
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
16
Servlets and the Java Web Server
Authenticating the user’s identity
 HTTP Authentication
 Username/password sent to server on every request
(like cookies)
 Very light encryption (uuencode)
 Digest Authentication
 Cryptographic handshaking between client and
server
 Very good encryption
 Not supported by all servers/browsers
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
17
Servlets and the Java Web Server
User Authentication Methods
 request.getRemoteUser()
 returns username
 request.getAuthType()
 HTTP or Digest
 request.getScheme()
 “http” or “https”
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
18
Servlets and the Java Web Server
API Availability
 Standard Java Extension API
 From white paper: "This means that while it is not
part of the core Java framework which must always
be part of all products bearing the Java brand, it will
be made available with such products by their
vendors as an add-on package."
 package javax.servlet.*, javax.servlet.http.*
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
19
Servlets and the Java Web Server
Servlet Architectures:Three-tier system
 Tier 1: Client
 HTML browser
 Java client
 Tier 2: Servlets
 embody business logic
 secure, robust
 Tier 3: Data Sources
 Java can talk to SQL, CORBA, OODB, File system,
etc. etc.
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
20
Servlets and the Java Web Server
Servlet Architectures: N-tier system
 Tier 1: HTML Browser
 Tier 2: Servlet
 User interface
 Tier 3: EJB/CORBA/RMI Objects
 Business logic
 Tier 4: Other Servers (e.g. RDBMS)
 Data storage
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
21
Servlets and the Java Web Server
Servlet Architectures: Web Publishing
 SSI Servlets
 JSP Servlets
 Best to keep business logic inside Java objects
 Keep the JSP light so designers don’t get scared
 Chaining servlets
 Multiple servers
 data gathering, collecting, serving, load balancing,
etc.
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
22
Section II
Using Servlets
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
23
Servlets and the Java Web Server
Loading Servlets
 From CLASSPATH
 includes <root>/classes/ on JWS
 From <root>/servlets/ directory
 not in classpath
 servlets can be added or recompiled inside a running
server
 class.initArgs file
 From remote codebase
 specified by URL
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
24
Servlets and the Java Web Server
Remote Servlets
 Three ways to configure
 configure with Administration Tool
 invoke inside a server-side include
 configure inside a servlet chain
 Loaded in a Servlet Sandbox
 more later
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
25
Servlets and the Java Web Server
What's In A Name
 A servlet's name is its class name
 if it's in the servlets directory
 Or, you can assign it a name in the "Add
Servlet" admin tool
 maps code word to servlet class
 Name is usually a single word
 possibly with a package name and dots
 no other punctuation
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
26
Servlets and the Java Web Server
Standard Servlets
 DateServlet
 echoes current date/time
 EchoServlet
 echoes CGI parameters (good for testing)
 MailServlet
 sends email in response to a CGI form
 RedirectServlet
 used by server to manage HTTP redirects
 SessionServlet
 used by server to manage sessions
 Many more...
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
27
Servlets and the Java Web Server
Server-side Includes (SSI)
 Must be in a file named .shtml or .jsp
 can change this with Admin Tool
 Normal SSI
 <!--#include file="foo.txt" -->
 Servlet SSI
 <servlet code=DateServlet.class>
 </servlet>
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
28
Servlets and the Java Web Server
SSI Details
 pass init parameters in servlet tag
 pass servlet parameters in param tags
 can specify codebase in servlet tag
 e.g.
<servlet code=DateServlet.class
codebase=http://servlets.foo.com/
initParam1=val1 initParam2=val2>
<param name=serviceParam1 value=val3>
<param name=serviceParam2 value=val4>
</servlet>
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
29
Servlets and the Java Web Server
URL invocation
 Directly from browser as URL
 http://www.myserver.com/servlet/MyServlet
 From inside FORM tag as script
<FORM METHOD=POST ACTION=”/servlet/MyServlet”>
...
</FORM>
 From inside JHTML or JSP page
 Uses “Page Compilation”
 Compiles the jsp file into a servlet on the fly, then
executes it
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
30
Servlets and the Java Web Server
A Note on CLASSPATH and JWS
 JWS uses its own JRE
 Three ways to add classes
 Put the class files into the “classes” subdirectory
 Jar them, and put the jar files into the “lib”
subdirectory
 Start the server with the -classpath option
httpd -classpath c:\projects\utils
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
31
Section III
Writing Servlets
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
32
Servlets and the Java Web Server
The Servlet API
 Independent of
 web protocol
 server brand or platform
 whether it's local or remote
 Simple, small, easy
 Base class provides core functionality; just
extend it
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
33
Servlets and the Java Web Server
CGI, or not, whichever
 Fairly generic interface
 Accepts query, returns response
 Used for plugins, etc.
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
34
Servlets and the Java Web Server
Servlet Architecture Overview
 Servlet Interface
 methods to manage servlet
 GenericServlet
 implements Servlet interface
 HttpServlet
 extends GenericServlet
 exposes HTTP-specific functionality
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
35
Servlets and the Java Web Server
Servlet Architecture Overview
 ServletRequest
 What the client says to the server
 Access to information like protocol, client IP#,
parameters, and body
 ServletResponse
 What the servlet says to the client
 HttpServletRequest, HttpServletResponse
 HTTP-specific communication and information
 State-tracking and session management
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
36
Servlets and the Java Web Server
Servlet Lifecycle Overview
 Server loads and instantiates servlet
 Server calls init()
 Loop
 Server receives request from client
 Server calls service()
 service() calls doGet() or doPost()
 Server calls destroy()
 More detail to come later...
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
37
Servlets and the Java Web Server
ServletRequest
 passed to the service() method
 contains lots of useful goodies…
Client info
URL info
Content info
Content itself
User-entered parameters
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
38
Servlets and the Java Web Server
ServletRequest - Client Info
 getRemoteAddr()
 Returns the IP address of the agent that sent the request
 getRemoteHost()
 Returns the fully qualified host name of the agent that
sent the request
 getProtocol()
 Returns the protocol and version of the request as a string
of the form <protocol>/<major version>.<minor
version>.
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
39
Servlets and the Java Web Server
ServletRequest - URL Info
 getScheme()
 Returns the scheme of the URL used in this request, for
example "http", "https", or "ftp".
 getServerName()
 Returns the host name of the server that received the
request
 getServerPort()
 Returns the port number on which this request was
received
 getServletPath()
 Returns the URI path that got to this script, e.g.
“/servlet/com.foo.MyServlet”
 Useful for putting in a <FORM> tag
40
 See also getRequestURI()
(in Technology
HttpServletRequest)
5/24/2017
Copyright © 1997-8, Purple
Inc.
Servlets and the Java Web Server
ServletRequest - Content Info
 getContentLength()
 Returns the size of the request data
 getContentType()
 Returns the MIME type of the request data
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
41
Servlets and the Java Web Server
ServletRequest - Content
 getInputStream()
 Returns an input stream for reading binary data in
the request body.
 getReader()
 Returns a buffered reader for reading text in the
request body.
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
42
Servlets and the Java Web Server
ServletRequest - Parameters
 String getParameter(String)
 Returns a string containing the lone value of the specified parameter,
or null if the parameter does not exist.
 Was deprecated, but due to popular demand, it'll be undeprecated
 String[ ] getParameterValues(String)
 Returns the values of the specified parameter for the request as an
array of strings, or null if the named parameter does not exist.
 For parameters with multiple values, like lists
 Enumeration getParameterNames()
 Returns the parameter names for this request as an enumeration of
strings, or an empty enumeration if there are no parameters or the
input stream is empty.
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
43
Servlets and the Java Web Server
ServletResponse
 Embodies the response
 Basic use:
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(
"<HTML><BODY>Hello</BODY></HTML>");
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
44
Servlets and the Java Web Server
ServletResponse - Output
 getWriter()
 for writing text data
 getOutputStream()
 for writing binary data
 or for writing multipart MIME
 you must call setContentType() before
calling getWriter() or getOutputStream()
 by default it's text/plain, which you don't want
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
45
Servlets and the Java Web Server
The GenericServlet class
 implements Servlet
 also implements Serializable, ServletConfig
 implements all Servlet methods
 so you don't have to
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
46
Servlets and the Java Web Server
The HelloWorld Servlet
import javax.servlet.*;
import java.io.*;
public class HelloServlet extends GenericServlet
{
public void service(ServletRequest req, ServletResponse res)
throws IOException, ServletException
{
res.setContentType("text/plain");
ServletOutputStream out = res.getOutputStream();
out.println("Hello, World!");
}
}
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
47
Servlets and the Java Web Server
The HttpServlet class
 extends the GenericServlet base class
 provides a framework for handling the
HTTP protocol
 has its own subclasses of ServletRequest
and ServletResponse that do HTTP things
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
48
Servlets and the Java Web Server
HttpServlet methods
 provides helper methods for HTTP methods
doGet (GET and HEAD)
doPost (POST)
doPut, doDelete (rare)
doTrace, doOptions (not overridden)
 the service() method dispatches requests
to the do* methods
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
49
Servlets and the Java Web Server
HttpServlet: Receiving Data
 getParameter / getParameterValues /
getParameterNames
 process the data and return you the parameters
 getQueryString
 for GET method
 returns a single string in url-encoded format
 getReader / getInputStream
 for POST, PUT, DELETE
 returns a stream of characters / bytes
 mutually exclusive
 use EITHER getParameter* OR one of the others (never
both)
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
50
Servlets and the Java Web Server
SimpleServlet (GET)
public class SimpleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// set header field first
res.setContentType("text/html");
// then get the writer and write the response data
PrintWriter out = res.getWriter();
out.println(
"<HEAD><TITLE> SimpleServlet Output</TITLE></HEAD><BODY>");
out.println("<h1> SimpleServlet Output </h1>");
out.println("<P>This is output is from SimpleServlet.");
out.println("</BODY>");
out.close();
}
public String getServletInfo() { return "A simple servlet"; }
}
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
51
Servlets and the Java Web Server
DateServlet
public class DateServlet extends HttpServlet {
public void service(
HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException
{
Date today = new Date();
res.setContentType("text/plain");
ServletOutputStream out = res.getOutputStream();
out.println(today.toString());
}
public String getServletInfo() {
return "Returns a string representation of the current
time";
}
}
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
52
From Java Web Server Tutorial by Sun Microsystems
Servlets and the Java Web Server
HelloHttpServlet
 Reads in a parameter
 Can use a form
 <FORM METHOD=GET
ACTION=”/servlet/HelloHttpServlet”>
 <INPUT NAME=name>
 </FORM>
 Can use right in a URL
http://localhost:8080/servlet/HelloHttpServlet?name=Fred
 Outputs it as HTML
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
53
Servlets and the Java Web Server
HelloHttpServlet
public class HelloHttpServlet extends HttpServlet
{
public void doGet(HttpServletRequest req, HttpServletResponse
res) throws IOException, ServletException
{
String name = req.getParameter("name");
if (name == null) name = "Joe";
res.setContentType("text/plain");
ServletOutputStream out = res.getOutputStream();
out.println("Hello, " + name + "!");
}
}
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
54
Servlets and the Java Web Server
More Advanced Servlets
 See Post Servlet
 from Servlet Tutorial
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
55
Servlets and the Java Web Server
HttpServletRequest
 Cookie[ ] getCookies()
 returns list of cookies sent by client
 String getMethod()
 GET, POST, etc.
 String getRequestURI()
 returns the URI or URL that was invoked
 useful for putting inside <FORM> tag
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
56
Servlets and the Java Web Server
HttpServletRequest (Cont.)
 CGI Variable Methods
 getServletPath(), getPathInfo(), getPathTranslated(),
getQueryString(), getRemoteUser(), getAuthType()
 String getHeader(String name)
 Session Management Methods
 HttpSession getSession(boolean create)
 More later...
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
57
Servlets and the Java Web Server
HttpServletResponse
 Contains HTTP status codes as constants
 int HttpServletResponse.SC_NOT_FOUND = 404;
 Can send Error or Status codes to client
 Deals with Cookies
 Deals with HTTP Headers
 Can send HTTP Redirect to client
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
58
Servlets and the Java Web Server
Servlet Lifecycle: Init()
 public void init(ServerConfig cfg)
 called once, when servlet loads
 don't worry about synchronization
 perform costly setup here, rather than once
per request
 open database connection(s)
 load in persistent data
 spawn background threads
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
59
Servlets and the Java Web Server
Init Details
 if you fail, throw an UnavailableException
 must call super.init(cfg), which saves off
cfg
 if you like, you can save it yourself and override
getServletConfig, but why bother?
 Can call getInitParameter(paramName) to
read from the server-side config file
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
60
Servlets and the Java Web Server
Servlet Lifecycle: Service
 public void service(ServletRequest req,
ServletResponse res)
 takes Request and Response objects
 called many times, once per request
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
61
Servlets and the Java Web Server
service() and Concurrency
 Might be called simultaneously in several
threads
 it is your responsibility to handle synchronized
access to shared resources
 It is possible to declare a servlet as singlethreaded
 implement SingleThreadModel (empty interface)
 performance will suffer (if there are multiple
simultaneous requests)
 You can use class-static data to share data
across successive or concurrent requests
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
62
Servlets and the Java Web Server
Servlet Lifecycle: Destroy
 public void destroy()
 takes no parameters
 you must clean up
 close database connections
 stop threads
 Afterwards, servlet may be garbage collected
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
63
Servlets and the Java Web Server
Servlet Lifecycle: Destroy Details
 The server calls destroy after all service calls have
been completed, or after a certain number of
seconds have passed, whichever comes first.
 Warning: other threads might be running service
requests, so be sure to synchronize, and/or wait
for them to quit
 Sun's Servlet Tutorial has an example of how to do this
with reference counting
 Destroy can not throw an exception, so if
something bad happens, call log() with a helpful
message (like the exception)
 See “closing a JDBC connection” example in Tutorial
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
64
Servlets and the Java Web Server
Init Parameters
 ServletConfig
 String getInitParameter()
 Enumeration getInitParameterNames()
 There are convenience methods of the
same name inside GenericServlet
 Init Parameters are set by the server
administrator
 Servlet Parameters are set by the web page
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
65
Servlets and the Java Web Server
ServletContext
 call GenericServlet.getServletContext()
 getServlets()
 returns list of all installed Servlets
 getServlet(String name)
 returns the named Servlet
 log()
 see next slide
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
66
Servlets and the Java Web Server
Logging
 GenericServlet.log(String message)
 Writes the name of your servlet, plus the message,
to the server log file
 Location of log file is server-specific
 on JWS, you can check in the Admin Tool
 "If a servlet will have multiple instances (for example, if the
network service runs the servlet for multiple virtual hosts),
the servlet writer should override this method. The
specialized method should log an instance identifier, along
with the requested message." - Javadoc for GenericServlet
 But usually, there is only one instance of each
servlet, called reentrantly by the web server
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
67
Servlets and the Java Web Server
Servlet.getServletInfo()
 You should override this method
 Returns a string containing author, version,
copyright, etc.
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
68
Servlets and the Java Web Server
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
69
Servlets and the Java Web Server
HTTP Servlet Efficiency
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
70
Servlets and the Java Web Server
Efficiency: KeepAlive
 HTTP keepalive improves performance
 Keeps connection alive across multiple HTTP
requests
 Servlet must set content-length
 You can write to a ByteArray or StringBuffer, then
get its length before writing it
 res.setContentLength(sb.length());
 out.print(sb);
 KeepAlive should be enabled by default if all you
do is write short strings, then close the output
stream
 but maybe not
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
71
Servlets and the Java Web Server
Efficiency: getLastModified
 long HttpServlet.getLastModified(
HttpServletRequest req )
 Returns the time the requested entity was
last modified
 difference in milliseconds between that time and
midnight, January 1, 1970
 negative = unknown (or dynamic)
 Improves performance on browser/proxy
caching
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
72
Section IV
Saving State
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
73
Servlets and the Java Web Server
Saving State: Why
 Shopping Cart
 User Preferences
 “Wizard” interfaces
 i.e., successive linked dialog boxes / form entry
pages
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
74
Servlets and the Java Web Server
Saving State: How
 Client-side storage
 Hidden fields
 URL Rewriting
 Cookies
 Server-side storage
 Instance variables
 Database Access
 JWS Session Management
 Best possible solution (but still flawed)
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
75
Servlets and the Java Web Server
Hidden Fields
 Save data inside the servlet, keyed to a
handle
 Store a handle inside each successive
FORM
 Use that handle to retrieve data each query
 Of course, you could always store all the
data in hidden fields, instead
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
76
Servlets and the Java Web Server
Hidden Fields: Example
private Dictionary cache = new Hashtable();
public void doGet(...) {
String handle = getParameter(“handle”);
UserData data;
if (handle == null) {
data = new UserData();
handle = makeNewHandle(); // defined elsewhere
cache.put( handle, data );
}
else
data = (UserData)cache.get(handle);
77
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
...
Servlets and the Java Web Server
Hidden Fields: Example
out.println(“<FORM ACTION=/servlet/Whatever>”);
out.println(
“<INPUT TYPE=hidden NAME=handle VALUE=” +
handle + “>”);
out.println( ... rest of form ... );
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
78
Servlets and the Java Web Server
Hidden Fields: Example
 Survey.java
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
79
Servlets and the Java Web Server
Hidden Fields: Pros and Cons
 Pros
 Well understood
 You have control
 Can use your own caching mechanism
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
80
Servlets and the Java Web Server
Hidden Fields: Pros and Cons
 Cons
 Need to use FORMs
 hidden fields do not persist across normal links
 Sessions are not persistent across server restarts
 unless you write code to do it
 Sessions do not expire
 unless you write code to do it
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
81
Servlets and the Java Web Server
URL Rewriting
 Change HREF and ACTION URLs on the fly
 Change “/servlet/catalog” into
“/servlet/catalog?user=1234”
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
82
Servlets and the Java Web Server
URL Rewriting
 Pro:
 Don’t need to use FORMs
 Con
 Lose user if he/she travels outside your web site
 Need to use Servlet for all accesses -- can’t access a
raw HTML page
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
83
Servlets and the Java Web Server
Using Instance Variables for State
 Session data stored in instance variables
 directly is bad - not valid for multiple users
 indirectly is better - in a hashtable or vector, keyed
off a unique handle
 Pro: Quick, easy
 Con: Not persistent, memory can fill up
easily
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
84
Servlets and the Java Web Server
Database State
 Session data stored in a database
 You should open a connection to the
database in your init() method, and close it
in your destroy() method
 You can still use the hidden field technique
 When you get a handle, you pull in the user
data via a DB query
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
85
Servlets and the Java Web Server
Database State: Pros and Cons
 Pro:
 persistent
 high capacity
 Con:
 more complicated
 have to write more code
 still doesn’t automatically expire old sessions
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
86
Servlets and the Java Web Server
C is for Cookie
Cookie Monster is a trademark of
Children’s Television Workshop
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
87
Servlets and the Java Web Server
What’s A Cookie?
 Client-side storage
 Server can drop arbitrary data on browser
 Sent back to server on EVERY successive
request
 Automatically expires
 Cookies should be neither large nor
numerous
 Browsers should support twenty cookies per host, of
at least four kilobytes each
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
88
Servlets and the Java Web Server
Cookie Uses
 save session data
 save handle to session data
 store user preferences for next session
 store user login information
 not very secure, but appropriate for some
applications
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
89
Servlets and the Java Web Server
Cookies and Servlets
 Servlets can easily use Cookies
 HttpServletRequest.getCookies() method
 HttpServletResponse.addCookie() method
 Cookie object
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
90
Servlets and the Java Web Server
javax.servlet.http.Cookie
 get/setName()
 get/setValue()
 Attributes
 Comment, Domain, MaxAge, Path, Secure, Version
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
91
Servlets and the Java Web Server
Cookie Example
 Cookie Counter Servlet
 Counter.java
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
92
Servlets and the Java Web Server
Cookie Pros and Cons
 Pro:
 No server-side storage requirements
 Survive server restarts
 Automatically expire
 Con:
Not supported by all browsers
Bandwidth limitations
Not good for large amount of data
User can disable them
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
93
Servlets and the Java Web Server
Detecting Cookie Acceptance
 CookieDetector.java
 Drops a cookie on the client
 Sends a redirect back to CookieDetector,
with a flag saying “this is the test phase”
 The test phase detects whether
 The client accepted the cookie
 The client rejected the cookie (or the browser
doesn’t support cookies)
 Sends another redirect to appropriate page
 You can tell the user “pretty please” here
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
94
Servlets and the Java Web Server
JWS Session Management
 Flexible
 Lightweight
 General
 Automatic
 Uses cookies if it can, URL rewriting if it
can’t
 Based on technology from ATG
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
95
Servlets and the Java Web Server
Session Objects
 Server-side
 One per client (not one per servlet)
 Preserved automatically
 even in browsers that don’t support cookies
 Expire after 30 minutes (by default)
 Saved to disk if server dies; restored if
server restarts
 “Loosely speaking, a session corresponds
to a single sitting of a single anonymous
user” - JWS Tutorial
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
96
Servlets and the Java Web Server
Using Sessions
HttpSession session = request.getSession (true);
String info = (String)session.getValue(“foo.info”);
// assume getNewInfo defined elsewhere
String newinfo = getNewInfo();
session.putValue(“foo.info”, newinfo);
// then output page
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
97
Servlets and the Java Web Server
URL Rewriting
 Preserves sessions on non-cookie browsers
 Changes
<a href="/store/catalog">
 into
<a href="/store/catalog;$sessionid$DA32242SSGE2">
 You must actively call res.encodeUrl(“/store/catalog”)
 see next slide
 Does not work if user merely disables cookies
 Has to actually BE a non-cookie browser
 Lame
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
98
Servlets and the Java Web Server
HttpServletResponse - Encoding
 Has methods to process URLs to splice in the session ID if
appropriate
 Not the same as URLEncode / URLDecode
 the server deals with that
 String encodeUrl(String url)
 rewrites the given URL if necessary
 if the browser supports cookies, returns URL unchanged
 All URLs emitted by a session-using Servlet should be run through
this method
 e.g.
 out.println("<A HREF=\"" + resp.encodeUrl("next.html") + "\">");
 also String encodeRedirectUrl(String url)
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
99
Servlets and the Java Web Server
Session Persistence
 Sessions swap to disk
 When server shuts down
 When memory fills up
 Uses Java Serialization
 Only works for Serializable or Externalizable objects
 “Note: Session persistence is intended to
be used as a means for preserving
Sessions across server restarts. It is not
meant to be used as a general long-term
session persistence mechanism.”
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
100
Servlets and the Java Web Server
Example
 VectorSessionServlet.java
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
101
Servlets and the Java Web Server
Bugs
 Can’t use custom classes inside session
data
 Doesn’t really detect whether client
supports cookies
 Instead, detects whether browser can potentially
support cookies
 Lame - they should use my CookieDetector
technique
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
102
Section V
Java Web Server Features
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
103
Servlets and the Java Web Server
Administration Tools
 Play with Admin Tool
 http://localhost:9090/
 Click on a service, click “Manage” button
 To shut down server, click “Shut Down”
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
104
Servlets and the Java Web Server
Manage Servlets
 Add
 Properties
 Load on Startup
 Unload
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
105
Servlets and the Java Web Server
Servlet Aliases
 Specify a partial URL
 Map it to a particular servlet
 e.g.
 you want http://foo.com/lunch to execute
/servlets/meal?type=lunch
 set alias = /lunch
 set servlet invoked = meal?type=lunch
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
106
Servlets and the Java Web Server
Servlet Chains (Filters)
 specify a comma-separated list of servlets
 the first servlet gets the user input
 each servlet in turn will get the previous
output
 the final servlet will return to the user
 all servlets in chain must use same ACL
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
107
Servlets and the Java Web Server
HTML Templates
 Define standard look for all (or some)
pages
 Template Servlet
 A tag inside template page inserts section
from original page
 <subst data="HEAD"></subst>
 <subst data="BODY"></subst>
 Specify which files are templated via
Servlet Aliases in Admin Tool
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
108
Servlets and the Java Web Server
Page Compilation (JSP)
 Embed Java code in static HTML pages
then compile those pages into individual
Java servlets to create a dynamic web site
 Based on JHTML technology from Art
Technology Group (http://www.atg.com/)
 Product: Dynamo, a Java Web Application Server
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
109
Servlets and the Java Web Server
Session Tracking
 See above
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
110
Servlets and the Java Web Server
Servlet Beans
 Using Servlets That are Beans
 Changes to config file are instantly updated
 Servlet itself is persistent across server restarts
 instance variables, like counters or caches, are
preserved
 Calling JavaBeans from Servlets
 Invisible Beans
 Installed inside “lib” subdirectory
 Calling JavaBeans in JHTML/JSP Files
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
111
Servlets and the Java Web Server
FAQ
 Answers in the Exercises book
 How do I develop using the servlet classes without
installing JDK1.2?
 Is it the “servlets” directory or the “servlet” directory
 Why doesn’t my servlet work inside a <SERVLET>
tag?
 How do I support both GET and POST protocol
from the same Servlet?
 How do I fully shut down the server?
 My browser says “the server returned an invalid or
unrecognized response” – what gives?
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
112
Servlets and the Java Web Server
References
 Java Server 1.1
 http://java.sun.com/javastore/jserv/buy_try.html
 http://java.sun.com/products/java-server/index.html
 be sure to download the JWS documentation
 The home for servlets and the Java Web Server.
 http://jserv.javasoft.com
 The Java Web Server 1.1 is available for trial or purchase.
 http://java.sun.com/javastore/jserv/buy_try.html
 The Java Web Server 1.1.1 upgrade pack is available for free.
 http://java.sun.com/products/java-server/webserver/jws111.html
 The Java Server Pages preview pack is available for free.
 http://developer.javasoft.com/developer/earlyAccess/jwspreview.html
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
113
Servlets and the Java Web Server
References
 RFC2045 - MIME
 http://info.internet.isi.edu/in-notes/rfc/files/rfc2045.txt
 RFC 2109 - Cookies
 http://info.internet.isi.edu/in-notes/rfc/files/rfc2109.txt
 Live Software
 http://www.livesoftware.com/
 JRun, many commercial servlets
 ATG - Dynamo Web Application Server
 http://www.atg.com/
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
114
Servlets and the Java Web Server
References
 Advanced Web Technologies
 http://www.javatrain.com/
 Purple Technology
 http://www.purpletech.com/
 Gamelan
 http://java.developer.com/
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
115
Servlets and the Java Web Server
Appendix: CGI Tutorial
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
116
Servlets and the Java Web Server
What Is CGI?
 Common Gateway Interface
 Allows web pages to send parameters to
web server
 Use HTML forms on client side
 Can also use Java – it's just a protocol!
 Use scripts on server side
 Can use Servlets!
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
117
Servlets and the Java Web Server
Example CGI HTML
<FORM ACTION="/servlets/GuestBook"
METHOD=POST>
Name: <INPUT TYPE=text
NAME="name"><BR>
Message: <INPUT TYPE=textarea
NAME="message"><BR>
<INPUT TYPE=submit>
</FORM>
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
118
Servlets and the Java Web Server
CGI Flow
 Browser downloads HTML page containing
FORM tag
 Browser lays out input widgets
 User fills out form and clicks "Submit"
 Browser takes parameters and sends them
in CGI format
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
119
Servlets and the Java Web Server
CGI Flow (Cont.)
 Server receives parameters and sends
them to CGI script
 CGI script returns MIME document
 usually it's "text/html"
 can be any MIME type
 Browser receives response document and
displays it
 If response contains FORM tag, whole thing
can happen again
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
120
Servlets and the Java Web Server
The FORM tag
 Opens a form
 ACTION
 the URL of the script to execute
 METHOD
 GET or POST
 Usually use POST
 closed with </FORM>
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
121
Servlets and the Java Web Server
INPUT TYPE=text
 Specifies a text field
 NAME
 names parameter to be passed to script
 VALUE (optional)
 initial value for text
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
122
Servlets and the Java Web Server
INPUT TYPE=textarea
 Specifies a multi-line text area
 NAME
 names parameter to be passed to script
…
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
123
Servlets and the Java Web Server
INPUT TYPE=checkbox
 Specifies a check box (duh)
 NAME
 names parameter to be passed to script
 ISCHECKED=true
 default value on
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
124
Servlets and the Java Web Server
INPUT TYPE=radio
 Specifies a radio button (or grouped
checkbox)
 NAME
 names group of buttons
 VALUE
 specifies the value for the group
 e.g.
<INPUT TYPE=radio NAME="gender"
VALUE="male">Male
<INPUT TYPE=radio NAME="gender"
VALUE="female">Female
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
125
Servlets and the Java Web Server
INPUT TYPE=submit
 A push button that submits the form
 NAME
 specifies name of variable
 VALUE
 specifies name of button
 yes, "value" specifies the name
 hey, I didn't write the spec
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
126
Servlets and the Java Web Server
INPUT TYPE=reset
 A push button that clears the form
 Does not submit it
5/24/2017
Copyright © 1997-8, Purple Technology Inc.
127