27
1/27 INF157 - Utilisation des Réseaux Licence 3 Informatique Arnaud Pecher (repris par Damien Magoni) Bureau 322, Bâtiment A30, LaBRI Université de Bordeaux Licence 3 Informatique - Bordeaux Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 1 / 27

INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

1/27

INF157 - Utilisation des RéseauxLicence 3 Informatique

Arnaud Pecher (repris par Damien Magoni)

Bureau 322, Bâtiment A30, LaBRIUniversité de Bordeaux

Licence 3 Informatique - Bordeaux

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 1 / 27

Page 2: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

2/27

Sommaire

1 Les WIKIs ... selon Wikipedia !

2 Un WIKI : pmwiki

3 Le projetLe code de base

Bibliographie

Wikipedia ;-)

wikimatrix http ://www.wikimatrix.org/

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 2 / 27

Page 3: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

3/27

Plan

1 Les WIKIs ... selon Wikipedia !

2 Un WIKI : pmwiki

3 Le projetLe code de base

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 3 / 27

Page 4: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

4/27

Le concept

WikiUn wiki est un système de gestion de contenu de site Web qui rend lespages Web librement modifiables par tous les visiteurs autorisés.

Faciliter l’écriture collaborative de documents avec un minimumde contraintes.Inventé en 1995 par Ward Cunningham.Le mot « wiki » vient du redoublement hawaiien wiki wiki, quisignifie « rapide ».

Moteur de wikiLogiciel qui met en œuvre la gestion du contenu des pages.

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 4 / 27

Page 5: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

5/27

Identification des visiteurs

Un wiki n’est pas forcément modifiable par tout le monde ; on peutexiger que les visiteurs s’inscrivent avant d’être autorisésà modifier les pages.Lorsqu’un wiki autorise des visiteurs anonymes à modifier lespages, c’est l’adresse IP de ces derniers qui les identifie

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 5 / 27

Page 6: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

6/27

Edition d’une page

On accède à un wiki, en lecture comme en écriture, avec unnavigateur Web classique.Deux modes différents : le mode lecture, qui est le mode pardéfaut, et le mode édition, qui présente la page sous une formequi permet de la modifier.En mode édition, le texte de la page, affiché dans un formulaireWeb, s’enrichit d’un certain nombre de caractèressupplémentaires, suivant les règles d’une syntaxe particulière : lewikitexte, qui permet d’indiquer la mise en forme du texte, de créerdes liens, de disposer des images, etc.Quelques wikis proposent une interface d’édition WYSIWYG.

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 6 / 27

Page 7: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

7/27

Création d’une page et suivi des modifications

Création des pages :Aucune contrainte organisationnelle.Les WikiWords (mots avec plusieurs capitales) désignentautomatiquement une page.

Suivi des modifications :Un wiki incorpore un système de gestion des versions d’une page.Le suivi des versions d’une page n’est pas librement modifiable.

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 7 / 27

Page 8: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

8/27

Comparaison des moteurs de wikis

http ://www.wikimatrix.org

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 8 / 27

Page 9: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

9/27

Plan

1 Les WIKIs ... selon Wikipedia !

2 Un WIKI : pmwiki

3 Le projetLe code de base

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 9 / 27

Page 10: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

10/27

http ://www.pmwiki.fr

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 10 / 27

Page 11: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

11/27

Exemple de personnalisation

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 11 / 27

Page 12: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

12/27

Vue : historique de la page

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 12 / 27

Page 13: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

13/27

Vue : édition de la page

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 13 / 27

Page 14: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

14/27

Aperçu de la syntaxe

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 14 / 27

Page 15: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

15/27

Plan

1 Les WIKIs ... selon Wikipedia !

2 Un WIKI : pmwiki

3 Le projetLe code de base

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 15 / 27

Page 16: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

16/27

Scripts

Le script deploy.sh se charge de compiler la servlet et de ladéployer dans tomcat.deploy.sh

1 création de la structure des répertoires de la servlet (via le scriptcreateDirectories.sh) ;

2 recopie des sources java dans webapps/src, compilation, etdéplacement des binaires dans webapps/deploy/classes (viale script compil.sh) ;

3 recopie du fichier web.xml dans WEB_INF ;4 recopie du fichier params.txt dans webapps/deploy ;5 création d’une archive .war pour l’importation dans tomcat ;6 déploiement de la servlet (à partir de l’archive) dans tomcat (et

relancement de celui-ci).

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 16 / 27

Page 17: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

17/27

Scripts Unix de déploiementcreateDirectories.sh

mkdir webapps && mkdir webapps/srcmkdir webapps/deploy && mkdir webapps/deploy/WEB-INFmkdir webapps/deploy/WEB-INF/classes

compile.sh

javac -cp .:servlet-api.jar webapps/src/ *.javamv webapps/src/ *.class webapps/deploy/WEB-INF/classes/

