45
Servlets

Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Embed Size (px)

Citation preview

Page 1: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Servlets

Page 2: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Applets

Special Java programs (without a “main”) callable from HTML and executed in a graphic context.

They can be executed by: a Java enabled Web Browser;

ad-hoc programs (e.g. Sun AppletViewer).

Page 3: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Applets

Every applet is implemented by creating a subclass of the Applet class.

The hierarchy determines much of what an applet can do and how.

Page 4: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Applet Lifecycle

An applet can react to major events in the following ways:

It can initialize itself. init() It can start running. start() It can draw some graphics. paint() It can respond to user-generated events (Mouse,

keyboard, menus…). handleEvent() It can stop running. stop() It can perform a final cleanup, in preparation for

being unloaded. destroy()

Page 5: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Applet Lifecycle

Whenever it’s needed,at lower priority

init()

stop()

destroy()

start()

handleEvent()

Multithreading!

Actually, more threads are active behind the scenes.

paint()

Page 6: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

handleEvent()

This code is part of the AWT (1.0 Event Model)

public boolean handleEvent(Event evt) {switch (evt.id) { case Event.MOUSE_ENTER: return mouseEnter(evt, evt.x, evt.y);case Event.MOUSE_EXIT: return mouseExit(evt, evt.x, evt.y); case Event.MOUSE_MOVE: return mouseMove(evt, evt.x, evt.y);case Event.MOUSE_DOWN: return mouseDown(evt, evt.x, evt.y);case Event.MOUSE_DRAG: return mouseDrag(evt, evt.x, evt.y);case Event.MOUSE_UP: return mouseUp(evt, evt.x, evt.y);

Page 7: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

handleEvent()

case Event.KEY_PRESS: case Event.KEY_ACTION: return keyDown(evt, evt.key);

case Event.KEY_RELEASE: case Event.KEY_ACTION_RELEASE: return keyUp(evt,

evt.key); case Event.ACTION_EVENT: return action(evt, evt.arg);

case Event.GOT_FOCUS: return gotFocus(evt,

evt.arg); case Event.LOST_FOCUS: return lostFocus(evt,

evt.arg);}

return false; }

Page 8: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Applets-Event handling

To react to an event, an applet must override either the appropriate event-specific method or the handleEvent method.

For example, adding the following code to the Simple applet makes it respond to mouse clicks.

import java.awt.Event; . . . public boolean mouseDown(Event event, int x, int y)

{ addItem("click!... "); return true;

}

Page 9: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Servlets (JDK 1.2)Servlets are modules that extend Java-enabled web servers. For

example, a servlet might be responsible for taking data in an HTML order-entry form and applying the business logic used to update a company's order database.

Servlets are to servers what applets are to browsers. Unlike applets, however, servlets have no graphical

user interface. For a full tutorial, see

http://java.sun.com/docs/books/tutorial/servlets/overview/index.html

Page 10: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Other uses of servlets 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.  

Page 11: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Applets vs. Servlets  

Applet Servlet

Gira: Client Server

Ha un main: NO NO

Estende: java.applet.Applet javax.servlet.http.HttpServlet

Grafica SI NO

Cuore: handleEvent() service()

Page 12: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Servlet Lifecycle

init()

destroy()

service(HttpServletRequest r, HttpServletResponse p)

Chiamato solo la prima volta che la Servlet viene caricato in memoria!

doGet()

doPost()

doXXX()

Solo quando serve scaricare dalla memoria!

Se la Servlet implements SingleThreadModel non ci saranno esecuzioni simultanee di codice

Page 13: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

service()

