Servlet - FBK | SE

Download Report

Transcript Servlet - FBK | SE

An introduction
to Java Servlet
Alessandro Marchetto
Fondazione Bruno Kessler-IRST,
1


Outline


Just a quick introduction
After this lecture you will be able to
read and write “simple” Servlets
Web applications
Java Servlet




Servlet engine
How to write a servlet
How to Process a request (Form data)
Servlet session tracking
2
Web applications




The
Web
server
distributes
pages
of
formatted information to
clients that request it.
HTML
Pages
are
transmitted using the http
protocol
The browser renders
(static) HTML pages.
HTML pages are stored in
a file system (database)
contained on the web
server.
3
Dynamic Web applications
Web Server



In some cases the content of a
page (HTML) is not necessarily
stored inside a file.
The content can be assembled at
run-time according to user inputs
and informations stored in a
database. It can come from the
output of a program (server
script).
Servlets and JavaServer Pages
are the Java technology’s answer
to dynamic Web sites. They are
programs that run on a Web server
and build Web pages.
Script/program
DB
http request
http response
Client
4
HTML and DOM


The HTML Document Object Model (HTML DOM) defines a standard
way for accessing and manipulating HTML documents.
The DOM presents an HTML document as a tree-structure (a node tree),
with elements, attributes, and text.
<html>
<head>
its DOM
<title>My title</title>
</head>
<body>
<h1>My header</h\>
<a href=“”>My link</a>
</body>
</html>
http://www.w3.org/TR/html401/
http://www.w3.org/TR/DOM-Level-2-HTML/html.html
5


Outline


Just a quick introduction
After this lecture you will be able to
read and write “simple” servlets
Web applications
Java Servlet




Servlet engine
How to write a servlet
How to Process a request (i.e., Form data)
Servlet session tracking
6
Servlet Engine




A servlet engine (or servlet
container) provides the run-time
environment in which a servlet is
executed.
The servlet engine manages the
life-cycle of servlets (i.e., from
their
creation
to
their
destruction).
The servlet engine: loads,
executes and destroyes servlets
Apache Tomcat is a servlet
container
http://tomcat.apache.org
Relationships between Web server,
Servlet engine and Servlets.
7
The Life-Cycle of a Servlet


Servlet are Java classes. To execute them it is necessary
compiling them in bytecode.
The servlet engine perform the following tasks:




it loads the servlet when it is requested (only
the first time).
it calls the init() method of the servlet.
it handles the requests calling the service()
method of the servlet.
at the end, it calls the destroy() method.
8
HttpServlet implements the Servlet interface …
How to write a Java servlet



All servlets implement the Servlet interface or extend a
class the implements it.
We will use HttpServlet and these methods:
 doGet
 doPost
 init
 destroy
 getServletInfo
To write a servlet some of these methods must be
overridden .....
http://java.sun.com/javaee/5/docs/api/
9

The generic template to write Servlet
Generic Template
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletTemplate extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Use “request” to read incoming HTML form data (e.g. submitted data)
// Use “response” to specify the HTTP response status (e.g., content type)
PrintWriter out = response.getWriter();
// Use “out” to send content to browser
}
}
10


Helloworld

First example of servlet
We override doGet()
The execution of it produces a HTML
response
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloClientServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
out.println(“<HTML><HEAD><TITLE>Hello Client!</TITLE>”+
“</HEAD><BODY>Hello Client!</BODY></HTML>”);
out.close();
}
}
11
Context


The Context can be used to store “global”
information shared among the servlets of a given
application.
The Context is initialized when the Servlet
container starts and destroyed when it shuts down.
For this reason, it is suited for keeping the “long
lived information”
ServletContext
1
1
Common Data
It is implemented with: javax.servlet.ServletContext
The methods:
-getServletContext(): obtain the context
-getAttribute(String key): get an attribute from the context
-setAttribute(String key, Object value): set an attribute
Servlets
12

How to exchange data between client
and server?
Forms and Servlets (1)
First Par
~hall
Second Par
~gates
Third Par
~mcnealy
<form method=“GET/POST” action=“ThreeParams”>
First Par: <input type=“text” name=“param1” />
Second Par: <input type=“text” name=“param2” />
Third Par: <input type=“text” name=“param3” />
<input type=“submit” value=“Submit” />
</form>
Submit
GET: In a URL the part after the question mark (?) is known as form data, and is a way to
send data from a Web page to a server-side program
http://host/ThreeParams ? param1= ~hall&param2= ~gates&param3= ~mcnealy
POST: a data packege is created and attached to the HTTP requests sent to the server
13
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
Forms and Servlets (2)
HTML CODE
public class ThreeParams extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Reading Three Request Parameters";
out.println( ServletUtilities.headWithTitle(title) +
"<BODY>\n" + "<H1 ALIGN=CENTER>" +
title + "</H1>\n" +
~hall
"<UL>\n" + " <LI>param1: "
+ request.getParameter("param1") + "\n" +
" <LI>param2: "
~ gate
+ request.getParameter("param2") + "\n" +
" <LI>param3: "
~mcnealy
+ request.getParameter("param3") + "\n" +
"</UL>\n" + "</BODY></HTML>");
}
Forms and Servlets (3)
15
HTTP - Stateless protocol (1)

