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

Post on 03-Apr-2015

103 views 0 download

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

CGI, Servlet

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

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)

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

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>

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

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>

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

}}

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

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)

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

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)

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

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>

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)

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)

Caddie 1/3

Caddie electronique Servlet catalogue Servlet shoppingcart

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

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

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

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);

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

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“);

}}