CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement...

23
CGI, Servlet

Transcript of CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement...

Page 1: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

CGI, Servlet

Page 2: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Script CGI, Servlet Motivation

Exécution d’un traitement coté serveur web

Traitement de formulaire Génération de pages html à la volée

ExClient Web

Serveur WebGet/post

CGI/Servlet

Catalogue.htmlBd catalogue

Page 3: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Les script CGI Exécutable du coté du serveur

Nouveau processus Invoqué par les méthodes Get/Post

Paramètres de la requêtes Variable d’environnement et STDIN

Le serveur configure ces variable avant de lancer le script

Contenu d’un formulaire : paires nom-valeur Dans QUERY_STRING (GET) Dans STDIN (POST)

Page 4: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Encodage des paramètres

Chaque paramètres est codée sous la forme nomparam = valeur

Chaque pair est séparé par un & Nom=dupont+Jean&adresse=3+rue+de+la

+Paix

Page 5: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Exemple (GET)<html>

<head>

<title>JdcSurvey</title>

</head>

<body>

<form action="cgi-bin/showcgiget"

method=GET>

<BR><BR>How Many Employees in your Company?<BR>

<BR>1-100<input type=radio name=employee value=1-100>

<BR>100-200<input type=radio name=employee value=100-200>

<BR>200-300<input type=radio name=employee value=200-300>

<BR>300-400<input type=radio name=employee value=300-400>

<BR>500-more<input type=radio name=employee value=500-more>

<BR><BR>General Comments?<BR>

<BR><input type=text name=comment>

<BR><BR>What IDEs do you use?<BR>

<BR>JavaWorkShop<input type=checkbox name=ide value=JavaWorkShop>

<BR>J++<input type=checkbox name=ide value=J++>

<BR>Cafe'<input type=checkbox name=ide value=Cafe'>

<BR><BR><input type=submit><input type=reset>

</form>

</body>

</html>

Page 6: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Exemple (GET)

public class getecho { public static void main(String[] args) throws Exception{ StringTokenizer st = new StringTokenizer(args[0],"\t\n\r\f&"); System.out.println("Query Results"); System.out.println("You submitted the following name/value pairs:"); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); }

} }

#!/bin/sh echo "Content-Type: text/html" echo "" echo "" java getecho $QUERY_STRING echo ""

Script cgi

Redirection vers une classe java

Page 7: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Exemple (POST)<html> <head> <title>JdcSurvey</title> </head> <body> <form action="cgi-bin/showcgipost" method=POST> <BR><BR>How Many Employees in your Company?<BR> <BR>1-100<input type=radio name=employee value=1-100> <BR>100-200<input type=radio name=employee value=100-200> <BR>200-300<input type=radio name=employee value=200-300> <BR>300-400<input type=radio name=employee value=300-400> <BR>500-more<input type=radio name=employee value=500-more> <BR><BR>General Comments?<BR> <BR><input type=text name=comment> <BR><BR>What IDEs do you use?<BR> <BR>JavaWorkShop<input type=checkbox name=ide value=JavaWorkShop> <BR>J++<input type=checkbox name=ide value=J++> <BR>Cafe'<input type=checkbox name=ide value=Cafe'> <BR><BR><input type=submit><input type=reset> </form> </body></html>

Page 8: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Exemple (POST)

#!/bin/sh echo "Content-Type: text/html" echo "" echo "" java postecho echo ""

Script cgi

Redirection vers une classe javapublic class postecho { public static void main(String[] args) throws Exception{

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(in.readLine(),"\t\n\r\f&"); System.out.println("Query Results"); System.out.println("You submitted the following name/value pairs:"); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); }

}}

Page 9: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Les servlet

Script serveur écrit en java S’exécute dans le même processus Performance sur le passage de

paramètre Serveur HTTP

Serveur JAVA : Java Web Server Serveur Plug-in servlet : Apache

TomCat

Page 10: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Servlet HTTP - APIpublic void init()

protected  void doDelete(HttpServletRequest req, HttpServletResponse resp)

protected  void doGet(HttpServletRequest req, HttpServletResponse resp)

protected  void doOptions(HttpServletRequest req, HttpServletResponse resp)

protected  voiddoPost(HttpServletRequest req, HttpServletResponse resp)

protected  void doPut(HttpServletRequest req, HttpServletResponse resp)

protected  void doTrace(HttpServletRequest req, HttpServletResponse resp)

protected  void service(HttpServletRequest req, HttpServletResponse resp)

Void service(ServletRequest req, ServletResponse res)

Page 11: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Cycle de vie

instanciationInitialisation/Disponible pourrequêtes

Requête

création

initDébut requête

Fin requête

Erreur

destruction

Fermeturedu conteneur

ErreurErreur

Fermeturedu conteneur

Page 12: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Exemple 1/3

<HTML> <HEAD> <TITLE>ProJava Registration</TITLE> </HEAD> <BODY>

<H1>Welcome</H1>

<FORM ACTION="/greeting/servlet/GreetingServlet" METHOD="POST"> <P>Your Name <INPUT TYPE="text" SIZE="40" NAME="name"></P> <P>Your Email <INPUT TYPE="text" SIZE="40" NAME="email"> <INPUT TYPE="submit" VALUE="Submit"></P> </FORM> </BODY></HTML> (source : j2ee programming, wrox press)