The Web server can’t remember previous
transactions since HTTP is a “stateless” protocol.
E.g., a shopping cart:
•
•
•
it contains all items that have been selected from an online store's catalog by a
customer;
the customer can check the content of the cart at any time during the session;
thus, the server must be able to maintain the cart of the user across several
Web page requests.
16

How to maintain the state
HTTP - Stateless protocol (2)

There are four ways to maintain the state:
1.
Cookies
javax.servlet.http.Cookie(String nome, String val)
methods: setName(String cookieName), setValue(String cookieValue), etc.
2.
Hidden fields in forms
<input type=“hidden” value=“<valore>” />
3.
URL rewriting
e.g., http://host/serveltPages/ShowSession;jsessionid=E4D371A0710
String encodeURL(String url) of the class HttpServletResponse
where: url is the original l’URL and the output is the rewritten one
4.
Servlets (HttpSession API)
17
Saving the state in general
First request
The Server marks the client with
an unique ID and creates a memory
partition that will contain the data
(state)
xyz5
Every subsequent connection must
send the ID. In this way the server
recognize/identify the client
18
Servlet Sessions (3)
Assuming ShoppingCart is some class you have defined yourself that
stores information on items being purchased
Recover the session
HttpSession session = request.getSession(true);
connected to the client
ShoppingCart previousItems =
(ShoppingCart)session.getAttribute("previousItems"); Recover the cart
if (previousItems == null) {
previousItems = new ShoppingCart(...);
}
String itemID = request.getParameter("itemID");
Add a new product
to the cart
previousItems.addEntry(Catalog.getEntry(itemID));
session.setAttribute("previousItems", previousItems);
Store the cart
in the session
19
References




Tutorial about Servlets and JSP www.apl.jhu/%7Ehall/java/Servlet-Tutorial
Understanding “Architecture 2” www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html
Sun http://java.sun.com/products/servlet/

Sun (Servlet and JSP) API http://java.sun.com/javaee/5/docs/api/

Sun (Servlet) Documentation http://java.sun.com/products/servlet/docs.html

Sun J2EE Tutorial http://java.sun.com/javaee/5/docs/tutorial/doc/
Apache Tomcat http://tomcat.apache.org/

Tomcat (servlet) API http://tomcat.apache.org/tomcat-5.0-doc/servletapi/index.html

Tomcat (jsp) API http://tomcat.apache.org/tomcat-5.0-doc/jspapi/index.html

Tomcat in Eclipse http://www.sysdeo.com/eclipse/tomcatplugin (a Tomcat installation is
required)

Tutorial
about
how
to
intregrate
Tomcat
in
Eclipse
http://plato.acadiau.ca/courses/comp/dsilver/2513/EclipseAndTomcatTutorial/
20
Tomcat configuration (1)
Tomcat directory organization:
In the directory: $TOMCAT_HOME$/webapps
./myApplication
./myApplication/*.html
./myApplication/WEB-INF/
./myApplication/WEB-INF/web.xml
./myApplication/WEB-INF/classes/*.class
./myApplication/WEB-INF/lib/*.jar
[./myApplication/WEB-INF/src/*.java]
21
Tomcat configuration (2)
web.xml:
– XML file used by Tomcat
– it is a deployment descriptor
– used to set specific parameters for the current application, such as:
• name of the servlet (that can be reached though HTTP)
• URL corresponding to servlet files (e.g., into /WEB-INF/classes/)
• sessions “timeout”
• etc.
– it is loaded during the application installation
It is composed of the tags:
– servlet: set alias and parameters to initialize a given servlet
– servlet-mapping: set URL(s) to a given servlet
22
Sample of web.xml
<?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
http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloClientServlet</servlet-class>
</servlet>
Name of the class (with package)
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloClientServlet</url-pattern>
</servlet-mapping>
Alias to use in HTTP request
</web-app>
23
Servlet in Eclipse+Tomcat
Steps to build a new Web application using Tomcat in Eclipse:
1.
2.
3.
4.
Define a new Tomcat Project
Write our servlet file in the subdirectory WEB-INF/src
Write the servlet configutation file (web.xml) in the subdirectory WEB-INF
Start Tomcat or in the right-menu clcik on “Tomcat project“ and reload the
context
5. Open a browser, and call the servelt such as
http://localhost:8080/ProofProject/proofServlet
24
How to compile and execute a Servlet?
How to use Eclipse to done this task?
... Helloworld demo ...
25