5. Cocoon - XSP
-
XSP = eXtensible Server Pages
-
Une alternative à Php / JSP dans certains cas
-
Principe plus élégant: on construit an arbre XML au lieu de faire des "print"
-
Fonctionne un peu près comme JSP (page compilation)
-
Fournit un certain nombre de "tag libraries" (SQL, Xforms, etc.) et permet d'en ajouter
Exemple 5-1: Good Morning ou good Afternoon
<?xml version="1.0"?>
<?cocoon-process type="xsp"?>
<?cocoon-process type="xslt"?>
<?xml-stylesheet href="simple-page-html.xsl" type="text/xsl"?>
<xsp:page language="java"
xmlns:xsp="http://www.apache.org/1999/XSP/Core"
xmlns:util="http://www.apache.org/1999/XSP/Util"
<page>
<title>Good morning or good afternoon</title>
<p> It is <util:time format="HH:mm, dd-MM-yyyy"/> </p>
<p> .... or <util:time format=""/> if you prefer. </p>
</page>
</xsp:page>
Exemple 5-2: Date
<?cocoon-process type="xsp"?>
<?cocoon-process type="xslt"?>
<?xml-stylesheet href="simple-page-html.xsl" type="text/xsl"?>
<xsp:page language="java" xmlns:xsp="http://www.apache.org/1999/XSP/Core"
>
<xsp:logic>
// Define a variable to hold the time of day
Date now = new Date();
</xsp:logic>
<page>
<title>Time of Day</title>
<p> To the best of my knowledge, it's now about
<!-- Substitute time of day here -->
<xsp:expr>now</xsp:expr> </p>
</page>
</xsp:page>
5.1 Anatomie d'une simple page XSP
?cocoon-process type="xsp"?>
<?cocoon-process type="xslt"?>
<?xml-stylesheet href="VOTRE_SHEET.xsl" type="text/xsl"?>
<xsp:page language="java" xmlns:xsp="http://www.apache.org/1999/XSP/Core">
<xsp:logic>
du code Java (comme les scriptlets <% %> en JSP
</xsp:logic>
<xsp:expr>
une simple expression Java (comme les <%= %> en JSP )
</xsp:expr>
</xsp:page>
5.2 Traitement de formulaires (GET/POST)
Exemple 5-3: Simple calcul
<xsp:page language="java" xmlns:xsp="http://www.apache.org/1999/XSP/Core">
<page>
<xsp:logic>
String choice = request.getParameter("choice");
String choice2 = request.getParameter("choice2");
int score = 0;
if ((choice == null) || (choice2 == null)) {
<xsp:content>Please use the <a href="form.html">form</a>
</xsp:content>
return;
} else
score = Integer.parseInt(choice) + Integer.parseInt(choice2);
</xsp:logic>
<title>Form - XSP Demo </title>
<content>
You entered <xsp:expr>choice</xsp:expr> and
<xsp:expr>choice2</xsp:expr>.
That makes <xsp:expr>score</xsp:expr>.
</content>
<comment>
Made by Daniel.Schneider@tecfa.unige.ch (3/99)
</comment>
</page>
</xsp:page>
-
explications à suivre, pour le moment voir la doc servlet ou JSP pour cet exemple ....
Exemple 5-4: XSP/ESQL simple 1
<?xml version="1.0"?>
<?cocoon-process type="xsp"?>
<?cocoon-process type="xslt"?>
<?xml-stylesheet href="simple-taglib-html.xsl" type="text/xsl"?>
<xsp:page
language="java"
xmlns:xsp="http://www.apache.org/1999/XSP/Core"
xmlns:esql="http://apache.org/cocoon/SQL/v2" >
<page>
<title>Cocoon XSP ESQL TagLibs demo</title>
<author> <name>Daniel Schneider, code stolen from examples in the Cocoon distribution</name> </author>
<p> Shows some of Cocoon's SQL/XSP tag library. Also shows how to build a simple table with xsl </p>
<esql:connection>
<esql:driver>org.gjt.mm.mysql.Driver</esql:driver>
<esql:dburl>jdbc:mysql://tecfa.unige.ch/demo</esql:dburl>
<esql:username>nobody</esql:username>
<esql:password></esql:password>
<esql:execute-query>
<esql:query>SELECT * FROM demo1 order by id;</esql:query>
<esql:results>
<ROWSET>
<esql:row-results>
<ROW>
<esql:get-columns/>
</ROW>
</esql:row-results>
</ROWSET>
</esql:results>
</esql:execute-query>
</esql:connection>
<p> See <a href="./">directory and appended README.html</a> for more information. </p>
</page>
</xsp:page>
-
Les balises <ROWSET> et <ROW> sont des balises arbitraires qu'on insère pour "entourer" les résultats d'une balise (sinon on obtient une liste à plat)
-
<esql:results> : le "result tree" selon les spécifications
-
<esql:row-results> retourne chaque ligne selon les spécifications
-
La balise <esql:get-columns> retourne les colonnes d'une ligne entourés des balises portant le nom du label de la colonne
Exemple 5-5: XSP/ESQL simple 2
<esql:results>
<ROWSET>
<esql:row-results>
<ROW>
<id><esql:get-int column="id"/></id>
<login><esql:get-string column="login"/></login>
<fullname><esql:get-string column="fullname"/></fullname>
<url><esql:get-string column="url"/></url>
<food><esql:get-string column="food"/></food>
</ROW>
</esql:row-results>
</ROWSET>
</esql:results>
Exemple 5-6: XSP/ESQL simple 2 avec un paramètre
-- TIE