This code is part of the class HttpServlet protected void service (HttpServletRequest req, HttpServletResponse

resp) throws ServletException, IOException {

String method = req.getMethod (); if (method.equals ("GET")) { long ifModifiedSince; long lastModified; long now; ifModifiedSince = req.getDateHeader ("If-Modified-Since"); lastModified = getLastModified (req); maybeSetLastModified (resp, lastModified); if (ifModifiedSince == -1 || lastModified == -1)

doGet (req, resp); else {

now = System.currentTimeMillis (); if (now < ifModifiedSince || ifModifiedSince < lastModified) doGet (req, resp); else resp.sendError (HttpServletResponse.SC_NOT_MODIFIED);

}

Page 14: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

service() } else if (method.equals ("HEAD")) { long lastModified; lastModified = getLastModified (req); maybeSetLastModified (resp, lastModified); doHead (req, resp); } else if (method.equals ("POST")) { doPost (req, resp); } else if (method.equals ("PUT")) { doPut(req, resp); } else if (method.equals ("DELETE")) { doDelete(req, resp); } else if (method.equals ("OPTIONS")) { doOptions(req,resp); } else if (method.equals ("TRACE")) { doTrace(req,resp); } else { resp.sendError (HttpServletResponse.SC_NOT_IMPLEMENTED,

"Method '" + method + "' is not defined in RFC 2068"); }

}

Page 15: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

A taste of servlet programming-1 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";

Page 16: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

A taste of servlet programming-2

// 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(); }

}

Page 17: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Esempio: ShowParameters

package coreservlets;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;public class ShowParameters extends HttpServlet { public void doGet(HttpServletRequest request HttpServletResponse

response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Reading All Request Parameters"; out.println ("<HTML><HEAD><TITLE>" +title+ “</TITLE></HEAD>" + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=CENTER>" + title + "</H1>\n" + "<TABLE BORDER=1 ALIGN=CENTER>\n" + "<TR BGCOLOR=\"#FFAD00\">\n" + "<TH>Parameter Name<TH>Parameter Value(s)");

Page 18: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Esempio: ShowParameters

Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { String paramName = (String)paramNames.nextElement(); out.print("<TR><TD>" + paramName + "\n<TD>"); String[] paramValues = request.getParameterValues(paramName); if (paramValues.length == 1) { String paramValue = paramValues[0]; if (paramValue.length() == 0) out.println("<I>No Value</I>"); else out.println(paramValue); } else { out.println("<UL>"); for(int i=0; i<paramValues.length; i++) {out.println("<LI>"

+paramValues[i]); } out.println("</UL>"); } } out.println("</TABLE>\n</BODY></HTML>"); }

Page 19: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Esempio: ShowParameters

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

Page 20: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Esempio: ShowParameters<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD> <TITLE>A Sample FORM using POST </TITLE></HEAD><BODY BGCOLOR="#FDF5E6"><H1 ALIGN="CENTER">A Sample FORM using POST</H1>

<FORM ACTION="/servlet/coreservlets.ShowParameters“ METHOD="POST”>

Item Number: <INPUT TYPE="TEXT" NAME="itemNum"><BR> Quantity: <INPUT TYPE="TEXT" NAME="quantity"><BR> Price Each: <INPUT TYPE="TEXT" NAME="price" VALUE="$"><BR> <HR> First Name: <INPUT TYPE="TEXT" NAME="firstName"><BR> Last Name: <INPUT TYPE="TEXT" NAME="lastName"><BR> Middle Initial: <INPUT TYPE="TEXT" NAME="initial"><BR> Shipping Address: <TEXTAREA NAME="address" ROWS=3 COLS=40></TEXTAREA><BR>

Page 21: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Esempio: ShowParameters

Credit Card:<BR> &nbsp;&nbsp;<INPUT TYPE="RADIO" NAME="cardType“

VALUE="Visa">Visa<BR> &nbsp;&nbsp;<INPUT TYPE="RADIO" NAME="cardType" VALUE="Master Card">Master Card<BR> &nbsp;&nbsp;<INPUT TYPE="RADIO" NAME="cardType" VALUE="Amex">American Express<BR> &nbsp;&nbsp;<INPUT TYPE="RADIO" NAME="cardType“

VALUE="Discover">Discover<BR> &nbsp;&nbsp;<INPUT TYPE="RADIO" NAME="cardType" VALUE="Java SmartCard">Java SmartCard<BR> Credit Card Number: <INPUT TYPE="PASSWORD" NAME="cardNum"><BR> Repeat Credit Card Number: <INPUT TYPE="PASSWORD" NAME="cardNum"><BR><BR> <CENTER><INPUT TYPE="SUBMIT" VALUE="Submit Order"></CENTER></FORM></BODY></HTML>