Page 13: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Exemple 2/3

public class GreetingServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String name = request.getParameter("name"); String email = request.getParameter("email"); response.setContentType("text/html"); // Set MIME type for the response PrintWriter out = response.getWriter(); out.println("<HTML>"); out.println("<BODY>"); out.println("<P> " + name + "</P>"); out.println("<P> Thanks for registering your email (" + email +") with us.</P>"); out.println("</BODY>"); out.println("</HTML>"); out.close(); }}

Page 14: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Exemple 3/3

// fichier de déploiement<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">

<web-app> <servlet> <!-- Servlet alias --> <servlet-name>Registration</servlet-name>

<!-- Fully qualified Servlet class --> <servlet-class>GreetingServlet</servlet-class> </servlet></web-app>

Page 15: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Session

Notion de session Une requête dépend du résultat des

requêtes précédentes Ex : caddie

Création de session  HttpSession getSession()  HttpSession getSession

(boolean create)

Page 16: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

HttpSession

java.lang.Object getAttribute(java.lang.String name)

java.util.Enumeration getAttributeNames()Long getCreationTime()java.lang.String getId()int getMaxInactiveInterval()  void invalidate()Boolean isNew() void removeAttribute(java.lang.String name)void setAttribute(java.lang.String)voidsetMaxInactiveInterval(int interval)

Page 17: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Caddie 1/3

Caddie electronique Servlet catalogue Servlet shoppingcart

Page 18: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

caddiepublic class Catalog extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,

IOException { HttpSession session = req.getSession();

int itemCount = 0; ArrayList cart = (ArrayList) session.getAttribute("cart"); if (cart != null) itemCount = cart.size(); res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<HTML><HEAD><TITLE>Simple Shopping Cart "+ "Example</TITLE></HEAD>"); out.println("<BODY><TABLE border=\"0\" width=\"100%\"><tr>"); out.println("<H1> Book Store</H1></td></tr></TABLE><HR>"); out.println("<P>You've " + itemCount + " items in your cart.</p>"); out.print("<FORM ACTION=\""); out.println(res.encodeURL("/cart/servlet/cart")); out.println("\" METHOD=\"POST\">"); out.println("<TABLE CELLSPACING=\"5\" CELLPADDING=\"5\"><TR>"); out.println("<INPUT TYPE=\"Checkbox\" NAME=\"item\"" + " VALUE=\"Begining Java2 - JDK 1.3

Version\"></TD>"); out.println("<TD ALIGN=\"left\">Item 1: " + " Begining Java2 - JDK 1.3 Version</TD></TR><TR>"); .. out.println("</TABLE><HR>"); out.println("<INPUT TYPE=\"Submit\" NAME=\"btn_submit\" "+ "VALUE=\"Add to Cart\">"); out.println("</FORM></BODY></HTML>"); out.close(); } }

Page 19: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

caddiepublic class ShoppingCart extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException

{ String[] itemsSelected; String itemName; HttpSession session = req.getSession(true); ArrayList cart = (ArrayList) session.getAttribute("cart"); if (cart == null) { cart = new ArrayList(); session.setAttribute("cart", cart); } PrintWriter out = res.getWriter(); res.setContentType("text/html"); itemsSelected = req.getParameterValues("item"); if (itemsSelected != null) for (int i = 0; i < itemsSelected.length; i++) { itemName = itemsSelected[i]; cart.add(itemName); }

out.println("<HTML><HEAD><TITLE>"); out.println("Shopping Cart Contents"); out.println("</TITLE></HEAD>"); out.println("<BODY>"); out.println("<H1>Items currently in your cart</H1>"); out.println("<HR>"); Iterator iterator = cart.iterator(); while (iterator.hasNext()) { out.println("<p>" + iterator.next() + "</p>"); } out.print("<HR><p><A HREF=\""); out.print(res.encodeURL("/cart/servlet/catalog")); out.println("\">Back to the shop</A></p>"); out.close(); } }

Page 20: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Cookies

Données textuelles envoyées par le serveur au client

Stockées chez le client Renvoyées vers le serveur lors de

toutes requêtes vers le serveur

Page 21: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

Cookies

API :Cookie(java.lang.String name, java.lang.String value)Void setValue(java.lang.String newValue)Void setMaxAge(int expiry) Void setDomain(java.lang.String pattern)java.lang.String getValue() java.lang.String getDomain()Int getMaxAge() …

Ex : Cookie c =new cookie("uid", "joe");c.setMaxAge(-1);c.setDomain(".toto.com ");Response.addCookie(c);

Page 22: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

JSP-Java Server Page

Simplifier la couche de présentation dynamique

Script html + java Compiler sous la forme d’une servlet

client

Page jsp<Balise jsp><code java>

1ere requête

servletréponse

Génération

Page 23: CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.

JSP-Java Server Page<%@page import="java.util.Date"%><html><body>The current time is <%= new Date().toString() %></body></html>

Public class simpleJSP extends HttpJspBase {…public void jspservice(HttpServletRequest request, HttpServletResponse response) {

out = pagecontext.getOut();out.write(“\r\n<html>\r\n<body>\r\n The current time is “+ new

Date());our.write(“\r\n</body >\r\n </html>\r\n\ r\n“);

}}