session object

advertisement
Internet Applications
part 2
René de Vries
Based on slides by M.L. Liu and Marko van Eekelen
20 Maart 2006
ISS - Internet Applications Part 2
1
Overview
1.
2.
3.
4.
Applets
Servlets
Web Services
SOAP
References, Exercises
20 Maart 2006
ISS - Internet Applications Part 2
2
1. Applets
20 Maart 2006
ISS - Internet Applications Part 2
3
Introduction
Three kinds of Java programs:
– An application is a standalone program that
can be invoked from the command line.
– An applet is a program that runs in the
context of a browser session.
– A servlet is a program that is invoked on
demand on a server program and that runs in
the context of a web server process.
20 Maart 2006
ISS - Internet Applications Part 2
4
Applets, web page, client, server
•
•
Applets are programs stored on a web server, similar to web pages.
When an applet is referred to in a web page that has been fetched and
processed by a browser, the browser generates a request to fetch (or
download) the applet program, then executes the program in the
browser’s execution context, on the client host.
server host
browser host
web server
browser
reqeust for
myWebPage.html
myWebPage.html
...
<applet code=HelloWorld.class</applet>
...
HelloWorld.class
20 Maart 2006
myWebPage.html
HelloWorld.class
request for
HelloWorldclass
HelloWorld.class
ISS - Internet Applications Part 2
5
Java Applet Execution - 1
• An applet program is written as a subclass of
the java.Applet class or the
javax.swing.Japplet class.
• There is no main method: you must override
the start method.
• Applet objects uses AWT for graphics.
JApplet uses SWING.
• An applet is a Graphics object that runs in a
Thread object, so every applet can perform
graphics, and runs in parallel to the browser
process.
20 Maart 2006
ISS - Internet Applications Part 2
6
Java Applet Execution - 2
• When the applet is loaded, these methods are automatically
invoked in order:
– The init( ) method is invoked by the Java Virtual Machine.
– The start( ) method
– The paint( ) method.
• The applet is now running and rendered on the web page.
• You program the start( ) method and the paint( ) method for
your application, and invoke a repaint call to re-render the
graphics, if necessary.
• At the end of the execution, the stop( ) method is invoked,
followed by the destroy( ) method to deallocate the applet’s
resources.
20 Maart 2006
ISS - Internet Applications Part 2
7
Applet Security
http://java.sun.com/docs/books/tutorial/applet/overview/
For security reasons, applets that are
loaded over the network have several
restrictions.
– an applet cannot ordinarily read or write
files on the computer that it's executing
on
– an applet cannot make network
connections except to the host that it
came from
20 Maart 2006
ISS - Internet Applications Part 2
8
Advanced Applets
•
You can use threads in an applet.
•
You can make socket calls in an applet, subject to the security constraints.
Server host
Client host
HTTP server
server Y
Host X
browser
applet download
allowed
connection request
applet
forbidden
connection request
server Z
20 Maart 2006
ISS - Internet Applications Part 2
9
Proxy server
A proxy server can be used to circumvent the security
constraints.
Server host
Client host
HTTP server
browser
applet download
server Y
connection request
applet
Host X
connection request
server Z
20 Maart 2006
ISS - Internet Applications Part 2
10
HTML tags for applets - 1
<APPLET specifies the beginning of the HTML applet code
CODE="demoxx.class" is the actual name of the applet
(usually a 'class' file)
CODEBASE="demos/" is the location of the applet (relative
as here, or a full URL)
NAME="smily" the name you want to give to this instance of
the applet on this page
WIDTH="100" the physical width of the applet on your
page
HEIGHT="50" the physical height of the applet on your
page
ALIGN="Top" where to align the applet within its page
space (top, bottom, center)
20 Maart 2006
ISS - Internet Applications Part 2
11
HTML tags for applets - 2
<PARAM specifies a parameter that can be passed to the
applet (applet specific)
NAME=“name1" the name known internally by the applet in
order to receive this parameter
VALUE="000000" the value you want to pass for this
parameter
> end of this parameter
</APPLET> specifies the end of the HTML applet code
20 Maart 2006
ISS - Internet Applications Part 2
12
The HelloWorld Applet
<HTML>
<BODY>
<APPLET code=hello.class width=900
height=300>
</APPLET>
</BODY>
</HTML>
public void paint(Graphics g){
final int FONT_SIZE = 42;
Font font = new Font("Serif",
Font.BOLD, FONT_SIZE);
// set font, and color and display
message on
// the screen at position 250,150
g.setFont(font);
g.setColor(Color.blue);
// The message in the next line is the
one you will see
g.drawString("Hello,
world!",250,150);
}
// applet to display a message in a
window
import java.awt.*;
import java.applet.*;
public class hello extends Applet{
public void init( ){
setBackground(Color.yellow);
}
20 Maart 2006
}
ISS - Internet Applications Part 2
13
Applets Summary
•
•
•
•
An applet is a Java class
Its code is downloaded from a web server
It is run in the browser’s environment on the client host
It is invoked by the browser when it scans a web page
and encounters a class specified with the APPLET tag
• For security reasons, the execution of an applet is
normally subject to restrictions:
– applets cannot access files in the file system on the
client host
– applets cannot make network connection except to
the server host from which it originated
20 Maart 2006
ISS - Internet Applications Part 2
14
2. Servlets
20 Maart 2006
ISS - Internet Applications Part 2
15
Introduction
• Servlets are modules that extend
request/response-oriented servers, such as
Java-enabled web servers.
• Servlets can be embedded in many different
servers because the servlet API, which you use
to write servlets, assumes nothing about the
server's environment or protocol.
• Servlets are portable.
20 Maart 2006
ISS - Internet Applications Part 2
16
Java Servlet Basics
• A servlet is an object of the javax.servlet
class, which is not part of the JDK.
• A servlet runs inside a Java Virtual
Machine (JVM) on a server host.
• A servlet is an object. It is loaded and runs
in an object called a servlet engine, or a
servlet container.
20 Maart 2006
ISS - Internet Applications Part 2
17
Uses for Servlets
http://java.sun.com/docs/books/tutorial/servlets/overview/index.html
• Providing the functionalities of CGI scripts with a
better API and enhanced capabilities.
• Allowing collaboration between people. A servlet can
handle multiple requests concurrently, and can
synchronize requests. This allows servlets to
support systems such as on-line conferencing.
• Forwarding requests. Servlets can forward requests
to other servers and servlets. Thus servlets can be
used to balance load among several servers that
mirror the same content, and to partition a single
logical service over several servers, according to
task type or organizational boundaries.
20 Maart 2006
ISS - Internet Applications Part 2
18
The Servlet class
• The Servlet class is not part of the Java Development Kit
(JDK). There are many packages that support servlets,
including
– The JSWDK (Java Server Web Development Kit) – the API
documentation can also be downloaded from the same site –
freeware provided by Sun for demonstration of the technology,
downloadable from
http://java.sun.com/products/servlet/archive.htmlhttp://java.sun.c
om/products/servlet/download.html
– The Tomcat : a free, open-source implementation of Java Servlet
and JavaServer Pages technologies developed under the
Jakarta project at the Apache Software Foundation.
– Application servers such as WebLogic, iPlanet, WebSphere.
20 Maart 2006
ISS - Internet Applications Part 2
19
The architecture for servlet support
servlet1 code
Server1
Client1
servlet2 code
Client2
servlet3 code
Server2
servlet engine
or servlet container
Client3
A servlet container or servlet engine is required.
The servlet engine can be part of a server, or a
module external to a server.
20 Maart 2006
ISS - Internet Applications Part 2
20
The Life Cycle of an HTTP Servlet
• The web server loads a servlet when it is
called for in a web page.
• The web server invokes the init( ) method
of the servlet.
• The servlet handles client responses.
• The server destroys the servlet (at the
request of the system administrator). A
servlet is normally not destroyed once it is
loaded.
20 Maart 2006
ISS - Internet Applications Part 2
21
The Servlet Life Cycle
http://java.sun.com/docs/books/tutorial/servlets/lifecycle/index.html
servlet engine
servlet code
Server
Client
server loads servlet code and initializes a servlet, possibly as a result of a client's request
servlet engine
Client
servlet code
Server
Via the server, the servlet handles zero or more client requests
Client
servlet engine
servlet code
Server
The server removes the servlet when there is no more client request for it.
(some servers do this step only when they shut down)
20 Maart 2006
ISS - Internet Applications Part 2
22
A simplified sequence diagram
client 1
client2
server
servlet
container
loads servlet
servlet
init( )
HTTP request
service( )
HTTP response
HTTP request
service( )
HTTP response
terminate
destroy( )
shut down
20 Maart 2006
ISS - Internet Applications Part 2
23
The Servlet Interface
Servlets
generic servlets
HTTP servlets
"The central abstraction in the
Servlet API is a Servlet interface.
All servlets implement this
interface either directly or, more
commonly, by extending a class
that implements it such as HTTPServlet
The Servlet interface declares, but does
not implement, methods that manage
the servlet and its communications with clients.
Servlet writers provide some or all of these
methods when developing a servlet."
http://java.sun.com/docs/books/tutorial/se rvle ts/
your servlet
20 Maart 2006
ISS - Internet Applications Part 2
24
Generic Servlets and HTTP Servlets
Java Servlet Programming, O’Reilley Press
• Every servlet must implement the
javax.servlet.Servlet interface
• Most servlets implement the interface by
extending one of these classes
– javax.servlet.GenericServlet: most general
– javax.servlet.http.HttpServlet: an extension of
HTTP servers.
• A generic servlet should override the service( )
method to process requests and generate
appropriate responses.
• An HTTP servlet overrides the doPost( ) and/or
doGet( ) method.
20 Maart 2006
ISS - Internet Applications Part 2
25
Generic and HTTP Servlets
GenericServlet
Client
request
Server
response
service ( )
HTTPServlet
Browser
request
response
HTTP Server
doGet ( )
service ( )
doPost( )
20 Maart 2006
ISS - Internet Applications Part 2
26
A simple Servlet, from
http://java.sun.com/docs/books/tutorial/servlets/overview/simple.html
public class SimpleServlet extends HttpServlet {
/** * Handle the HTTP GET method by building a simple web page. */
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out;
String title = "Simple Servlet Output";
// set content type and other response header fields first
response.setContentType("text/html");
// then write the data of the response out = response.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(title);
out.println("</TITLE></HEAD><BODY>");
out.println("<H1>" + title + "</H1>");
out.println("<P>This is output from SimpleServlet.");
out.println("</BODY></HTML>");
out.close();
} //end method
} // end class
20 Maart 2006
ISS - Internet Applications Part 2
27
Using HTTP Servlet to process web forms
http://java.sun.com/docs/books/tutorial/servlets/client-interaction/req-res.html
Requests and Responses
Methods in the HttpServlet class that handle client requests
take two arguments:
– An HttpServletRequest object, which encapsulates
the data from the client
– An HttpServletResponse object, which
encapsulates the response to the client
The methods for handling HTTP requests and
responses are:
–
–
public void doGet (HttpServletRequest request, HttpServletResponse
response) for requests sent using the GET method.
public void doPost(HttpServletRequest request, HttpServletResponse
response) for requests sent using the POST method.
20 Maart 2006
ISS - Internet Applications Part 2
28
HttpServletRequest Objects
http://java.sun.com/docs/books/tutorial/servlets/client-interaction/req-res.html
An HttpServletRequest object
– provides access to HTTP header data, such as any cookies
found in the request and the HTTP method with which the
request was made.
– allows you to obtain the arguments that the client sent as
part of the request.
To access client data sent with an HTTP request:
• The getQueryString method returns the query string.
• The getParameter method returns the value of a
named parameter.
• The getParameterValues method returns an array of
values for the named parameter.
20 Maart 2006
ISS - Internet Applications Part 2
29
HttpServletRequest Interface
• public String ServletRequest.getQueryString( ); returns the
query string of the request.
• public String GetParameter(String name): given the name of a
parameter in the query string of the request, this method
returns the value.
• public String[ ] GetParameterValues(String name): returns
multiple values for the named parameter – use for parameters
which may have multiple values, such as from checkboxes.
• public Enumeration getParameterNames( ): returns an
enumeration object with a list of all of the parameter names in
the query string of the request.
20 Maart 2006
ISS - Internet Applications Part 2
30
HttpServletResponse Objects
http://java.sun.com/docs/books/tutorial/servlets/client-interaction/req-res.html
• An HttpServletResponse object provides two ways of
returning data to the user:
– The getWriter method returns a Writer
– The getOutputStream method
returns a ServletOutputStream
• Use the getWriter method to return text data to the
user, and the getOutputStream method for binary
data.
• Closing the Writer or ServletOutputStream after you
send the response allows the server to know when
the response is complete.
20 Maart 2006
ISS - Internet Applications Part 2
31
HttpServletResponse Interface
• public interface HttpServletResponse extends
ServletResponse: “The servlet engine provides an
object that implements this interface and passes it
into the servlet through the service method” – “Java
Server Programming”
• public void setContentType(String type) : this
method must be called to generate the first line of
the HTTP response:
• public PrintWriter getWriter( ) throws IOException:
returns an object which can be used for writing the
responses, one line at a time using out.println().
20 Maart 2006
ISS - Internet Applications Part 2
32
Servlets are Concurrent
http://java.sun.com/docs/books/tutorial/servlets/client-interaction/req-res.html
HTTP servlets are typically capable of serving
multiple clients concurrently: the servlet engine
uses a separate thread to invoke each method.
Hence servlet methods should be thread-safe: If
the methods in your servlet do work for clients
by accessing a shared resource, then you must
either:
– Synchronize access to that resource, or
– Ensure that the servlet can handle only one
client request at a time (by using semaphores
or locks).
20 Maart 2006
ISS - Internet Applications Part 2
33
Handling GET requests
http://java.sun.com/docs/books/tutorial/servlets/client-interaction/httpmethods.html
public class BookDetailServlet extends HttpServlet {
public void doGet (HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
...
// set content-type header before accessing the Writer
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// then write the response
out.println("<html>" +
"<head><title>Book Description</title></head>" + ... );
//Get the identifier of the book to display
String bookId = request.getParameter("bookId");
if (bookId != null) {
// fetch the information about the book and print it
...
}
out.println("</body></html>");
out.close();
}
...}
20 Maart 2006
ISS - Internet Applications Part 2
34
Handling POST Requests
http://java.sun.com/docs/books/tutorial/servlets/client-interaction/httpmethods.html
public class ReceiptServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
...
// set content type header before accessing the Writer
response.setContentType("text/html");
PrintWriter out = response.getWriter( );
// then write the response
out.println("<html>" + "<head><title> Receipt </title>" + ...);
out.println("Thank you for purchasing your books from us " +
request.getParameter("cardname") + ...);
out.close();
}
...
}
20 Maart 2006
ISS - Internet Applications Part 2
35
Servlet Examples
See Servlet\simple folder in code sample:
• HelloWorld.java: a simple servlet
• Counter.java: illustrates that a servlet is
persistent
• Counter2.java: illustrates the use of
synchronized method with a servlet
• GetForm.html, GetForm.java: illustrates the
processing of data sent with an HTTP request
via the GET method
• PostForm.html, PostForm.java: illustrates the
processing of data sent with an HTTP request
via the POST method
20 Maart 2006
ISS - Internet Applications Part 2
36
Session State Information
• The mechanisms for state information
maintenance with CGI can also be used
for servlets: hidden-tag, URL suffix,
file/database, cookies.
• In addition, a session tracking mechanism
is provided, using an HttpSession object.
20 Maart 2006
ISS - Internet Applications Part 2
37
Cookies in Java
http://java.sun.com/products/servlet/2.2/javadoc/index.html
• A cookie has a name, a single value, and optional attributes
such as a comment, path and domain qualifiers, a maximum
age, and a version number.
Some Web browsers have bugs in how they handle the optional
attributes, so use them sparingly to improve the interoperability
of your servlets.
• The servlet sends cookies to the browser by using the
HttpServletResponse.addCookie(javax.servelet.http.Cookie)
method, which adds fields to HTTP response headers to send
cookies to the browser, one at a time. The browser is expected
to support 20 cookies for each Web server, 300 cookies total,
and may limit cookie size to 4 KB each.
• The browser returns cookies to the servlet by adding fields to
HTTP request headers. Cookies can be retrieved from a request
by using the HttpServletRequest.getCookies( ) method. Several
cookies might have the same name but different path
attributes.
20 Maart 2006
ISS - Internet Applications Part 2
38
Processing Cookies with Java
Java Server Programming – Wrox press
• A cookie is an object of the javax.servlet.http.cookie
class.
• Methods to use with a cookie object:
• public Cookie(String name, String value): creates a
cookie with the name-value pair in the arguments.
• import javax.servlet.http.*
• Cookie oreo = new Cookie(“id”,”12345”);
• public string getName( ) : returns the name of the cookie
• public string getValue( ) : returns the value of the cookie
• public void setValue(String _val) : sets the value of the
cookie
• public void setMaxAge(int expiry) : sets the maximum age of
the cookie in seconds.
20 Maart 2006
ISS - Internet Applications Part 2
39
Processing Cookies with Java – 2
Java Server Programming – Wrox press
• public void setPath(java.lang.String uri) : Specifies a path for the
cookie to which the client should return the cookie. The cookie
is visible to all the pages in the directory you specify, and all
the pages in that directory's subdirectories. A cookie's path
must include the servlet that set the cookie, for example,
/catalog, which makes the cookie visible to all directories on
the server under /catalog.
• public java.lang.String getPath() : Returns the path on the server
to which the browser returns this cookie. The cookie is visible
to all subpaths on the server.
• public String getDomain( ) : returns the domain of the cookie.
• if orea.getDomain.equals(“.foo.com”)
•
… // do something related to golf
• public void setDomain(String _domain): sets the cookie’s
domain.
20 Maart 2006
ISS - Internet Applications Part 2
40
doGet/doPost Method using cookies
Public void doGet(HttpServletResponse req, HttpServletResponse
res)
throws ServletException, IOExceiption{
res.setContentType(“text/html”);
PrintWriter out = res.getWriter( );
out.println (“<H1>Contents of your shopping cart:</H1>”);
Cookie cookies[ ];
cookies = req.getCookies( );
if (cookies != null) {
for ( int i = 0; i < cookies.length; i++ ) {
if (cookies[i].getName( ).startWith(“Item”))
out.println( cookies[i].getName( ) + “: “ +
cookies[i].getValue( ));
out.close( );
}20 Maart 2006
ISS - Internet Applications Part 2
41
Servlet & Cookies Example
See Servlet\cookies folder in code sample:
• Cart.html: web page to allow selection of items
• Cart.java: Servlet invoked by Cart.html; it
instantiates a cookie object for each items
selected.
• Cart2.html: web page to allow viewing of items
currently in cart
• Cart2.java: Servlet to scan cookies received with
the HTTP request and display the contents of
each cookie.
20 Maart 2006
ISS - Internet Applications Part 2
42
HTTP Session Objects
http://java.sun.com/products/servlet/2.2/javadoc/index.html
• The javax.servlet.http package provides a
public interface HttpSession: Provides a way to identify
a user across more than one page request or visit to a
Web site and to store information about that user.
• The servlet container uses this interface to create a
session between an HTTP client and an HTTP server.
The session persists for a specified time period, across
more than one connection or page request from the user.
A session usually corresponds to one user, who may visit
a site many times.
20 Maart 2006
ISS - Internet Applications Part 2
43
HTTP Session Object - 2
http://java.sun.com/products/servlet/2.2/javadoc/index.html
• This interface allows servlets to
– View and manipulate information about a session,
such as the session identifier, creation time, and last
accessed time
– Bind objects to sessions, allowing user information to
persist across multiple user connections
• Session object allows session state information to be
maintained without depending on the use of cookies
(which can be disabled by a browser user.)
• Session information is scoped only to the current web
application (ServletContext), so information stored in one
context will not be directly visible in another.
20 Maart 2006
ISS - Internet Applications Part 2
44
The Session object
Server host
A Session object
servelet engine
servlet
Client host
web server
request /response
20 Maart 2006
ISS - Internet Applications Part 2
45
Obtaining an HTTPSession Object
A session object is obtained using the getSession( ) method of the
HttpServletRequest object (from doPost or doGet)
public HTTPSession getSession(boolean create): Returns the current
HttpSession associated with this request or, if if there is no current
session and create is true, returns a new session. If create is false
and the request has no valid HttpSession, this method returns null.
To make sure the session is properly maintained, you must call
this method before the response is committed.
public class ShoppingCart extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletRespnse
res)
throws ServletException, IOException
…
// get session object
HttpSession session = req.getSession(true)
if (session != null) {
…
}…
20 Maart 2006
ISS - Internet Applications Part 2
46
The HTTPSession Object
• public java.lang.String getId( ): returns a string containing the
unique identifier assigned to this session. The identifier
is assigned by the servlet container and is
implementation dependent.
• public java.lang.Object getAttribute(java.lang.String name): returns
the object bound with the specified name in this session, or null if no
object is bound under the name.
• public java.util.Enumeration getAttributeNames( ): returns an
Enumeration of String objects containing the names of all the
objects bound to this session.
• public void removeAttribute(java.lang.String name): removes the
object bound with the specified name from this session. If the
session does not have an object bound with the specified name, this
method does nothing.
20 Maart 2006
ISS - Internet Applications Part 2
47
Session Object example
based on an example in “Java Server Programming”, Wrox Press
// Get item count from session object
Integer itemCount = (Integer)session.getAttribute(“itemCount);
// if this is the first call during the session, no attribute exists
if (itemCount == null) {
itemCount = new Integer(0);
// process form data
String[ ] itemSelected;
String itemName;
itemSelected = req.getParameterValues(“item”);
// if user has selected items on form, add them to the session object
if (itemSelected != null) {
for ( int i=0; i < itemSelected.length; i ++) {
itemName = itemSelected[I];
itemCount = new Integer(itemCount.intValue( ) +1);
session.setAttribue(“Item” + itemCount, itemName);
}// end for
session.setAttribtue(“itemCount”, itemCount);
} // end if
20 Maart 2006
ISS - Internet Applications Part 2
48
Session object example - continued
PrintWriter out = res.getWriter( );
res.setContentType(“text/html”);
// … output HTML for web page heading
// Output current contents of the shopping cart
out.println(“<H1>Current Shopping Cart Contents</H1>”);
for (int i = 1; i <= ItemCount.intValue( ); i++) (
// retrieve objects from the session object
String item = (String) session.getAttribute(“”Item” + i);
out.println(“item<br>”);
}
// … output HTML for web page footing
out.close( );
20 Maart 2006
ISS - Internet Applications Part 2
49
Session Object example
See Servlet\Session folder in code sample:
• Cart.html: web page to allow selection of items
• Cart.java: Servlet invoked by Cart.html; it
instantiates a session object which contains
descriptions of items selected.
• Cart2.html: web page to allow viewing of items
currently in cart
• Cart2.java: Servlet to display items in the
shopping cart, as recorded by the use a session
object in the Cart servlet
20 Maart 2006
ISS - Internet Applications Part 2
50
Servlets Summary - 1
• A servlet is a Java class.
• Its code is loaded to a servlet container
on the server host.
• It is initiated by the server in response to a
client’s request.
• Once loaded, a servlet is persistent.
20 Maart 2006
ISS - Internet Applications Part 2
51
Servlets Summary - 2
• For state information maintenance:
– hidden form fields
– cookies
– the servlet’s instance variables may hold
global data
– a session object can be used to hold session
data
20 Maart 2006
ISS - Internet Applications Part 2
52
3. Web Services
20 Maart 2006
ISS - Internet Applications Part 2
53
Introduction Web Services
• Network services provided over HTTP – “wired
services”
• It is promoted as a new way to build network
applications from distributed components that
are language- and platform-independent
• The technologies are still evolving
• We are more interested in the concept and
principles, but we will look into one API (Apache
SOAP).
20 Maart 2006
ISS - Internet Applications Part 2
54
Web Services
web service
client
The web
(HTTP-based
network)
web service
web service
20 Maart 2006
ISS - Internet Applications Part 2
55
Web Service Software Components
• A web service is a message-based
network service.
• Messages are sent via a remote
procedure call mechanism using SOAP for
the parameter format.
application
logic
20 Maart 2006
service
proxy
service
listener
ISS - Internet Applications Part 2
service
request
56
Just-in-time integration
• Network services can be integrated
dynamically, on an as-needed basis.
• SunMicro’s jini is a framework that
supports the idea.
• Network services are registered with a
service registry; a service consumer/client
looks up the registry to fulfill its needs.
• The binding of a client to the service can
occur at runtime.
20 Maart 2006
ISS - Internet Applications Part 2
57
Web service protocol stack
20 Maart 2006
application
application
service discovery
service discovery
service description
service description
messaging
messaging
transport
transport
network
network
ISS - Internet Applications Part 2
58
Web service protocols
application
service discovery
service description
messaging
transport
network
20 Maart 2006
UDDI (Universal Description, Discovery,
and Integration)
WSDL (Web Service Description Language)
XML, SOAP (Simple Object Access Protocol)
TCP, HTTP, SMTP, Jabber
IP
ISS - Internet Applications Part 2
59
Webservices Summary
• A web service is a message-based
network service.
• Web services can be integrated
dynamically, on an as-needed basis.
• Network services are registered with a
service registry.
• Webservices use a remote procedure
protocol over HTTP using SOAP
messages.
20 Maart 2006
ISS - Internet Applications Part 2
60
4. SOAP
20 Maart 2006
ISS - Internet Applications Part 2
61
SOAP
• SOAP is a protocol which applies XML for
message exchange in support of remote
method calls over the Internet.
• Compared to remote method invocation or
CORBA-based facilities:
– SOAP is web-based or “wired” and hence is
not subject to firewall restrictions
– Language-independent
– Can provide just-in-time service integration
20 Maart 2006
ISS - Internet Applications Part 2
62
Introduction
“SOAP is a Remote Procedure Calling protocol
that works over HTTP (and TCP/SMTP etc.).
The body of the request is in XML. A procedure
executes on the server and the value it returns is
also formatted in XML.
Procedure parameters and returned values can
be scalars, numbers, strings, dates, etc.; and
can also be complex record and list structures.”
(- A Busy Developer’s Guide To Soap1.1)
20 Maart 2006
ISS - Internet Applications Part 2
63
Remote Procedure Call using HTTP
service
object
web
server
me thod name ,
parame te r list
re turn value
web
client
HTTP request
HTTP response
20 Maart 2006
ISS - Internet Applications Part 2
64
SOAP Messages
SOAP envelope
header block
optional
SOAP header
header block
message body
20 Maart 2006
ISS - Internet Applications Part 2
required
SOAP body
65
An XML-encoded SOAP RPC
<soap:Envelope xmlns:soap='http://www.w3.org/2001/10/soap-envelope'>
<soap:Header>
<-- Headers go here -->
</soap:Header>
<soap:Body>
<-- Request goes here -->
</soap:Body>
</soap:Envelope>
Source: http://www.xml.com/
20 Maart 2006
ISS - Internet Applications Part 2
66
Example of a SOAP message
(xml)
<soap:Envelope xmlns:soap='http://www.w3.org/2001/10/soap-envelope'>
<soap:Header>
<h:Log xmlns:h='http://example.org/cvs/logging'>
<trace>4</trace>
</h:Log>
<h:PServer xmlns:h='http://example.org/cvs/pserver'
soap:mustUnderstand='true' >
<username>[email protected]</username>
<password>anoncvs</password>
</h:PServer>
</soap:Header>
<soap:Body>
<m:Checkout xmlns:m='http://example.org/cvs'>
<source>/xml/soap/webservices/cvs</source>
<revision>1.1</revision>
<destination>/etc/usr/marting/source/xml</destination>
</m:Checkout>
</soap:Body>
</soap:Envelope>
source: http://www.xml.com
20 Maart 2006
ISS - Internet Applications Part 2
67
A SOAP Message that contains a remote procedure call
source: (http://www.soaprpc.com/tutorials/) A Busy Developer’s Guide To Soap1.1
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAPENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAPENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
<SOAP-ENV:Body>
<m:getStateName xmlns:m="http://www.soapware.org/">
<statenum xsi:type="xsd:int">41</statenum>
</m:getStateName>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
20 Maart 2006
ISS - Internet Applications Part 2
68
An Example SOAP Request
source: (http://www.soaprpc.com/tutorials/) A Busy Developer’s Guide To Soap1.1
procedure
name
<?xml version="1.0"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
name of server
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
<SOAP-ENV:Body>
<m:getStateName xmlns:m="http://www.soapware.org/">
<statenum xsi:type="xsd:int">41</statenum>
</m:getStateName>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
parameter of type int and value 41
20 Maart 2006
ISS - Internet Applications Part 2
69
Response example
source: (http://www.soaprpc.com/tutorials/) A Busy Developer’s Guide To
Soap1.1
procedure name
<?xml version="1.0"?>
<SOAP-ENV:Envelope SOAP-ENV:
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
name of server
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
<SOAP-ENV:Body>
<m:getStateNameResponse xmlns:m="http://www.soapware.org/">
<Result xsi:type="xsd:string">South Dakota</Result>
</m:getStateNameResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
returned value
20 Maart 2006
ISS - Internet Applications Part 2
70
Example of a SOAP message
for an error RPC response
source: (http://www.soaprpc.com/tutorials/) A Busy Developer’s Guide To
Soap1.1
<?xml version="1.0"?>
<SOAP-ENV:Envelope SOAP-ENV:
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>
Can't call getStateName because there are
too many parameters.
</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
20 Maart 2006
ISS - Internet Applications Part 2
71
HTTP and SOAP RPC
Request
source: (http://www.soaprpc.com/tutorials/) A Busy Developer’s Guide To
Soap1.1
A SOAP message can be used to transport a
SOAP remote procedure request/response,
as follows:
POST /examples HTTP/1.1
User-Agent: Radio UserLand/7.0 (WinNT)
Host: localhost:81
Content-Type: text/xml; charset=utf-8
Content-length: 474
SOAPAction: "/examples"
<blank line>
<text for SOAP message>
20 Maart 2006
ISS - Internet Applications Part 2
72
An HTTP request that carries a SOAP RPC request
source: (http://www.soaprpc.com/tutorials/) A Busy Developer’s Guide To
Soap1.1
POST /examples HTTP/1.1
User-Agent: Radio UserLand/7.0 (WinNT)
Host: localhost:81
Content-Type: text/xml; charset=utf-8
Content-length: 474
SOAPAction: "/examples"
<?xml version="1.0"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/" xmlns:
SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:
SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
<SOAP-ENV:Body>
<m:getStateName xmlns:m="http://www.soapware.org/">
<statenum xsi:type="xsd:int">41</statenum>
</m:getStateName>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
20 Maart 2006
ISS - Internet Applications Part 2
73
An HTTP request that carries a SOAP RPC response
source: (http://www.soaprpc.com/tutorials/) A Busy Developer’s Guide To Soap1.1
HTTP/1.1 200 OK
Connection: close
Content-Length: 499
Content-Type: text/xml; charset=utf-8
Date: Wed, 28 Mar 2001 05:05:04 GMT
Server: UserLand Frontier/7.0-WinNT
<?xml version="1.0"?>
<SOAP-ENV:Envelope SOAPENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
<SOAP-ENV:Body>
<m:getStateNameResponse
xmlns:m="http://www.soapware.org/">
<Result xsi:type="xsd:string">South Dakota</Result>
</m:getStateNameResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
20 Maart 2006
ISS - Internet Applications Part 2
74
Error Example
source: (http://www.soaprpc.com/tutorials/) A Busy Developer’s Guide To Soap1.1
HTTP/1.1 500 Server Error
Connection: close
Content-Length: 511
Content-Type: text/xml; charset=utf-8
Date: Wed, 28 Mar 2001 05:06:32 GMT
Server: UserLand Frontier/7.0-WinNT
<?xml version="1.0"?>
<SOAP-ENV:Envelope SOAPENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Can't call getStateName because there are too
many
parameters.</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
20 Maart 2006
ISS - Internet Applications Part 2
75
SOAP Packages
source: http://www.soapuser.com
•
•
•
•
Apache SOAP for Java
Apache Axis for Java
Idoox WASP for C++
Microsoft SOAP Toolkit (part of the .net
framework)
• SOAP::Lite for Perl
20 Maart 2006
ISS - Internet Applications Part 2
76
Apache SOAP
• Allows clients and services to be written in
Java
• Part of the Apache-XML project
(http://xml.apache.org/)
• SOAP package downloadable:
http://xml.apache.org/dist/soap/
• Installation instruction:
http://www.xmethods.com/gettingstarted/a
pache.html
20 Maart 2006
ISS - Internet Applications Part 2
77
Apache SOAP installation
C:
soap
%TOMCAT_HOME%
webapps
soap-2_2
lib
xerces,jar
mail.jar
soap
soap.jar
soap.war
activation.jar
WEB-INF
classes
onjava
CalcService.java
CalcService.class
DeploymentDescriptor.xml
20 Maart 2006
ISS - Internet Applications Part 2
78
Classpath setting
set CLASSPATH=
C:\soap\soap-2_2\lib\xerces.jar;
C:\jdk1.3\bin;
C:\jdk1.3\lib\tools.jar;
C:\soap\soap-2_2\lib\mail.jar;
C:\soap\soap-2_2\lib\soap.jar;
C:\soap\soap-2_2\lib\activation.jar;
C:\tomcat\lib\servlet.jar;
.;
20 Maart 2006
ISS - Internet Applications Part 2
79
Writing a Client Application using Apache
SOAP
source: http://www.xmethods.com/gettingstarted/apache.html
Classpath
Your CLASSPATH environment variable should have
both the "soap.jar" and "xerces.jar" JAR files included.
Importing packages
For basic SOAP method invocation, you should import
the following at minimum:
// Required due to use of URL class , required by Call class
import java.net.*;
// Required due to use of Vector class
import java.util.*;
// Apache SOAP classes used by client
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;
20 Maart 2006
ISS - Internet Applications Part 2
80
Ready-made SOAP Services
• A number of SOAP ready-made services are
available at http://www.xmethods.com/
XMethods Service Weather Temperature
ID8
Service Owner:xmethods.net
Contact Email:[email protected]
Service Description:Current temperature in a
given U.S. zipcode region.
SOAP Implementation:Apache SOAP
20 Maart 2006
ISS - Internet Applications Part 2
81
Sample SOAP service
Found at http://www.xmethods.com
Weather - Temperature
Analyze WSDL | View RPC Profile | http://www.xmethods.net/sd/2001/TemperatureService.wsdl
XMethods ID 8
Service Owner: xmethods.net
Contact Email: [email protected]
Service Home Page:
Description: Current temperature in a given U.S. zipcode region.
SOAP Implementation: Apache SOAP
20 Maart 2006
ISS - Internet Applications Part 2
82
RPC Profile for Service
RPC Profile for Service "Weather - Temperature"
Method Name getTemp
Endpoint URL http://services.xmethods.net:80/soap/servlet/rpcrouter
SOAPAction
Method Namespace URI urn:xmethods-Temperature
Input Parameters zipcode string
Output Parameters return float
See sample: TempClient.java
20 Maart 2006
ISS - Internet Applications Part 2
83
Client program samples
• See samples in client folder:
– TempClient.java
– StockQuoteClient.java
– CurrencyClient.java
20 Maart 2006
ISS - Internet Applications Part 2
84
SOAP data types
SOAP Data Types,
http://www.sdc.iup.edu/outreach/spring200
2/webservices/datatypes.html
• Uses XML Schema data types
• Primitive Types
string, boolean, decimal, float, double,
duration, dateTime, time, date,
gYearMonth, gYear, gMonthDay, gDay,
gMonth, hexBinary, base64Binary,
anyURI, QName, NOTATION
20 Maart 2006
ISS - Internet Applications Part 2
85
SOAP data types
Derived Types
• Simple types (derived from a single primitive
type)
* integer is derived from decimal
* int (-2147483648 <= int <= 2147483647) is
derived from long which is derived from integer
* 5-digit zip code can be derived from int
* may use regular expressions to specify derived
types, such as ([A-Z]){2,3}-\d{5}
20 Maart 2006
ISS - Internet Applications Part 2
86
Complex Type
Complex types (struct or array)
Struct example
<instructor>
<firstname xsi:type="xsd:string">Ed</firstname>
<lastname xsi:type="xsd:string">Donley</lastname>
</instructor>
• Array example
<mathcourses xsi:type=
"SOAP-ENC:Array" SOAP ENC:arrayType="se:string[3]">
<se:string>10452C</se:string>
<se:string>10454C</se:string>
<se:string>11123T</se:string>
</mathcourses>
20 Maart 2006
ISS - Internet Applications Part 2
87
Creating Web Services (server-side SOAP)
•
O'Reilly Network: Using SOAP with Tomcat
[Feb. 27, 2002]
http://www.onjava.com/pub/a/onjava/2002/02/2
7/tomcat.htm
• Apache SOAP allows you to create and deploy
a SOAP web service.
• You must install some .jar files on your system
and set the CLASSPATH to them:
Algorithm:
1. Write a class for providing the service.
2. Create a deployment descriptor in XML.
3. Deploy the service with the service manager.
20 Maart 2006
ISS - Internet Applications Part 2
88
The Apache SOAP service manager
• The service manager is itself implemented as a SOAP
service.
• To see what services are deployed on your system:
java org.apache.soap.server.ServiceManagerClient
http://localhost:8080/soap/servlet/rpcrouter list
• To deploy a service:
java org.apache.soap.server.ServiceManagerClient
http://localhost:8080/soap/servlet/rpcrouter deploy
foo.xml
20 Maart 2006
ISS - Internet Applications Part 2
89
Creating a SOAP Service
O'Reilly Network: Using SOAP with Tomcat [Feb. 27, 2002]
http://www.onjava.com/pub/a/onjava/2002/02/27/tomcat.html
• A SOAP service can be just about any
Java class that exposes public methods
for invocation. The class does not need to
know anything about SOAP, or even that it
is being executed as a SOAP service.
• The method parameters of a SOAP
service must be serializable. The available
types that can be used as SOAP service
parameters are shown in (Listing 2)
(shown on next slide)
20 Maart 2006
ISS - Internet Applications Part 2
90
SOAP Service Parameter Types
• All Java primitive types and their corresponding
wrapper classes
• Java arrays
• java.lang.String
• java.util.Date
• java.util.GregorianCalendar
• java.util.Vector
• java.util.Hashtable
• java.util.Map
20 Maart 2006
ISS - Internet Applications Part 2
91
SOAP Service Parameter Types
•
•
•
•
•
•
•
•
java.math.BigDecimal
javax.mail.internet.MimeBodyPart
java.io.InputStream
javax.activation.DataSource
javax.activation.DataHandler
org.apache.soap.util.xml.QName
org.apache.soap.rpc.Parameter
java.lang.Object (must be a JavaBean)
20 Maart 2006
ISS - Internet Applications Part 2
92
Sample SOAP Service
Implementations
See sample in SOAP folder:
• TempService: A temperature service
• Exchange: currency exchange service and
client
20 Maart 2006
ISS - Internet Applications Part 2
93
Sample SOAP Service Class
// A sample SOAP service class
// source: http://www.onjava.com/pub/a/onjava/2002/02/27/tomcat.html
package onjava;
public class CalcService {
public int add(int p1, int p2) {
return p1 + p2;
}
public int subtract(int p1, int p2) {
return p1 - p2;
}
}
20 Maart 2006
ISS - Internet Applications Part 2
94
Deployment Descriptor
<isd:service xmlns:isd="http://xml.apache.org/xmlsoap/deployment"
id="urn:onjavaserver">
<isd:provider type="java"
scope="Application"
methods="add subtract">
<isd:java class="onjava.CalcService"/>
</isd:provider>
<isd:faultListener>org.apache.soap.server.DOM
FaultListener</isd:faultListener>
</isd:service>
20 Maart 2006
ISS - Internet Applications Part 2
95
SOAP Summary
• SOAP is a protocol that makes use of HTTP
requests and responses to effect remote method
calls to web services.
• A SOAP method call is encoded in XML and is
embedded in an HTTP request
• The return value of a method call is likewise
embedded and encoded in an HTTP response
• A number of SOAP APIs are available for
programming web services and client method
calls. The Apache API was introduced.
20 Maart 2006
ISS - Internet Applications Part 2
96
References (1)
• Programming Web Services with SOAP, by Snell
et al, O’Reilly
• SOAP Tutorial,
http://www.w3schools.com/soap/default.asp
• SoapRPC.com: Tutorials,
(http://www.soaprpc.com/tutorials/) A Busy
Developer’s Guide To Soap1.1
• DaveNet : XML-RPC for Newbies,
http://davenet.userland.com/1998/07/14/xmlRpc
ForNewbies
• SoapRPC.com: Other resources,
http://www.soaprpc.com/resources/
20 Maart 2006
ISS - Internet Applications Part 2
97
References (2)
• Aloso,Casati, Kuno, Machiraju
“Web Services - Concepts, Architectures
and Applications”
• Liu
“Distributed Computing - principles and
applications”
20 Maart 2006
ISS - Internet Applications Part 2
98
Self Study Exercises
• Chapter 11
– Applet exercises: 4
– General Servlet Exercises: 1 & 2
– SOAP Exercises: 2 & 3
20 Maart 2006
ISS - Internet Applications Part 2
99
Download