Page 22: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Cookies

Page 23: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Cookies: perché? Identificazione di un utente in una sessione di e-commerce.Customizzazione di un sitoPubblicità mirataEliminazione di username e password

Page 24: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Cookies: i metodi

public void setComment(String c)public String getComment()

public void setVersion(int c)public int getVersion ()Version 0: Netscape standardVersion 1: RFC 2109

Page 25: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Cookies: i metodi public void setMaxAge(int c)public int getMaxAge()

Positive value: secondi di vita0: delete cookieNegative value: finchè dura la sessione del browser

Page 26: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Cookies: i metodi public void setDomain(String c)public String getDomain()

public void setPath(int c)public int getPath()

Page 27: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Cookies: esempio

Cookie userCookie = new Cookie(“user”,”uid1234”);userCookie.setMaxAge(60*60*24*365);response.addCookie(userCookie);

Page 28: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

SetCookies

import java.io.*; import javax.servlet.*; import javax.servlet.http.*;/** Sets six cookies: three that apply only to the current session * (regardless of how long that session lasts) and three that persist

for an hour * (regardless of whether the browser is restarted).*/public class SetCookies extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { for(int i=0; i<3; i++) { // Default maxAge is -1, indicating cookie // applies only to current browsing session. Cookie cookie = new Cookie("Session-Cookie-" + i, "Cookie-Value-S" + i); response.addCookie(cookie);

Page 29: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

cookie = new Cookie("Persistent-Cookie-" + i,"Cookie-Value-P" + i);

// Cookie is valid for an hour, regardless of whether // user quits browser, reboots computer, or whatever. cookie.setMaxAge(3600); response.addCookie(cookie); } response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Setting Cookies"; out.println (("<HTML><HEAD><TITLE>" +title+ “</TITLE></HEAD>" + "<BODY BGCOLOR=\"#FDF5E6\">\n" +"<H1

ALIGN=\"CENTER\">" + title + "</H1>\n" +"There are six cookies associated with this page.\n" +

"</BODY></HTML>"); }}

SetCookies

Page 30: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

import java.io.*; import javax.servlet.*; import javax.servlet.http.*;/** Creates a table of the cookies associated with the current page. */public class ShowCookies extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Active Cookies"; out.println(("<HTML><HEAD><TITLE>" +title+ “</TITLE></HEAD>" + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" + "<TABLE BORDER=1 ALIGN=\"CENTER\">\n" + "<TR BGCOLOR=\"#FFAD00\">\n" + " <TH>Cookie Name\n" + " <TH>Cookie Value");

ShowCookies

Page 31: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Cookie[] cookies = request.getCookies(); Cookie cookie; for(int i=0; i<cookies.length; i++) { cookie = cookies[i]; out.println("<TR>\n" + " <TD>" + cookie.getName() + "\n" + " <TD>" + cookie.getValue()); } out.println("</TABLE></BODY></HTML>"); }}

ShowCookies

Page 32: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Sessions

Page 33: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

String sessionID = makeUniqueString();Hashtable sessionInfo = new Hashtable();Hashtable globalTable = getTableStoringSession();globalTable.put(sessionID,sessionInfo);Cookie sessionCookie=new Cookie(“SessionID”,sessionID);sessionCookie.setPath(“/”);response.addCookie(sessionCookie);

Session tracking using cookies

Page 34: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

HttpSession session = request.getSession(true);ShoppingCart cart =

(ShoppingCart)session.getValue(“carrello”); // 2.1// 2.2 (ShoppingCart)session.getAttribute(“carrello”);if (cart==null) {

cart=new ShoppingCart(); session.putValue(“carrello”,cart); //2.1//2.2 session.putValue(“carrello”,cart);}doSomeThingWith(cart);

Session tracking API

Page 35: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

public void removeValue(String name); //2.1public void removeAttribute(String name); //2.2

public String[] getValueNames() //2.1public Enumeration getAttributeNames() //2.2