deploy.sh

echo "reinitialisation de webapps/deploy (recompilation)"sh createDirectories.sh && sh compile.shecho "recopie du fichier web.xml dans WEB-INF"cp web.xml webapps/deploy/WEB-INF/echo "recopie du fichier params.txt dans deploy"cp params.txt webapps/deploy/echo "creation de l’archive .war pour tomcat"cd webapps/deploy && jar cf ../../MaServletWiki.war *echo "deploiement et relancement de tomcat"sh $CATALINA_HOME/bin/shutdown.shrm -fr $CATALINA_HOME/webapps/MaServletWiki*cp ../../MaServletWiki.war $CATALINA_HOME/webapps/sh $CATALINA_HOME/bin/startup.shecho "termine."

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 17 / 27

Page 18: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

18/27

WikiEngine

WikiEngine extends HttpServletVariables : W_action, W_pageMéthodes :

public WikiEngine()

public void doGet (HttpServletRequest, HttpServletResponse ) throws IOException

public void doPost (HttpServletRequest, HttpServletResponse res) throws IOException

private String XHTMLContent()

private String XHTMLBody()

private String XHTMLHead( String )

private String loadFile( String )

Commentaires1 les 2 variables stockent la page Wiki courrante et le mode de rendu (edit, print etc ...) ;2 les méthodes doGet et doPost sont appelées par le navigateur, en fonction de la requête

HTTP ;3 les 3 méthodes XHTMLxxx construisent le code XHTML à retourner au navigateur ;4 la méthode loadFile charge le fichier texte correspondant à la page Wiki demandée.

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 18 / 27

Page 19: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

19/27

doGet

public void doGet (HttpServletRequest, HttpServletResponse ) throws IOException

try { StringBuffer url = req.getRequestURL ();W_page = url.substring(url.lastIndexOf("/") + 1);// outputPrintWriter out = res.getWriter ();res.setContentType ("text/html; charset=ISO-8859-1");W_action = req.getParameter (W_ACTION);out.println(XHTMLContent());}catch (IOException e){res.sendError (HttpServletResponse.SC_SERVICE_UNAVAILABLE); }

Commentaires1 méthode appelée lorsque le client demande l’URL via la méthode HTTP Get (cas général)2 récupération du nom de la page dans W_page3 récupération du mode d’action dans W_action4 envoi au client du code XHTML correspondant généré par la méthode XHTMLContent()

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 19 / 27

Page 20: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

20/27

doPost

public void doPost (HttpServletRequest req, HttpServletResponse res)

try { // sauvegarde du code de la page entree dans le formulaireStringBuffer urlB = req.getRequestURL ();String page = urlB.substring (urlB.lastIndexOf("/") + 1);String text = req.getParameter (W_TEXT);BufferedWriter buffer =new BufferedWriter (new FileWriter (W_PAGE_DIR+page+".dot"));buffer.write (text, 0, text.length ()); buffer.close ();// chargement de la page sauvegardeedoGet(req, res);}catch (IOException e) { res.sendError (HttpServletResponse.

SC_SERVICE_UNAVAILABLE);}

Commentaires1 méthode appelée lorsque le client demande l’URL via la méthode HTTP Post (après saisie

du code wiki de la page dans un formulaire XHTML)2 récupération du nom de la page3 sauvegarde du code wiki dans le fichier correspondant4 envoi du code XHTML correspondant au client, via la méthode doGet

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 20 / 27

Page 21: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

21/27

XHTMLContent, XHTMLHead

private String XHTMLContent()

return XHTMLHead("WIKI: "+W_page+" ("+W_action+")")+XHTMLBody()+"</html>";

Commentaire : construit le rendu XHTML de la page, formé d’un entête XHTML donné par laméthode XHTMLHead avec le titre WIKI : page (action) et du corps XHTML retourné parla méthode XHTMLBody .

private String XHTMLHead( String title )

return "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\""+

"\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"+"<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\" lang=\"fr

\">"+"<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=

ISO-8859-1\" />"+"<link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\" />"+"<title>"+title+"</title> </head>";

Commentaire : retourne un entête XHTML ; à adapter pour gérer les feuilles de style multiples.

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 21 / 27

Page 22: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

22/27

XHTMLBody

private String XHTMLBody()

if (W_action == null) {/* normal XHTML view */return "<body><p><a href=\""+W_page+"?action="+ W_EDIT +"\">Edit</a><br

/>"+wikiToHtml.parse(loadFile(W_PAGE_DIR+W_page+".dot"))+"</body>";};if (W_action.equals(W_EDIT)){ /* edit XHTML view (form) */String rep="<form method=\"post\" action=\""+W_page+"\">\n";rep+="<p><textarea cols=\"120\" rows=\"40\" name=\""+ W_TEXT + "\">"+ loadFile(W_PAGE_DIR+W_page+".dot")+"</textarea></p>\n";rep+="<p><input type=\"submit\" value=\"Send\" /></p></form>";return rep;}return "";

