Commit c853c8cc authored by Aghiles's avatar Aghiles
Browse files

Merge branch 'master' of https://gitlab.utc.fr/crozatst/hdoc

parents 2ea5f2f6 16fe948d
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.4
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
org.eclipse.jdt.core.compiler.source=1.3
eclipse.preferences.version=1
org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.lowagie.text.DocumentException;
public class MyPDFGenerator {
public static void main(String[] args) throws IOException, DocumentException {
//Paramètrage du fichier à convertir
//String baseFolder = System.getProperty("user.dir") + "/"; // correspond à la racine du projet Java
String entree = args[0];
String sortie = args[1];
File f = new File(entree);
if(f.exists() && !f.isDirectory()) {
OutputStream os = new FileOutputStream(sortie);
//Génération du PDF avec Flying Saucer
XHTMLToPDF(entree, os);
//fermeture de l'outputStream
os.close();
}
else{
System.err.println("Input file doesn't exist");
}
}
public static void XHTMLToPDF(String entree, OutputStream os) throws IOException, DocumentException {
//Génération du PDF avec Flying Saucer
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(new File(entree));
renderer.layout();
renderer.createPDF(os);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Technologie Web : Architecture LAPP</title>
<meta charset="utf-8"/>
<meta content="HdocConverter/Opale3.4" name="generator"/>
<meta name="rights" content="by-sa"/>
<meta name="author"
content="Stéphane Crozat (Contributions : Antoine Vincent, Benjamin Lussier, Léonard Dumas)"/>
<link ref="stylesheet" type="text/css" href="css/main.css"/>
</head>
<body>
<div>
<h1>Introduction</h1>
<div>
<p>Si les SGBD offrent les technologies de modélisation et de gestion des données, ils nécessitent la plupart du temps d'être interfacés avec des applications qui fournissent un accès orienté métier aux utilisateurs, notamment à travers des IHM évoluées. Même des systèmes comme Oracle ou PostgreSQL qui proposent un langage procédural (comme PL/SQL) au dessus de la couche SQL, ne sont pas auto-suffisants. Les langages évolués comme Java ou C++ sont couramment utilisés pour implémenter la couche applicative d'exploitation des BD. </p>
<p>Les applications de BD sont aujourd'hui généralement réalisées selon des architectures réseaux. L'explosion d'Internet de son côté a favorisé le langage HTML pour implémenter les IHM et a vu la naissance de langages de script pour implémenter la couche applicative côté serveur, tels que PHP ou JSP, plus simples que les langages classiques.</p>
</div>
</div>
<div>
<h1>Architecture Web</h1>
<div>
<h2>Notions d'architecture client-serveur</h2>
<div>
<h3>Présentation de l'architecture d'un système client/serveur</h3>
<p>De nombreuses applications fonctionnent selon un environnement clients/serveur, cela signifie que des machines clientes (des machines faisant partie du réseau) contactent un serveur, une machine généralement très puissante en terme de capacités d'entrée-sortie, qui leur fournit des services. Ces services sont des programmes fournissant des données telles que l'heure, des fichiers, une connexion...</p>
<p>Les services sont exploités par des programmes, appelés programmes clients, s'exécutant sur les machines clientes. On parle ainsi de client FTP, client de messagerie... </p>
<p>Dans un environnement purement client/serveur, les ordinateurs du réseau (les clients) ne peuvent voir que le serveur, c'est un des principaux atouts de ce modèle.</p>
</div>
<div>
<h3>Avantages de l'architecture client/serveur</h3>
<p>Le modèle client/serveur est particulièrement recommandé pour des réseaux nécessitant un grand niveau de fiabilité, ses principaux atouts sont :</p>
<ul>
<li>
<p>
<em>des ressources centralisées</em>
</p>
<p>étant donné que le serveur est au centre du réseau, il peut gérer des ressources communes à tous les utilisateurs, comme par exemple une base de données centralisée, afin d'éviter les problèmes de redondance et de contradiction</p>
</li>
<li>
<p>
<em>une meilleure sécurité</em>
</p>
<p>car le nombre de points d'entrée permettant l'accès aux données est moins important</p>
</li>
<li>
<p>
<em> une administration au niveau serveur</em>
</p>
<p> les clients ayant peu d'importance dans ce modèle, ils ont moins besoin d'être administrés</p>
</li>
<li>
<p>
<em>un réseau évolutif</em>
</p>
<p>grâce à cette architecture ont peu supprimer ou rajouter des clients sans perturber le fonctionnement du réseau et sans modifications majeures</p>
</li>
</ul>
</div>
<div>
<h3>Inconvénients du modèle client/serveur</h3>
<p>L'architecture client/serveur a tout de même quelques lacunes parmi lesquelles :</p>
<ul>
<li>
<p>
<em>un coût élevé </em>
</p>
<p>dû à la technicité du serveur</p>
</li>
<li>
<p>
<em>un maillon faible</em>
</p>
<p>le serveur est le seul maillon faible du réseau client/serveur, étant donné que tout le réseau est architecturé autour de lui! Heureusement, le serveur a une grande tolérance aux pannes (notamment grâce au système RAID)</p>
</li>
</ul>
</div>
<div>
<h3>Fonctionnement d'un système client/serveur</h3>
<img src="../re/cs.jpg" alt="cs.jpg"/>
<p>Un système client/serveur fonctionne selon le schéma suivant:</p>
<ul>
<li>
<p>Le client émet une requête vers le serveur grâce à son <em>adresse</em> et à son <em>port</em>, qui désigne un service particulier du serveur</p>
</li>
<li>
<p>Le serveur reçoit la demande et répond à l'aide de l'adresse de la machine client (et de son port)</p>
</li>
</ul>
</div>
<footer>
<div data-hdoc-type="tags">
<span>Architecture</span>
<span>Client</span>
<span>Serveur</span>
</div>
</footer>
</div>
<div>
<h2>Notions d'architecture 3-tier</h2>
<div>
<h3>Présentation de l'architecture à deux niveaux</h3>
<p>L'architecture à deux niveaux (aussi appelée architecture 2-tier,<i>tier</i> signifiant étage en anglais) caractérise les systèmes clients/serveurs dans lesquels le client demande une ressource et le serveur la lui fournit directement. Cela signifie que le serveur ne fait pas appel à une autre application afin de fournir le service. </p>
<img src="../re/2-tier.jpg" alt="2-tier.jpg"/>
</div>
<div>
<h3>Présentation de l'architecture à trois niveaux</h3>
<p>Dans l'architecture à 3 niveaux (appelée architecture 3-tier), il existe un niveau intermédiaire, c'est-à-dire que l'on a généralement une architecture partagée entre:
</p>
<ol>
<li>
<p>
<em>Le client</em>
</p>
<p>le demandeur de ressources</p>
</li>
<li>
<p>
<em>Le serveur d'application</em>
</p>
<p>(appelé aussi <i>middleware</i>) le serveur chargé de fournir la ressource mais faisant appel à un autre serveur</p>
</li>
<li>
<p>
<em>Le serveur secondaire</em>
</p>
<p>(généralement un serveur de base de données), fournissant un service au premier serveur</p>
</li>
</ol>
<img src="../re/3-tier.jpg" alt="3-tier.jpg"/>
</div>
<div data-hdoc-type="remark">
<p>Étant donné l'emploi massif du terme d'architecture à 3 niveaux, celui-ci peut parfois désigner aussi les architectures suivantes :</p>
<ul>
<li>
<p>Partage d'application entre client, serveur intermédiaire, et serveur d'entreprise</p>
</li>
<li>
<p>Partage d'application entre client, base de données intermédiaire, et base de données d'entreprise</p>
</li>
</ul>
</div>
<div>
<h3>Comparaison des deux types d'architecture</h3>
<p>L'architecture à deux niveaux est donc une architecture client/serveur dans laquelle le serveur est polyvalent, c'est-à-dire qu'il est capable de fournir directement l'ensemble des ressources demandées par le client.</p>
<p> Dans l'architecture à trois niveaux par contre, les applications au niveau serveur sont délocalisées, c'est-à-dire que chaque serveur est spécialisé dans une tâche (serveur web et serveur de base de données par exemple). Ainsi, l'architecture à trois niveaux permet :</p>
<ul>
<li>
<p>une plus grande flexibilité/souplesse</p>
</li>
<li>
<p>une plus grande sécurité (la sécurité peut être définie pour chaque service)</p>
</li>
<li>
<p>de meilleures performances (les tâches sont partagées)</p>
</li>
</ul>
</div>
<div data-hdoc-type="complement">
<h3>L'architecture multi-niveaux</h3>
<p>Dans l'architecture à 3 niveaux, chaque serveur (niveaux 1 et 2) effectue une tâche (un service) spécialisée. Ainsi, un serveur peut utiliser les services d'un ou plusieurs autres serveurs afin de fournir son propre service. Par conséquence, l'architecture à trois niveaux est potentiellement une architecture à N niveaux. </p>
<img src="../re/n-tier.jpg" alt="n-tier.jpg"/>
</div>
<footer>
<div data-hdoc-type="tags">
<span>Architecture</span>
<span>Client</span>
<span>Serveur</span>
<span>3-tier</span>
</div>
</footer>
</div>
<div>
<h2>Notions de serveur Web</h2>
<div>
<p>Fait à partir de <a href="www.commentcamarche.net">www.commentcamarche.net</a>. Copyright 2003 Jean-François Pillou. Document soumis à la licence GNU FDL. </p>
</div>
<div>
<p>Un serveur web est un logiciel permettant à des clients d’accéder à des pages web, c'est-à-dire en réalité des fichiers au format HTML à partir d'un navigateur.</p>
<p>Un serveur web est donc un "simple" logiciel capable d'interpréter les requêtes HTTP arrivant sur le port associé au protocole HTTP (par défaut le port 80), et de fournir une réponse avec ce même protocole.
</p>
<p>Les principaux serveurs web sur le marché sont entre autres :</p>
<ul>
<li>
<p>Apache</p>
</li>
<li>
<p>Microsoft IIS (Internet Information Server)</p>
</li>
<li>
<p>...</p>
</li>
</ul>
</div>
<footer>
<div data-hdoc-type="tags">
<span>Architecture</span>
<span>Serveur</span>
<span>Web</span>
<span>HTTP</span>
</div>
</footer>
</div>
<div>
<h2>Notion d'architecture Web</h2>
<div>
<p>Fait à partir de <a href="www.commentcamarche.net">www.commentcamarche.net</a>. Copyright 2003 Jean-François Pillou. Document soumis à la licence GNU FDL. </p>
</div>
<div>
<img src="../re/3-tierExemple.jpg" alt="3-tierExemple.jpg"/>
</div>
<footer>
<div data-hdoc-type="tags">
<span>Architecture</span>
<span>Client</span>
<span>Serveur</span>
<span>3-tier</span>
<span>Web</span>
</div>
</footer>
</div>
<div>
<h2>Architecture LAPP</h2>
<div data-hdoc-type="definition">
<h3>Définition</h3>
<p>On appelle une architecture LAPP une architecture qui s'appuie sur :</p>
<ul>
<li>
<p>
<em>L</em>inux pour le système d'exploitation</p>
</li>
<li>
<p>
<em>A</em>pache pour le serveur Web</p>
</li>
<li>
<p>
<em>P</em>ostgreSQL pour la base de données</p>
</li>
<li>
<p>
<em>P</em>HP pour le langage applicatif</p>
</li>
</ul>
</div>
<div data-hdoc-type="complement">
<h3>LAMP, WAMP, WAPP</h3>
<ul>
<li>
<p>LAMP : Linux, Apache, MySQL, PHP</p>
</li>
<li>
<p>WAMP : Windows, Apache, MySQL, PHP</p>
</li>
<li>
<p>...</p>
</li>
</ul>
</div>
<footer/>
</div>
<div>
<h2>Introduction</h2>
<div>
<p>Cette section a été réalisée à partir de contenus de <a href="www.commentcamarche.net">www.commentcamarche.net</a>, © 2003 Jean-François Pillou (document soumis à la licence GNU FDL). </p>
</div>
</div>
<div>
<h2>Objectifs</h2>
<div>
<p>Comprendre les principes des architectures d'application de bases de données (en particulier 3-tier et Web)</p>
<p>Savoir appliquer les principes d'une architecture Web dans le cadre des technologies Servlets ou PHP et HTML</p>
</div>
</div>
<div>
<h2>Questions de synthèse</h2>
<div>
<p>Quelle sont les atouts d'une architecture 3-tier par rapport à une architecture client-serveur classique ?</p>
<p>Qu'est ce qu'une architecture Web ?</p>
</div>
</div>
<footer/>
</div>
<div>
<h1>Rappels système</h1>
<div>
<h2>Rappels architecture UTC</h2>
<div>
<p>Les comptes d'UV sont des comptes sur des serveurs Linux de l'UTC (accès et espace disque réservé). Par exemple <span data-hdoc-type="syntax">nf17p001</span> est un compte sur le serveur <span data-hdoc-type="syntax">tuxa.sme.utc</span>.</p>
<p>Les comptes d'UV sont également des comptes d'accès sur des postes clients Linux ou Windows de l'UTC.</p>
</div>
<div data-hdoc-type="advice">
<h3>Transférer des fichiers depuis un client vers le serveur auquel il est associé</h3>
<ul>
<li>
<p>Les clients Windows de l'UTC sont configurés pour proposer un disque virtuel Z qui pointe sur l'espace du serveur Linux : les données déposées sur le disque Z sont donc physiquement stockées sur le serveur Linux. </p>
</li>
<li>
<p>Les clients Linux de l'UTC sont configurés pour que le dossier <span data-hdoc-type="syntax">home</span> sur le client corresponde à un répertoire sur le serveur. </p>
</li>
<li>
<p>Quelque soit le client il est possible d'utiliser un client SFTP (<i>Filezilla</i> par exemple) en se connectant au serveur (par exemple <span data-hdoc-type="syntax">tuxa.sme.utc</span>) avec son compte UTC (par exemple <span data-hdoc-type="syntax">nf17p001</span>).</p>
</li>
</ul>
</div>
<div data-hdoc-type="advice">
<h3>Se connecter à un serveur Linux depuis un client Windows</h3>
<p>Pour se connecter à un serveur Linux depuis un client Windows on peut utiliser le terminal par défaut du système, mais <em>il est recommandé d'utiliser un programme plus performant comme par exemple Putty</em>.</p>
<ol>
<li>
<p>Ouvrez un terminal :</p>
<p>Exécuter <i>Putty</i>.</p>
</li>
<li>
<p>Connectez-vous sur votre compte Linux
 :</p>
<p>Connectez vous de préférence en utilisant <span data-hdoc-type="syntax">ssh</span>, lancez <span data-hdoc-type="syntax">ssh username@tuxa.sme.utc</span> dans le terminal Putty (avec <i>username</i> votre compte NF17).</p>
</li>
</ol>
</div>
<footer/>
</div>
<div>
<h2>Rappels Unix/Linux</h2>
<div>
<h3>Connexion Linux</h3>
<p>Pour se connecter depuis une machine Windows vers un serveur Linux, on utilise le client Putty pour se connecter avec le protocole <span data-hdoc-type="syntax">ssh</span>.</p>
</div>
<div>
<h3>Quelques commandes de base à connaître</h3>
<ul>
<li>
<p>
<span data-hdoc-type="syntax">cd</span>
</p>
</li>
<li>
<p>
<span data-hdoc-type="syntax">man</span>
</p>
</li>
<li>
<p>
<span data-hdoc-type="syntax">ls</span>
</p>
</li>
<li>
<p>
<span data-hdoc-type="syntax">pwd</span>
</p>
</li>
<li>
<p>
<span data-hdoc-type="syntax">chmod</span>
</p>
</li>
<li>
<p>
<span data-hdoc-type="syntax">more</span>
</p>
</li>
<li>
<p>...</p>
</li>
</ul>
</div>
<footer/>
</div>
<div>
<h2>Mise en ligne d'un fichier HTML</h2>
<div>
<ul>
<li>
<p>
Les fichiers HTML sont mis dans un dossier <span data-hdoc-type="syntax">~/public_html</span>
</p>
</li>
<li>
<p>Il faut donner les droits en lecture sur les fichiers (<span data-hdoc-type="syntax">chmod 755</span>)</p>
</li>
<li>
<p>Les fichiers sont ensuite accessibles sur le Web via une adresse telle que :</p>
<p>
<span data-hdoc-type="syntax">http://tuxa.sme.utc/~nf17pXXX/monfichier.html</span>
</p>
</li>
</ul>
</div>
<footer/>
</div>
<footer/>
</div>
<div>
<h1>Introduction à PostgreSQL</h1>
<div>
<h2>Présentation</h2>
<div>
<p>PostgreSQL est :</p>
<ul>
<li>
<p>un SGBDRO</p>
</li>
<li>
<p>libre (licence BSD)</p>
</li>
<li>
<p>multi-plate-formes (Unix, Linux, Windows, MacOS, ...)</p>
</li>
<li>
<p>puissant (proche d'Oracle)</p>
</li>
<li>
<p>très respectueux du standard</p>
</li>
</ul>
</div>
<div data-hdoc-type="complement">
<ul>
<li>
<p>
<a href="http://www.postgresql.org/">http://www.postgresql.org/</a>
</p>
</li>
<li>
<p>
<a href="http://www.postgresql.fr/">http://www.postgresql.fr/</a>
</p>
</li>
</ul>
</div>
<footer/>
</div>
<div>
<h2>Types de données</h2>
<div>
<h3>Types standards</h3>
<ul>
<li>
<p>numériques : integer (int2, int4, int8), real (float4, float8)</p>
</li>
<li>
<p>dates : date (time, timestamp)</p>
</li>
<li>
<p>chaînes : char, varchar, text</p>
</li>
<li>
<p>autres : boolean, array[]</p>
</li>
</ul>
</div>
<div data-hdoc-type="complement">
<h3>Documentation</h3>
<p>
<a href="http://docs.postgresqlfr.org/8.1/datatype.html">http://docs.postgresqlfr.org/8.1/datatype.html</a>
</p>
</div>
<div data-hdoc-type="complement">
<h3>OID</h3>
<p>Voir Identification d'objets et références
</p>
</div>
<div data-hdoc-type="complement">
<h3>Types composites</h3>
<p>Voir Les types utilisateurs
</p>
</div>
<footer/>
</div>
<div>
<h2>Le client textuel "psql"</h2>
<div data-hdoc-type="definition">
<h3>psql</h3>
<p>
<span data-hdoc-type="syntax">psql</span> est le client textuel de PostgreSQL.</p>
<p>psql dbname -h host</p>
</div>
<div>
<h3>Commande de base</h3>
<ul>
<li>
<p>
<span data-hdoc-type="syntax">\?</span> : Liste des commandes <span data-hdoc-type="syntax">psql</span>
</p>
</li>
<li>
<p>
<span data-hdoc-type="syntax">\h</span> : Liste des instructions SQL</p>
<p>
<span data-hdoc-type="syntax">\h CREATE TABLE</span> : Description de l'instruction SQL <span data-hdoc-type="syntax">CREATE TABLE</span>
</p>
</li>
<li>
<p>
<span data-hdoc-type="syntax">\q</span> : Quitter <span data-hdoc-type="syntax">psql</span>
</p>
</li>
<li>
<p>
<span data-hdoc-type="syntax">\d</span> : Liste des relations (catalogue de données)</p>
<p>
<span data-hdoc-type="syntax">\d maTable</span> : Description de la relation <span data-hdoc-type="syntax">maTable</span>
</p>
</li>
<li>
<p>
<span data-hdoc-type="syntax">\H</span> : mode HTML ou mode textuel pour les retours de requête</p>
</li>
<li>
<p>
<span data-hdoc-type="syntax">\!</span> : permet d'exécuter certaines commandes du <i>shell</i> Linux</p>
</li>
</ul>
</div>
<div>
<h3>Écrire une instruction SQL</h3>
<p>Une instruction SQL peut s'écrire sur une ou plusieurs lignes, le <span data-hdoc-type="syntax">retour chariot</span> n'a pas d'incidence sur la requête, c'est le <span data-hdoc-type="syntax">
;
</span>qui marque la fin de l'instruction SQL et provoque son exécution.</p>