Session tracking API

Page 36: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

public long getCreationTime();public long getLastAccessdTime();Secondi dal 1.1.1970, mezzanottepublic void removeAttribute(String name);

public int getMaxInactiveInterval();public void setMaxInactiveInterval(int sec);

public void invalidate();

Session tracking API

Page 37: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

import java.io.*; import javax.servlet.*; import javax.servlet.http.*;import java.net.*; import java.util.*;/** Simple example of session tracking. */public class ShowSession extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Session Tracking Example"; HttpSession session = request.getSession(true); String heading; // Use getAttribute instead of getValue in version 2.2. Integer accessCount =

(Integer)session.getValue("accessCount");

ShowSession

Page 38: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

if (accessCount == null) { accessCount = new Integer(0); heading = "Welcome Newcomer"; } else { heading = "Welcome Back"; accessCount = new Integer(accessCount.intValue() + 1); } // Use setAttribute instead of putValue in version 2.2. session.putValue("accessCount", accessCount);

ShowSession

Page 39: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

out.println(("<HTML><HEAD><TITLE>" +title+ “</TITLE></HEAD>" + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">" + heading + "</H1>\n" + "<H2>Information on Your Session:</H2>\n" + "<TABLE BORDER=1 ALIGN=\"CENTER\">\n" + "<TR BGCOLOR=\"#FFAD00\">\n" + " <TH>Info Type<TH>Value\n" + "<TR>\n" +" <TD>ID\n" +" <TD>" + session.getId() + "\n"

+ "<TR>\n" +" <TD>Creation Time\n" + " <TD>" + new Date(session.getCreationTime()) + "\n" + "<TR>\n" +" <TD>Time of Last Access\n" + " <TD>" +new Date(session.getLastAccessedTime()) + "\n"

+ "<TR>\n" +" <TD>Number of Previous Accesses\n" +"

<TD>" + accessCount + "\n" + "</TABLE>\n" +"</BODY></HTML>"); }

ShowSession

Page 40: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

/** Handle GET and POST requests identically. */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

ShowSession

Page 41: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

WebApps(Tomcat configuration)

Page 42: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

Static pages

To let Tomcat serve static pages, we must define a “Web Application”. That is, in the Tomcat Document Root (by default $CATALINA_HOME/webapps/) we must create a folder named after our Web Application (e.g. myApp).

In that “myApp” folder, we MUST create a WEB-INF folder(that can be empy).

In the myApp folder we can then depost the static html files.On our Tomcat server, the URL for the hello.html file becomes:http://machine/port/myApp/hello.html

To actually see the webapp, we must then restart Tomcat

myApp

hello.htmlWEB-INF

webapps

Page 43: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

JSP pagesTo let Tomcat serve JSP pages, we follow the same procedure that we described for static pages.

In the myApp folder we can depost the JSP files.On our Tomcat server, the URL for the hello.jsp file becomes:http://machine/port/myApp/hello.jsp

The WEB-INF directory is still empty.

To actually see the webapp, we must then restart Tomcat

myApp

hello.jspWEB-INF

webapps

Page 44: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

ServletsTo let Tomcat serve servlet, we need add some info. The compiled servlets (.class) must be stored in a “classes” directory in WEB-INF.Moreover, the web.xml file MUST contain at least:<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"><web-app> <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/magic/*</url-pattern> </servlet-mapping></web-app>The “magic” word is the servlet activation keyword (you can of course customize this word). To execute the servlet called MyServlet.class, the URL will be:http://machine/port/myApp/magic/MyServlet

Page 45: Servlets. Applets Special Java programs (without a main) callable from HTML and executed in a graphic context. They can be executed by: a Java enabled

ServletsThe web.xml file CAN contain many additional info. For instance, it can contain a section defining an alias name for the servlet:… <servlet> <servlet-name>pippo</servlet-name> <servlet-class>Servlet1</servlet-class> </servlet>…In such case, the servlet called MyServlet.classCan be activated ALSO by the URL:http://machine/port/myApp/magic/pippo

myApp

web.xml

WEB-INF

webapps

classes

MyServlet.class