Commentaires1 retourne le corps XHTML en fonction du mode enregistré dans W_action2 si pas de mode défini : mode normal -> traduction syntaxe wiki en code XHTML via

WikiParser et ajout hyperlien pour édition3 si mode édition : on insère dans un formulaire le contenu de la page (syntaxe wiki), via

loadFile, à transmettre à la méthode doPost (pour enregistrement dans le fichier)4 autres modes (print etc), à faire ...

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 22 / 27

Page 23: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

23/27

loadFile

private String loadFile( String file )

try{BufferedReader buffer = new BufferedReader (new FileReader (file));StringBuffer bufferString = new StringBuffer();String line;while ((line = buffer.readLine ()) != null)bufferString.append (line+"\n");return bufferString.toString();}

catch (FileNotFoundException e) {return loadFile(W_PAGE_DIR+"FileNotFound.dot");}

catch (IOException e){return loadFile(W_PAGE_DIR+"IOException.dot");}

Commentaires1 retourne le contenu du fichier texte file2 si le fichier n’existe pas, renvoie la page wiki FileNotFound, qui informe l’utilisateur que

la page n’existe pas et propose de l’éditer (i.e. création d’une nouvelle page)3 si erreur de lecture, renvoie la page wiki IOException, qui informe l’utilisateur d’un

problème

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 23 / 27

Page 24: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

24/27

WikiParser

Interface Parserpublic String parse(String input) ;

WikiParser implements ParserClasse interne : Replacement implements ParserVariable : List<Parser> parsersMéthodes :

public WikiParser()

public String parse(String input)

Commentaires1 la classe interne Replacement prend en charge une méthode de substitution via sa

méthode parse2 le constructeur construit une collection d’instances de Replacement

3 la méthode parse applique toutes les méthodes de substitutions de la collection parsers

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 24 / 27

Page 25: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

25/27

Replacement

class Replacement implements Parser

private Pattern pattern; private String replacement;

public Replacement(String regexp, String replacement) {// pre-compile regular expressionspattern=Pattern.compile(regexp); this.replacement=replacement;}

public String parse(String input) { // use matcher, then replace allMatcher matcher = pattern.matcher(input);return matcher.replaceAll(replacement);}

Commentaires1 classe interne pour la prise en charge d’une substitution sémantique pour les occurences

spécifiées par une expression régulière2 la variable pattern est l’expression régulière compilée (pour augmenter les

performances)3 la variable replacement contient la chaine de substitution4 la méthode parse prend en paramètre la chaine à substituer et effectue toutes les

substitutions

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 25 / 27

Page 26: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

26/27

Constructeur WikiParser

public WikiParser()

pars=new ArrayList<Parser>();// URL type one [[internal page]] : replace [[(1:filename).(2:ext)]]pars.add(new Replacement("\\[\\[([\\w_-]+)\\]\\]","<a href=\"$1\">$1</a

>"));// URL type two [[internal_page|name]] : replace by "<a href=\"page=

internal_page\">name</a>"pars.add(new Replacement("\\[\\[([\\w_-]+)\\|([\\w\\p{Punct}\\p{Blank

}]+)\\]\\]", "<a href=\"$1\">$2</a>"));// line feed "\n" x k and k >=2 -> <br />pars.add(new Replacement("([\\n(?:\\p{Blank}{0,}]{2,})","<br />\n"));// list block ("* text" x n) parser adds <ul> ... </ul>pars.add(new Replacement("((?:\\* [^\\n]+\\n)+)","<ul>\n$1</ul>\n"));// list item ("* text") identifier adds <li> ... </li>pars.add(new Replacement("\\* ([^\\n]+)\\n","<li>$1</li>\n"));

Commentaires1 dans une expression régulière, on utilise \ pour protéger un caractère2 dans une chaine, on utilise \\ pour le symbole \ ; \w désigne un caractère de mot3 [[internalpage]] 7→ <a href=”internalpage”>internalpage</a>

expression régulière : \[\[(\w_- +)\]\]4 rajouter vos propres expressions régulières pour enrichir la syntaxe du wiki

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 26 / 27

Page 27: INF157 - Utilisation des Réseaux - Licence 3 Informatiquethibault/Reseau/INF157-CM7.pdf · Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement

27/27

parse

public String parse(String input)

String temp=input;for (Iterator<Parser> it=pars.iterator(); it.hasNext();) {temp=it.next().parse(temp);}return temp;

Commentaires1 applique toutes les méthodes de substitutions de la collection pars à la chaine passée en

paramètre

Univ Bx 1 (LaBRI) INF157 - Utilisation des Réseaux L3 INFO 27 / 27