QQun a t-il deja utiliséun script ANT qui permette de pré compiler les jsp.
Pasque celui de jakarta je comprends pas trop ce qu'il fait ...
Merci d'avance...
Version imprimable
QQun a t-il deja utiliséun script ANT qui permette de pré compiler les jsp.
Pasque celui de jakarta je comprends pas trop ce qu'il fait ...
Merci d'avance...
Non, tu ne peux le faire que à travers un serveur tel que Tomcat...
Bon j'ai peut etrre pas été assez précis mais effectivement j'utilise un serveru tomcat pour faire tourner mon appli mais je sais que l'on peut précompiler les JSP afin de ne pas avoir à le faire lorsque l'on met l'application en production (ceci evite tous les soucis de lenteur liés à la compilation).Citation:
Envoyé par hocinema
On peut le faire car il y a un script ANT sur Jakarta simplement je pige pas comment ça marche...
Tes JSP ne seronts compilé que la premiere fois ou elles seront appellées. Ensuite elle s ne le sont plus tant que tu recharge pas le contexte ou que tu ne modifie pas les pages.
@+
Tout à fait,
A chaque appel d'un jsp, le serveur d'application verifi si la version servlet qu'il possede corespond à la version de la jsp. Si celle ci à ete modifiée entre temps, il l'a recompile (transforme) en servlet... Dans le cas contraire, pas de recompilation.
Je sais ça!
Mais lorsque ke je fais une maj complete d'une appli c un peu lourd pour les users d'attendre ke les JSP se recompilent
Mais normalement en production un serveur tomcat ne doit pas perdre son temps à faire cette verifiation de Jsp modifié ou non. On désactive le mod compilation des JSP, on les pré compile tous et pas et soucis.
Pour preuve : (choppé sur jakarta)
Je vais essayer de me plonger à fond dans cette affaire et je vous tiens au courantCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 Using Ant is the preferred way to compile web applications using JSPC. Use the script given below to precompile a webapp: <project name="Webapp Precompilation" default="all" basedir="."> <target name="jspc"> <taskdef classname="org.apache.jasper.JspC" name="jasper2" > <classpath id="jspc.classpath"> <pathelement location="${java.home}/../lib/tools.jar"/> <fileset dir="${tomcat.home}/server/lib"> <include name="*.jar"/> </fileset> <fileset dir="${tomcat.home}/common/lib"> <include name="*.jar"/> </fileset> </classpath> </taskdef> <jasper2 validateXml="false" uriroot="${webapp.path}" webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml" outputDir="${webapp.path}/WEB-INF/src" /> </target> <target name="compile"> <mkdir dir="${webapp.path}/WEB-INF/classes"/> <mkdir dir="${webapp.path}/WEB-INF/lib"/> <javac destdir="${webapp.path}/WEB-INF/classes" optimize="off" debug="on" failonerror="false" srcdir="${webapp.path}/WEB-INF/src" excludes="**/*.smap"> <classpath> <pathelement location="${webapp.path}/WEB-INF/classes"/> <fileset dir="${webapp.path}/WEB-INF/lib"> <include name="*.jar"/> </fileset> <pathelement location="${tomcat.home}/common/classes"/> <fileset dir="${tomcat.home}/common/lib"> <include name="*.jar"/> </fileset> <pathelement location="${tomcat.home}/shared/classes"/> <fileset dir="${tomcat.home}/shared/lib"> <include name="*.jar"/> </fileset> </classpath> <include name="**" /> <exclude name="tags/**" /> </javac> </target> <target name="all" depends="jspc,compile"> </target> </project> The following command line can be used to run the script (replacing the tokens with the Tomcat base path and the path to the webapp which should be precompiled): $ANT_HOME/ant -Dtomcat.home=<$TOMCAT_HOME> -Dwebapp.path=<$WEBAPP_PATH> Then, the declarations and mappings for the servlets which were generated during the precompilation must be added to the web application deployment descriptor. Insert the ${webapp.path}/WEB-INF/generated_web.xml at the right place inside the ${webapp.path}/WEB-INF/web.xml file. Restart the web application (using the manager) and test it to verify it is running fine with precompiled servlets. An appropriate token placed in the web application deployment descriptor may also be used to automatically insert the generated servlet declarations and mappings using Ant filtering capabilities. This is actually how all the webapps distributed with Tomcat are automatically compiled as part of the build process.
Oui, c tres interessant :-)
Des que j'ai un moment je jeterai un coup d oeil aussi :P
J'ai essaye jspc un coup, ca fonctionnait bien, mais j'ai eu du mal a configurer les references, c'est a dire qu'il recompilait les jsp a chaque fois que je lui demandait. Je n'ai pas approfondi plus que ca, mais la config est un poil compliquee car tu dois d'abord transformer en .java, puis en .class.
Avec un brin de patience (et de google), ca doit se faire.
Si tu as un bel example de build.xml, publie-le, je serais interesse.
Sans ca, beaucoup d'IDE font ca automatiquement, mais bien sur, ce n'est pas ton probleme.
Bon courage.
en IDE j'utilise eclipse et je crois pas savoir k'il fasse ça ...
à moins ke j'ai mal regardé...
Sinon j'arrive à generer les .java avec jspc
Pour ce ki est de la compile j'ai encore moult erreurs... je teste...
apres va falloir ke j'indique à tomcat ou aller chercher les jsp compilés (par défaut dans work)
je continue.. :)
Surtout tient nous bien au courant car je pense que ca interresse bcp de gens !!!
Je jette un oeil desus de mon coté :D
@+
bon ça compile
mais j'ai un truc bizard ça met tout mes Jsp à la racine de org\apache\jsp.
Mon arboresence n'est plus respectée
Mainteant je cherche à indiquer à tomcat ou sont mes servlets...
je poursuis...
bon pour ceux ke ça interresse ça compile :)
un fichier XML est genéré pour faire le mapping entre les chemain des jsp et les servlets générées.
Le contenu de ce fichier est à copier dans le web.xml de la web-app.
pour ma part j'ai reussi à lancer mes servlets (ouf!)
Mais il me reste deux gros soucis :
- Dans mes servlet genérée avec JSPC (.java), lorsque j'ai les caractères : 'é' ou 'è' , j'ai des vieux caractère de merde ki sont à la place. Je pense à un soucis d'encodage mais je sais pas comment faire.
- Toutes les servlets compilées atterissent dans le même dossier ce qui fait ke si j'ai l'arboresence suivante :
myapp/index.jsp
myapp/subdir/index.jsp
une seule servlet sera générée :( et du coup mon mapping dans le web.xml devient foireur et rien ne se lance :(:(
Si kkun a des solutions... paske là je sèche...
pour ce qui est de l'encodage c bon!
Il suffit de préciser à la compilation que l'on encode en UTF-8
reste le probleme délicat des JSP portant le mee nom deans des dossier différents
Tu as regardé du coté de uriroot et uribase ??
c'est bon tout fonctionne!
J'annonce k'il faut le dernier Tomcat (4.1.27) et le dernier ANT (1.5.4)
Il ne faut pas se fier aux docs en ligne, elle ne sont pas à jour...
Bon c un peu le bordel dans mon script
Je vais mettre tout ça en forme et je vous en post un commenté!
Content d'avoir trouvé :)
Et voilà un script ki fonctionne:)
La commande jspc genere les .java et javac les compiles ensuite.
On notera la commande pour copier le contenu du generated_web.xml dans le web.xml au moyen d'une référence.
N'hésitez pas si vous avez des questions, je pense avoir bien dégrossi l'affaire :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 <!--.jsp to .java--> <target name="jspc"> <jspc srcdir="${web-app}/jsp/aif" destdir="${jsp.servgendir}" uriroot="${web-app}/jsp/aif" failonerror="false" classpathref="jspc_.classpath" package="org.mypack.jsp" compiler="jasper41" verbose="9" webinc="${jsp.servgendir}/generated_web.xml"> <classpath id="jspc_.classpath"> <pathelement location="${java.home}/../lib/tools.jar"/> <fileset dir="${tomcat.home}/server/lib"> <include name="*.jar"/> </fileset> <fileset dir="${tomcat.home}/common/lib"> <include name="*.jar"/> </fileset> </classpath> <exclude name="**/WEB-INF/**"/> <exclude name="include/**"/> <exclude name="tags/**" /> </jspc> <!--copy file to web.xml--> <loadfile property="generated_web.xml" srcFile="${jsp.servgendir}/generated_web.xml" /> <replace file="${web-app}/WEB-INF/${webfile}" token="@jspServletXml" value="${generated_web.xml}" /> </target> <!--.jsp to .class--> <target name="compilejsp" depends="jspc"> <!--java to .class --> <javac destdir="${web-app}/WEB-INF/classes" optimize="off" debug="on" failonerror="false" srcdir="${jsp.servgendir}" encoding="UTF-8" excludes="**/*.smap"> <classpath> <pathelement location="${web-app}/WEB-INF/classes"/> <pathelement location="${tomcat.home}/common/classes"/> <fileset dir="${tomcat.home}/common/lib"> <include name="*.jar"/> </fileset> <pathelement location="${tomcat.home}/shared/classes"/> <fileset dir="${tomcat.home}/shared/lib"> <include name="*.jar"/> </fileset> <fileset dir="${lib}"> <include name="*.jar"/> </fileset> </classpath> <include name="**" /> </javac> </target>
Bonjour,
Je remonte ce post car c'est tout à fait ce que je veux faire mais j'ai l'erreur suivante :
J'ai essayé en enlevant l'attribut verbose mais ça revient au mêmeCode:
1
2 [jasperc] org.apache.jasper.JasperException: Unrecognized option: -v9. Use -help for help.
J'utilise apache ant 1.7.0.
Merci d'avance