Inf4482
From Carboogle
Contents
|
Développement d'applications réparties INF4482
Ressources
- Site web du cours et des demos de Samir
- Site web des demos et projet contenant les exemples
- Java API
- Servlet API
- How to setup a Java development environment
- References et cours HTML, DOM, Javascript, XML, DTD, Schéma, ... : w3school
Jeudi 19 Janvier
Configurer son compte arabica
- Activer ls servlets sur tomcat
- URL d'acces aux servlets : http://www.labunix.uqam.ca:8181/~<login>/<ma-servlet-url>
- URL d'acces aux jsp : http://www.labunix.uqam.ca:8181/~<login>/<ma-jsp-url>
Utiliser les streams en Java
- Lire une ressource quelconque de caracteres (fichier, web, ...) ligne par ligne : Image:LineIterator.java
- Conversions : Ressource -> String, String -> File : Image:IOUtils.java
La serialisation
- Ecriture et lecture d'un objet : voir classe java Student
Socket TCP et UDP, HTTP
- Exemples ici
Jeudi 26 janvier
Creer un projet tomcat sous eclipse
- Movie here
- Debut du web.xml :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
- Voir le web.xml sur le site de demo
Formulaires HTML, GET et POST
- Exemples ici
- Exemple de login (view source) et servlet getinfo (view source)
Cookies
HttpSession
- Exemple ici
La redirection
- Exemple ici
- Exemple de redirections vers form.jsp : go (view source)
Jeudi 02 février
Connexion JDBC
- Exemples ici
Jeudi 09 février
Beans
- Exemples ici
Taglibs
- Exemples ici
Jeudi 16 février
RMI synchrone et asynchrone
- Exemples ici
IMPORTANT: Je ne pourrais pas venir donner la démo cette journée comme je serais au CRIM, mais il y aura quand même la démo donnée par Ouiza.
Jeudi 09 Mars
EJB - Intro et Session Bean
- Exemples ici
Pour déployer une application sur un server d'application, on peut suivre la procédure ici qui décrit un déploiement sous labunix à partir de Linux.
Je montrerai en lab comment déployer sur les serveurs d'application SunOne qui sont sur les postes Windows (ca marche de la même façon, sauf que le serveur d'application est installé sur chaque poste)
Jeudi 16 Mars
EJB - Entity Bean
Pour cette démo, vous pouvez vous aider de cet article qui décrit et montre en vidéo comment configurer et déployer un EntityBean.
But de la démo : essayer de rajouter une information à l'objet Customer pour qu'on puisse avoir sa date de naissance (pas de validation, juste un champ texte simple)
Jeudi 16 Mars
Structure XML
Introduction aux structures XML :
- XML = langage de description de données
- Ne fait rien !
- Avantage:
- Extensible
- Structure
- Organise
Quelques règles :
- Sensible à la casse
- Chaque document XML a une seule racine
- Les valeurs des attributs sont toujours entre guillemets
- Commentaires :
Utilisation des attributs...
Les deux structures suivantes décrivent les mêmes données mais l'une avec attribut et l'autres sans
<note date="12/11/2002"> <to>Tove</to> <body>Don't forget me this weekend!</body> </note>
<note> <date>12/11/2002</date> <to>Tove</to> <body>Don't forget me this weekend!</body> </note>
Désavantages liés à l'utilisation des attributs :
- Un attribut ne peut pas contenir des valeurs multiples
- Ne peut pas être étendu (en balise par exemple) plus tard
- Ils ne peuvent pas décrire une structure, alors que les noeuds peuvent
- Les attributs sont plus difficiles à manipuler dans un code
- Les valeurs des attributs sont plus difficiles à valider conformément à un DTD
- Un document qui utilisent les attributs pour contenir des données devient plus difficile à lire et maintenir
Conseils :
- Utiliser les éléments (noeuds) pour décrire des données (exceptions : les identifiants id)
- Utiliser les attributs pour fournir des informations annexes sur des données
<note id="p501">
<date>12/11/2002</date>
<to>Tove</to>
<body>Don't forget me this weekend!</body>
</note>
DTD
DTD à l'intérieur d'un fichier XML
<?xml version="1.0"?> <!DOCTYPE note [ <!ELEMENT note (to,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>Tove</to> <body>Don't forget me this weekend</body> </note>
DTD dans un fichier .dtd
fichier note.dtd
<!ELEMENT note (to,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT body (#PCDATA)>
fichier note.xml
<?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>Tove</to> <body>Don't forget me this weekend</body> </note>
Exercices
Essayer de représenter dans une structure XML les concepts énoncés.
1. Créer un DTD qui possède une hiérarchie de trois éléments. Au moins un des élément doit avoir un attribut dont les valeurs possibles seront énumérées.
Une galaxie se compose d'au moins un système solaire. Chaque système solaire peut avoir des planètes, dont on donnera leur nom (donnée), et une indication pour savoir si elle est ou non habitable.
<galaxies> <solarsystem> <planet>terre</planet> <planet inhabitable="yes">lune</planet> </solarsystem> </galaxies>
2. Créer un DTD où un élément E peut être mixte (contient des éléments ou des données) et qui ne peut pas contenir d'autres éléments E.
Une planète peut contenir soit son nom (donnée) soit une lune, qui elle contient son nom (donnée).
<galaxies> <solarsystem> <planet>terre</planet> <planet inhabitable="yes">mars</planet> <planet> <moon>lune</moon> </planet> </solarsystem> </galaxies>
3. Créer un DTD où un attribut d'un élément est optionnel, mais si cet attribut est présent il doit contenir une valeur d'un attribut déjà défini.
Ajouter un attribut moonid, requis pour l'élément moon , et ajouter un attribut moons à l'élément planète. Si ce dernier attribut est présent, il doit être à une valeur contenue dans un attribut luneid.
<galaxies> <solarsystem> <planet inhabitable="yes">mars</planet> <planet moons="id1">terre</planet> <planet> <moon moonid="id1">lune</moon> </planet> </solarsystem> </galaxies>
4. Créer un DTD qui inclue un dtd où une section est désactivée ou activée, et crééer un document qui l'utilise.
DTD à importer depuis un autre DTD (fichier solarsystem.dtd) :
<!ELEMENT solarsystem (planet*)>
<!ELEMENT planet (#PCDATA | moon)*>
<!ATTLIST planet inhabitable (yes | no) #IMPLIED
moons IDREFS #IMPLIED>
<!ENTITY % atmosphere "INCLUDE">
<![%atmosphere;[
<!ATTLIST planet atmospressure CDATA #REQUIRED
gasses CDATA #REQUIRED>
]]>
<!ELEMENT moon (#PCDATA)>
<!ATTLIST moon moonid ID #REQUIRED>
Solutions
Exercice 1 :
<!ELEMENT galaxies (solarsystem+)> <!ELEMENT solarsystem (planet*)> <!ELEMENT planet (#PCDATA)> <!ATTLIST planet inhabitable (yes | no) #IMPLIED>
Exercice 2 :
<!ELEMENT galaxies (solarsystem+)> <!ELEMENT solarsystem (planet*)> <!ELEMENT planet (#PCDATA|moon)*> <!ATTLIST planet inhabitable (yes | no) #IMPLIED> <!ELEMENT moon (#PCDATA)>
Exercice 3 :
<!ELEMENT galaxies (solarsystem+)>
<!ELEMENT solarsystem (planet*)>
<!ELEMENT planet (#PCDATA | moon)*>
<!ATTLIST planet inhabitable (yes | no) #IMPLIED
moons IDREFS #IMPLIED>
<!ELEMENT moon (#PCDATA)>
<!ATTLIST moon moonid ID #REQUIRED>
Exercice 4 :
<?xml version="1.0"?>
<!DOCTYPE solarsystem SYSTEM "solarsystem.dtd"
[
<!ENTITY % atmosphere "IGNORE">
]>
<solarsystem>
<planet inhabitable="yes">
Earth
</planet>
</solarsystem>
XML Schema
Avantages par rapport aux DTD :
(Source: http://www.w3schools.com/schema/schema_intro.asp)
We think that very soon XML Schemas will be used in most Web applications as a replacement for DTDs. Here are some reasons: * XML Schemas are extensible to future additions * XML Schemas are richer and more useful than DTDs * XML Schemas are written in XML * XML Schemas support data types * XML Schemas support namespaces
Exemple d'utilisation
fichier note.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="note"
attributeFormDefault="qualified"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
fichier note.xml
<?xml version="1.0"?> <note:note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:note="note" xsi:schemaLocation="note note.xsd"> <note:to>Tove</note:to> <note:body>Don't forget me this weekend!</note:body> </note:note>
Exercices et Solutions
Voir la partie "Discussiion" de cette page
Jeudi 30 mars
- Utiliser les parser DOM / SAX
- Bien comprendre leur avantages / inconvénients
Pour vous aider :
- Utils.java (pour afficher le XML représenté par un objet Document)
- Projet Eclipse contenant les exercices API DOM et API SAX ci dessous
import java.io.StringWriter; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; public final class Utils { private Utils() { } /** * Convert document to string for display * @param doc org.w3c.dom.Document * @return String */ // Create dom source for the document DOMSource domSource=new DOMSource(doc); // Create a string writer // Create the result stream for the transform StreamResult result = new StreamResult(stringWriter); // Create a Transformer to serialize the document TransformerFactory tFactory =TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); transformer.setOutputProperty("indent","yes"); // Transform the document to the result stream transformer.transform(domSource, result); return stringWriter.toString(); } }
API DOM
Exercices sur le site du prof ici, ou dans le projet Eclipse ci-dessus
API SAX
Exercices sur le site du prof ici, ou dans le projet Eclipse ci-dessus
Jeudi 6 avril
Web services
Étapes à suivre sur le mémo de labunix
- Fibonacci : project eclipse pour le web service décrit dans le mémo
- GetIP : project eclipse pour un autre web service qui retourne l'adresse IP du serveur ou d'un nom de domaine sur internet
IMPORTANT
Vous devez inclure les librairies de Apache Axis dans le dossier WEB-INF/lib des projet.
Jeudi 13 avril
XML-RPC
- HelloXmlRpc : project eclipse pour le client/serveur XML-RPC Hello et GetIp
Jeudi 20 avril
Révision
- XML, DTD, DOM, SAX
- EJB
- WS, WSDL
- XML-RPC
- Autres...

