Upload
tristan-perez
View
112
Download
0
Embed Size (px)
Citation preview
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“);
}}