Plan 1. Application Servers 2. Servlets, JSP, JDBC 3. J2EE: Vue d ensemble 4. Programmation distribuée 5. Enterprise JavaBeans 6. Prise de recul critique
Servlets, JSP, JDBC 1. Introduction 2. Servlets 3. JSP 4. JDBC
2.1 Introduction Introduction Evolution des pages HTML statiques vs dynamiques (CGI, Servlet, JSP, EJB) Pages HTML statiques Pages HTML avec scripts (javascript) et applets CGI (Common Gateway Interface) (1ère génération web dynamique) / Servlets SSI (Server Side Include): ASP (Active Server Pages), JSP (JavaServer Pages) (2ème génération web dynamique) Serveurs d'applications cumulent les avantages d'un CGI et de SSI
2.1 Introduction Principe des pages statiques NAVIGATEUR WEB URL Page HTML SERVEUR WEB Nom de fichier Page HTML DISQUE DUR (stocke les pages HTML) Principe de base du Web: le serveur web ne fait que de servir des fichiers (pages HTML, images, ) stoquées localement.
2.1 Introduction Principe des pages avec scripts NAVIGATEUR WEB INTERPRETEUR ET/OU SANDBOX (JRE) URL Page HTML avec JavaScript ou Applet SERVEUR WEB Nom de fichier Page HTML avec JavaScript ou Applet DISQUE DUR (stocke les pages HTML) Les scripts et/ou les applets (qui ont été téléchargées) sont exécutés par le navigateur web, sur la machine client.
2.1 Introduction Principe des CGI / Servlets NAVIGATEUR WEB URL Page HTML SERVEUR WEB Paramètres Page HTML PROGRAMME EXTERNE (génère les pages HTML) Principe du Web dynamique des CGI: le programme externe peut être un binaire ou un script avec son interpréteur, mais le serveur Web n'a aucune maîtrise sur son fonctionnement.
2.1 Introduction Principe des SSI NAVIGATEUR WEB URL Page HTML sans code SERVEUR WEB INTERPRETEUR (transforme le code en information) Nom de fichier Page HTML avec code DISQUE DUR (stocke les pages HTML) Principe du Web dynamique des SSI: la logique applicative (sous forme de script) est traitée par un interpréteur affilié au serveur Web.
2.1 Introduction Récapitulation Client Navigateur Web requête HTTP page HTML Serveur WWW Serveur.html.jsp Servlets.gif.asp C/C++.jpg.php Perl statique interprété éxécuté
2.2 Servlets Servlets A servlet is a Java programming language class used to extend the capabilities of servers that host applications accessed via a request-response programming model. Although servlets can respond to any type of request, they are commonly used to extend the applications hosted by Web servers. For such applications, Java Servlet technology defines HTTP-specific servlet classes.
2.2 Servlets Servlet Objet Java compilé Dérive/Hérite de javax.servlet.httpservlet Import : javax.servlet.*; javax.servlet.http.*; Tout est dans servlet.jar Doit être placé dans un répertoire particulier et se trouver dans le classpath pour la compilation. «interface» Servlet GenericServlet +service() HttpServlet +dopost() +doget()
2.2 Servlets Méthode principale Une méthode à surcharger : public void doget(httpservletrequest req, HttpServletResponse resp) throws ServletException, IOException {...} Le but est d écrire la réponse du serveur sur la sortie: ServletOutputStream out = resp.getoutputstream(); out.println( réponse... ); «interface» Servlet GenericServlet +service() HttpServlet +dopost() +doget()
2.2 Servlets Cycle de vie d une servlet Le cycle de vie d'une servlet est assuré par le conteneur de servlet. Cette dernière doit possèder une interface déterminée par le JSDK afin de suivre le cycle de vie suivant : 1. La servlet est chargée au démarrage du serveur ou lors de la première requête puis instanciée par le serveur 2. La méthode init() est invoquée par le conteneur 3. Lors de la première requête, le conteneur crée les objets Request et Response spécifiques à la requête 4. La méthode service() est appelée à chaque requête dans une nouvelle thread. Les objets Request et Response lui sont passés en paramètre, lui permattant d échanger des informations avec le client 5. La méthode destroy() est appelée lors du déchargement de la servlet, c'est-à-dire lorsqu'elle n'est plus requise par le serveur. La servlet est alors signalée au garbage collector.
2.2 Servlets Texte ou HTML? Ecrire du texte : out.println( réponse... ); Ecrire de l HTML : Mise en place du content type AVANT d écrire quoi que ce soit dans out: resp.setcontenttype("text/html"); Ecriture de la page HTML out.println( <HTML><HEAD>...</BODY></HTML> );
2.2 Servlets Rappel: Formulaires HTML Ouverture : <FORM METHOD= GET ACTION= URL > ou <FORM METHOD= POST ACTION= URL > Champs de texte : <INPUT TYPE= text NAME= nom VALUE= valeur > Cases radio : <INPUT TYPE= radio NAME= nom VALUE= valeur1 CHECKED> <INPUT TYPE= radio NAME= nom VALUE= valeur2 > Bouton d envoi : <INPUT TYPE= submit >
2.2 Servlets Rappel: Formulaires HTML (2) Paramètres : définis par une balise <INPUT name= nom value= valeur > Chaque élément du formulaire doit possèder un nom unique. Ainsi la valeur associée à l'élément forme avec le nom de celui-ci une paire nom/valeur. Les paramètres sont envoyés à la servlet à l'aide de la méthode spécifiée (GET par défaut) après que l'utilisateur clique sur un bouton de type Submit L'ensemble des paires nom/valeur sont séparées par des ET commerciaux (le caractère "&"). Ainsi, l'envoi d'un formulaire crée une chaîne de la forme: champ1=valeur1&champ2=valeur2&champ3=valeur3 L'envoi de cette chaîne se fera différemment selon que la méthode utilisée pour l'envoi du formulaire est GET ou POST.
2.2 Servlets Rappel: Formulaires HTML (3) La méthode GET permet d'envoyer les éléments du formulaire au travers de l URL, comme ceci: http://server_name/cgi-bin/script.cgi?champ1=valeur1&champ2=valeur2... La méthode POST est une bonne alternative à la méthode GET. Cette méthode code les informations de la même façon que la méthode GET mais elle envoie les données à la suite des en-têtes HTTP, dans un champ appelé corps de la requête.
2.2 Servlets Les paramètres des servlets Les servlets peuvent automatiquement traiter ("parser") les données en provenance de formulaires grâce aux méthodes de la classe HttpServletRequest. Récupération des paramètres : String getparameter(string name); req.getparameter( age ); retourne null si pas de paramètre nom
2.2 Servlets Using a Servlet A user (1) requests some information by filling out a form containing a link to a servlet and clicking the Submit button (2). The server (3) locates the requested servlet (4). The servlet then gathers the information needed to satisfy the user's request and constructs a Web page (5) containing the information. That Web page is then displayed on the user's browser (6).
2.2 Servlets Servlet alternative Who is involved in putting together a commercial web application? graphic designers programmers managers technicians Conclusion: most of the people involved don t know how to program (nor should they need to).
2.2 Servlets Servlet alternative (2) What don t you like about servlet programming? out.println is painful. Why? If the web page generated is of any significant size, most of the code is involved in generating the output and not dealing with the logic. Java Server Pages Instead of writing code with page content embedded in it as println statements...... write pages with code embedded in it. Requires less programming skill. Increases readability.
2.3 JSP JavaServer Pages Technology JavaServer Pages (JSP) technology allows you to easily create Web content that has both static and dynamic components. JSP technology makes available all the dynamic capabilities of Java Servlet technology but provides a more natural approach to creating static content. The main features of JSP technology are A language for developing JSP pages, which are text-based documents that describe how to process a request and construct a response An expression language for accessing server-side objects Mechanisms for defining extensions to the JSP language
2.3 JSP What is a JSP page? A JSP page is a text-based document (.jsp extension) that contains two types of text: static data, which can be expressed in any textbased format, such as HTML; <BODY>Hello the date is : </BODY> and JSP elements, which construct dynamic content. <%= expression java %> <% code java %>
2.3 JSP Fonctionnement des JSP Une page utilisant les Java Server Pages est exécutée au moment de la requête par un moteur de JSP, fonctionnant généralement avec un serveur Web ou un serveur d applications. Le modèle des JSP étant dérivé de celui des servlets (en effet les JSP sont un moyen d'écrire des servlets), celle-ci est donc une classe Java dérivant de la classe HttpServlet, et utilisant les méthodes doget() et dopost() permettant de renvoyer une réponse par le protocole HTTP. Lorsqu'un utilisateur appelle une page JSP, le serveur Web appelle le moteur de JSP qui crée un code source Java à partir du script JSP, compile la classe afin de fournir un fichier compilé (d'extension.class), c'est-à-dire qu'il constitue en fait une servlet à partir du script JSP...
2.3 JSP Elements d une page JSP Une page JSP peut contenir en plus du code HTML quatre types d'éléments : des directives : informations globales relatives à la page des déclarations : permettant de déclarer des méthodes et des attributs des scriplets : du code Java qui sera traduit en code dans la méthode service() de la servlet résultante des expressions : permettant d'envoyer facilement des chaînes créées dynamiquement vers le navigateur des commentaires
2.3 JSP Directives JSP Les directives JSP sont des instructions insérées dans des tags HTML spéciaux. La syntaxe des directives JSP est la suivante : <%@ directive { attribut="valeur"} %> Les directives JSP permettent d'indiquer : les classes à inclure les classes à étendre le type du contenu de la réponse (text/html par défaut)... Exemple: <%@ page import= java.sql.* %>
2.3 JSP Déclarations JSP Une déclaration est un bloc permettant de définir des méthodes et des variables de classe à utiliser dans toute la page. La syntaxe d'une déclaration est la suivante : <%! declaration %> Exemple : <%! String Chaine = "bonjour"; public void mymethod() { // instructions; } %>
2.3 JSP Scriplets JSP Une scriptlet JSP est un bloc de code Java (qui doit naturellement être valide) est compris entre les balises suivantes : <% /* scriptlet */ %> La scriptlet a implicitement accès à de nombreux objets. Les objets les plus utilisés sont request pour connaître les détails de la requête HTTP (cf. formulaires) et l'objet out permettant d'envoyer des données vers le navigateur du client. Par exemple : <% String[] phrases = {"Pierre", "Paul", "Jacques"}; for (int i=0; i<phrases.length; i++) { out.println(phrases[i]); } %>
2.3 JSP Objets JSP La servlet générée défini un certain nombre d'objets qui peuvent être utilisés dans les scriptlets: HttpServletRequest request: l'objet requête HTTP HttpServletResponse response: l'objet réponse HTTP JspWriter out: cet objet sert à la même chose que response.getwriter() et définit une méthode println() pour écrire l'output.... Accès par défaut : java.lang.* javax.servlet.* javax.servlet.http.* javax.servlet.jsp.*
2.3 JSP Expressions JSP Les expressions JSP permettent d'insérer simplement des chaînes de caractères générées dynamiquement dans la page HTML. La syntaxe d'une expression JSP est la suivante : <%= expression java %> L expression doit retourner un résultat affichable Exemples: L'expression suivante permet par exemple de retourner une chaîne contenant l'adresse IP du client : <%= request.getremoteaddr(); %> Il s'agit ainsi d'un raccourci pour la scriptlet suivante : <% out.println(request.getremoteaddr()); %> Pour afficher la date du jour: <BODY> La date d aujourd hui: <%= new java.util.date() %> </BODY>
2.3 JSP Commentaires JSP Avec JSP il est possible d'ajouter des commentaires de deux façons: générer un commentaire visible dans le code source HTML (commentaire HTML) du client avec la syntaxe suivante : <!-- commentaire [<%= expression %>] --> créer un commentaire dans le code JSP dans un but de documentation du source (non visible par le client) grâce à la syntaxe suivante : <%-- commentaire -->
2.3 JSP JSP: Advantages - Disadvantages o JSP and Servlets can do the same things. + Easier to read. + Easier to write (not always the case, but often). + Easier to deploy (don t need to modify web.xml, don't need to compile). + Greater compatibility with web design tools. - Errors at execution time. - First person penalty (can be overcome by precompiling.jsp pages). - Can lead to bad design (but you can say this about anything). - More restrictions on the structure than with servlets.
2.4 JDBC JDBC JDBC (Java DataBase Connectivity) is a call-level programming interface allowing external access to SQL database manipulation and update commands. It allows the integration of SQL calls into a general programming environment by providing library routines which interface with the database. Here is an easy way of visualizing what happens in a call level interface: You are writing a normal Java program. Somewhere in the program, you need to interact with a database. Using standard library routines, you open a connection to the database. You then use JDBC to send your SQL code to the database, and process the results that are returned. When you are done, you close the connection.
2.4 JDBC Establishing a connection Before a database can be accessed, a connection must be opened between our program (client) and the database (server). This involves two steps: Load the vendor specific driver: Class.forName("com.mysql.jdbc.Driver"); Make the connection: Connection con = DriverManager.getConnection( "jdbc:mysql://diufpc13/carsdb", "jboss", "11223344"); That's it! The connection con returned in the last step is an open connection which we will use to pass SQL statements to the database.
2.4 JDBC Creating JDBC Statements A JDBC Statement object is used to send your SQL statements to the DBMS, and should not to be confused with an SQL statement. A JDBC Statement object is associated with an open connection, and not any single SQL Statement. You can think of a JDBC Statement object as a channel sitting on a connection, and passing one or more of your SQL statements (which you ask it to execute) to the DBMS. An active connection is needed to create a Statement object. The following code snippet, using our Connection object con, does it for you: Statement stmt = con.createstatement(); At this point, a Statement object exists, but it does not have an SQL statement to pass on to the DBMS. We learn how to do that in a following section.
2.4 JDBC Executing Statements One can execute several kind of SQL statements: create, insert, update, selects. Each of these statements have corresponding methods in the Statement class. A query is expected to return a set of tuples as the result, and not change the state of the database. Not surprisingly, there is a corresponding method called executequery(), which returns its results as a ResultSet object: ResultSet rs = stmt.executequery("select * FROM cars"); while ( rs.next() ) { System.out.println(rs.getString("description")); }