[Tomcat] La servlet XXX est actuellement indisponible

La servlet XXX est actuellement indisponible [Tomcat] - Java - Programmation

Marsh Posté le 13-10-2006 à 10:03:26    

Bonjour,
 
je rencontre un problème sous Tomcat 4. Il me semble assez classique (pour un débutant) mais je n'arrive pas à en venir à bout.
J'essaye de déployer un war (que j'ai construit moi même, sans passer par un plug-in, donc l'erreur peut venir de là) mais je rencontre l'erreur suivante :  
 
Mon war s'appelle ContactManagerOscar.war. Je le déploie en utilisant le TomcatManager auquel je me log en utilisant le login/mdp tomcat/tomcat.
Dans le Tomcatmanager, j'utilise "Upload a WAR file to install" pour uploader le war se situant sur ma machine, sur celle servant de serveur.
Une fois cela fait, le tomcat manager me dit :  

Code :
  1. OK - Application install?e pour le chemin de contexte /ContactManagerOscar


Je tappe donc l'adresse : http://192.168.1.10:porttomcat/ContactManagerOscar/ et j'arrive sur une page m'affichant :
 

Code :
  1. Liste du r?pertoire pour /
  2. Nom de fichier  Taille  Derni?re modification
  3. Apache Tomcat/4.1


 
je considère cela comme normal vu que je n'ai pas spécifié de page d'accueil dans mon web.xml.
Je tappe donc l'adresse d'une servlet que j'ai mappé : http://192.168.1.10:porttomcat/ContactManagerOscar/showuserlist et j'arrive sur la page suivante :
 

Code :
  1. Etat HTTP 503 - La servlet showServlet est actuellement indisponible
  2. type Rapport d''?tat
  3. message La servlet showServlet est actuellement indisponible
  4. description Le service demand? (La servlet showServlet est actuellement indisponible) n'est pas disponible actuellement.
  5. Apache Tomcat/4.1


 
Et là je ne comprends pas grand chose. J'ai tenté de jeter un coup d'oeil aux logs, mais je crois qu'ils ne contiennent qu'une duplication du message ci dessus.
 
Mon War a l'arborescence suivante :
/META-INF/
   |-MANIFEST.MF
/WEB-INF/
   |-classes/
   |   |-com
   |   |   |-monsite
   |   |   |   |-partmult
   |   |   |   |   |-webui
   |   |   |   |   |   |-ShowUserList.class (C'est une servlet, il y en a d'autres ainsi que des non-servlets, mais c'est celle ci que je voudrai atteindre)
   |-lib/
   |   |-kxml-min.jar
   |-res/
   |   |-tools.js
   |-web.xml
 
 
et mon web xml a la gueule suivante :
 
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
  3. <web-app>
  4. <display-name>Première application</display-name>
  5. <description>Appli sous tomcat v1</description>
  6. <servlet>
  7. <servlet-name>showServlet</servlet-name>
  8. <servlet-class>com.monsite.partmult.webui.ShowUserList</servlet-class>
  9. <description>Servlet de presentation de la liste des utilisateurs</description>
  10. <load-on-startup>1</load-on-startup>
  11. </servlet>
  12. <servlet>
  13. <servlet-name>addModifyServlet</servlet-name>
  14. <servlet-class>com.monsite.partmult.webui.AddModifyUser</servlet-class>
  15. <description>Formulaire d ajout modification</description>
  16. <load-on-startup>2</load-on-startup>
  17. </servlet>
  18. <servlet>
  19. <servlet-name>actionServlet</servlet-name>
  20. <servlet-class>com.monsite.partmult.webui.ActionUsers</servlet-class>
  21. <description>Servlet d action, pas d affichage</description>
  22. <load-on-startup>3</load-on-startup>
  23. </servlet>
  24. <servlet-mapping>
  25. <servlet-name>showServlet</servlet-name>
  26. <url-pattern>/showuserlist</url-pattern>
  27. </servlet-mapping>
  28. <servlet-mapping>
  29. <servlet-name>addModifyServlet</servlet-name>
  30. <url-pattern>/addmodifyuser</url-pattern>
  31. </servlet-mapping>
  32. <servlet-mapping>
  33. <servlet-name>actionServlet</servlet-name>
  34. <url-pattern>/actionusers</url-pattern>
  35. </servlet-mapping>
  36. </web-app>


 
 
Alors comme Tomcat me sort le message "La servlet showServlet est actuellement indisponible" pour la requête "http://192.168.1.10:leporttomcat/ContactManagerOscar/showuserlist" le mapping semble marcher, donc je ne sais pas trop où chercher...
 
Merci d'avance pour votre aide !


Message édité par ikao2 le 13-10-2006 à 10:05:23
Reply

Marsh Posté le 13-10-2006 à 10:03:26   

Reply

Marsh Posté le 13-10-2006 à 10:20:24    

vérifies dans les logs de démarrage. elle doit avoir un problème lors de son initialisation j'imagine ...

Reply

Marsh Posté le 13-10-2006 à 10:23:32    

Je sais pas si ça peut t'aider...
 

Spoiler :

Tu utilises bien des servlets éponge ? http://www.touslesprix.com/ph_tar/2/2/9/4/2294401.jpg



---------------
Töp of the plöp
Reply

Marsh Posté le 13-10-2006 à 11:28:44    

benou a écrit :

vérifies dans les logs de démarrage. elle doit avoir un problème lors de son initialisation j'imagine ...


 
Oui effectivement, après avoir supprimé les logs, arrété et redemarré le serveur, j'ai des erreurs dans les logs (que je n'avais pas vu avant ???) et ces erreurs touchent à des fonctions de gestion de fichiers... :
 

Code :
  1. java.security.AccessControlException: access denied (java.io.FilePermission /tmp/UsersInfos.xml read)


 
Là ca m'embète un peu quand même, vous avez une idée de comment "augmenter" les droits du contexte d'éxecution ??

Reply

Marsh Posté le 13-10-2006 à 12:01:03    

tmp, c'est vraiment le meilleur endroit pour stocker ta conf ?
 


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 13-10-2006 à 13:13:49    

C'est un répertoire où, en théorie, tout le monde peut lire et écrire, donc pour l'instant ca me permet de cerner le problème :-/
 
Après je rangerai ca ailleurs, dans le rep de déploiement de mon appli peut être, je ne sais pas.
 
Mais donc là, pourquoi est ce que je ne peux pas écrire dans ce répertoire ? Auriez vous une idée ?

Reply

Marsh Posté le 13-10-2006 à 14:10:49    

le 'en théorie' est très intéressant ici. A vérifier, mais je ne suis pas complètement certain que ton serveur J2EE puisse écrire là.
 
sinon, les droits unix de ton fichier sont ok ? (555)


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 13-10-2006 à 14:37:48    

Bon, en fait je n'ai pas expliqué ce que je voulais faire avec mon fichier, donc ca ne doit pas être trés clair :
 
Mon appli est, en gros, un gestionnaire de contacts, qui stock des infos sur des utilisateurs (10 à 20 users).
Ces informations sont stockées dans un fichier xml : UsersInfos.xml.
Dans mon appli, la servlet principale (ShowUserList) affiche, au format html, le contenu de ce fichier. Il y a donc un travail de parsing de ce fichier xml afin d'en obtenir la représentation sous forme d'Objects java.
Mais je n'ai pas qu'à parser le contenu de ce fichier, je doit aussi écrire dessus. Or, j'ai lu sur un forum qu'il n'était pas possible d'écrire directement sur un fichier contenu dans un jar/war (ce qui peut semble assez logique), donc ce que je fais c'est que je crée un fichier UsersInfos.xml quelque part où je pourrai le modifier (en l'occurence j'ai choisi java.io.tmpdir).
Afin de ne pas partir d'une base vierge (rentrer XX utilisateurs à la main à chaque fois) mon War contient plusieurs ressources dont un fichier "UsersInfos.xml" qui me sert donc de base de départ :
 
ContactManagerOscar.war
/WEB-INF/
   |-...
   |-res/
   |   |-...
   |   |-UsersInfos.xml
   |-...
 
Je cherche donc à créer un nouveau fichier sur le server où je me trouve et le remplir avec le contenu de celui présent dans mon War.
 
J'arrive trés bien à effectuer cette opération sous windows avec un petit environnement embarqué qui est capable d'héberger des servlets (à partir d'un .jar équivalent à mon war), mais dès que je passe sous Tomcat, je ne m'en sors pas et j'obtiens ça :
 

Code :
  1. 2006-10-13 14:34:53 HostConfig[localhost]: D?compression de l archive ContactManagerOscar.war de l application web
  2. 2006-10-13 14:34:53 StandardHost[localhost]: Installation d une application pour le chemin de contexte /ContactManagerOscar depuis l URL file:/var/lib/tomcat4/webapps/ContactManagerOscar
  3. 2006-10-13 14:34:53 WebappLoader[/ContactManagerOscar]: Deploying class repositories to work directory /var/lib/tomcat4/work/Standalone/localhost/ContactManagerOscar
  4. 2006-10-13 14:34:53 WebappLoader[/ContactManagerOscar]: Deploy class files /WEB-INF/classes to /var/lib/tomcat4/webapps/ContactManagerOscar/WEB-INF/classes
  5. 2006-10-13 14:34:53 WebappLoader[/ContactManagerOscar]: Deploy JAR /WEB-INF/lib/kxml-min.jar to /var/lib/tomcat4/webapps/ContactManagerOscar/WEB-INF/lib/kxml-min.jar
  6. 2006-10-13 14:34:53 StandardManager[/ContactManagerOscar]: Alimentation de la classe du g?n?rateur de nombre al?atoire java.security.SecureRandom
  7. 2006-10-13 14:34:53 StandardManager[/ContactManagerOscar]: L alimentation du g?n?rateur de nombre al?atoire est termin?
  8. 2006-10-13 14:34:53 StandardWrapper[/ContactManagerOscar:showServlet]: La servlet showServlet est marqu? comme indisponible
  9. 2006-10-13 14:34:53 StandardContext[/ContactManagerOscar]: La servlet /ContactManagerOscar a g?n?r? une exception "load()"
  10. javax.servlet.ServletException: Erreur ? l instantiation de la classe servlet com.monsite.partmult.webui.ShowUserList
  11. at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:865)
  12. at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:776)
  13. at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3363)
  14. at org.apache.catalina.core.StandardContext.start(StandardContext.java:3586)
  15. at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:774)
  16. at org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:115)
  17. at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:135)
  18. at java.security.AccessController.doPrivileged(Native Method)
  19. at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:758)
  20. at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:548)
  21. at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:260)
  22. at org.apache.catalina.core.StandardHost.install(StandardHost.java:741)
  23. at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:445)
  24. at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:353)
  25. at org.apache.catalina.startup.HostConfig.start(HostConfig.java:671)
  26. at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
  27. at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
  28. at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1149)
  29. at org.apache.catalina.core.StandardHost.start(StandardHost.java:707)
  30. at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
  31. at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:316)
  32. at org.apache.catalina.core.StandardService.start(StandardService.java:450)
  33. at org.apache.catalina.core.StandardServer.start(StandardServer.java:2143)
  34. at org.apache.catalina.startup.Catalina.start(Catalina.java:463)
  35. at org.apache.catalina.startup.Catalina.execute(Catalina.java:350)
  36. at org.apache.catalina.startup.Catalina.process(Catalina.java:129)
  37. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  38. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  39. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  40. at java.lang.reflect.Method.invoke(Method.java:585)
  41. at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:156)
  42. ----- Root Cause -----
  43. java.security.AccessControlException: access denied (java.util.PropertyPermission java.io.tmpdir read)
  44. at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
  45. at java.security.AccessController.checkPermission(AccessController.java:427)
  46. at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
  47. at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
  48. at java.lang.System.getProperty(System.java:628)
  49. at com.monsite.partmult.UsersHandler.<init>(UsersHandler.java:47)
  50. at com.monsite.partmult.UsersHandler.getInstance(UsersHandler.java:34)
  51. at com.monsite.partmult.Administrator.<init>(Administrator.java:20)
  52. at com.monsite.partmult.Administrator.getInstance(Administrator.java:11)
  53. at com.monsite.partmult.webui.ShowUserList.<init>(ShowUserList.java:35)
  54. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  55. at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
  56. at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
  57. at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
  58. at java.lang.Class.newInstance0(Class.java:350)
  59. at java.lang.Class.newInstance(Class.java:303)
  60. at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:856)
  61. at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:776)
  62. at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3363)
  63. at org.apache.catalina.core.StandardContext.start(StandardContext.java:3586)
  64. at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:774)
  65. at org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:115)
  66. at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:135)
  67. at java.security.AccessController.doPrivileged(Native Method)
  68. at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:758)
  69. at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:548)
  70. at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:260)
  71. at org.apache.catalina.core.StandardHost.install(StandardHost.java:741)
  72. at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:445)
  73. at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:353)
  74. at org.apache.catalina.startup.HostConfig.start(HostConfig.java:671)
  75. at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
  76. at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
  77. at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1149)
  78. at org.apache.catalina.core.StandardHost.start(StandardHost.java:707)
  79. at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
  80. at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:316)
  81. at org.apache.catalina.core.StandardService.start(StandardService.java:450)
  82. at org.apache.catalina.core.StandardServer.start(StandardServer.java:2143)
  83. at org.apache.catalina.startup.Catalina.start(Catalina.java:463)
  84. at org.apache.catalina.startup.Catalina.execute(Catalina.java:350)
  85. at org.apache.catalina.startup.Catalina.process(Catalina.java:129)
  86. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  87. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  88. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  89. at java.lang.reflect.Method.invoke(Method.java:585)
  90. at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:156)

Reply

Marsh Posté le 13-10-2006 à 14:44:15    

Et concernant les droits :
 
/tmp est en 888
/var est en 555
/var/tmp est en 888
 
après, ce que j'aimerai avoir, c'est des infos sur les droits qu'à Tomcat à l'éxecution, mais je n'arrive pas à trouve ça sur google. Je vais re-jeter un coup d'oeil à la doc de TomCat, ca ne peut pas faire de mal :)

Reply

Marsh Posté le 13-10-2006 à 14:44:47    

Citation :

access denied (java.util.PropertyPermission java.io.tmpdir read)

et donc, les droits unix de ton répertoire, c'est quoi ?
 
sinon, je pense que tu peux modifier le fichier dans ton war, parce qu'en fait, il n'est plus dans le war une fois l'application déployée. C'est en tout cas vrai avec TomCat, que tu sembles utiliser. L'archive war est décompressée dans un répertoire de travail, où tu dois pouvoir la modifier (à vérifier quand même, je parle sous le contrôle des gurus qui trainent par là).
 
Sinon, pour afficher ton xml, xsl, c'est pas mal.
et pour stocker des données, une base de données, c'est mieux.
 
En général j'utilise xml pour la conf de l'application, pas pour son fonctionnement (s'pas clair, hein ?).


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 13-10-2006 à 14:44:47   

Reply

Marsh Posté le 13-10-2006 à 14:47:15    

c'est pas tant des droit de tomcat que les droits de ta servlets dans tomcat qu'il faut trouver.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 13-10-2006 à 15:04:37    

brisssou a écrit :

Citation :

access denied (java.util.PropertyPermission java.io.tmpdir read)

et donc, les droits unix de ton répertoire, c'est quoi ?
 
sinon, je pense que tu peux modifier le fichier dans ton war, parce qu'en fait, il n'est plus dans le war une fois l'application déployée. C'est en tout cas vrai avec TomCat, que tu sembles utiliser. L'archive war est décompressée dans un répertoire de travail, où tu dois pouvoir la modifier (à vérifier quand même, je parle sous le contrôle des gurus qui trainent par là).
 
Sinon, pour afficher ton xml, xsl, c'est pas mal.
et pour stocker des données, une base de données, c'est mieux.
 
En général j'utilise xml pour la conf de l'application, pas pour son fonctionnement (s'pas clair, hein ?).


 
Ok pour le war, pourquoi ne pas faire l'essai... si jamais l'autre solution marche :-)
Pour ce qui est du stockage dans une bdd, d'une part ca me contraint à en avoir une d'installée à chaque endroit ou je déploie ma "demo", et pour 10 users ayant chacun 5/6 champs, je trouvais ca un peu... disproportionné :)
 
Enfin en ce qui concerne xsl, je connais assez peu et je n'ai donc pas voulu m'embarquer là dedans (je découvrais assez de nouvelles chose comme ça :) )
 

brisssou a écrit :

c'est pas tant des droit de tomcat que les droits de ta servlets dans tomcat qu'il faut trouver.


 
Voici les droits de la servlet deployée :
 
-rw-r--r--  1 tomcat4 nogroup 5179 2006-10-13 14:34 ShowUserList.class
 

Reply

Marsh Posté le 13-10-2006 à 15:06:14    

Peut être faudrait il que je donne certain droits à "l'utilisateur" tomcat4 ?

Reply

Marsh Posté le 13-10-2006 à 15:14:48    

en fait, c'est le opérations que TomCat permet à tes (nos) servlets qu'il faudrait trouvé.
 
pour la bd, y des systèmes embarqué (sqllite, hsql, ou autres) qui, je crois (jamais testé) doivent pouvoir stocker leur données dans un fichier (qu'ils gèrent eux même) et toi tu utilises la bd.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 13-10-2006 à 15:41:14    

Bon j'ai tenté de modifier le group de tomcat pour le mettre dans root, et maintenant j'ai ça :
 
-rw-r--r--  1 tomcat4 root 5179 2006-10-13 15:36 ShowUserList.class
 
Et ca ne change rien.  :lol:  
 
je vais créer un topic ayant un titre un peu plus explicite que celui ci pour reposer la question des droits.
(ou éditer le titre de celui-ci en fait.)


Message édité par ikao2 le 13-10-2006 à 15:41:56
Reply

Marsh Posté le 13-10-2006 à 15:56:52    

OULA !!!!
 
tu as des bases en droits Unix ?! parce que là, c'est juste les droits de ton fichiers que tu vois, à savoir :
l'utilisateur en rw, le groupe en r, et le reste du monde en r.
l'utilisateur (propriétaire) du fichier est tomcat4, le groupe (propriétaire) du fichier est root.
 
c'est tout.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 13-10-2006 à 16:27:14    

Oui j'ai quelques bases :)
 
Et ca ne me semblait pas totalement incohérent (en plein desespoir) qu'en modifiant le groupe propriétaire, tomcat ai plus de droits à l'éxecution.
 
Ce doit être de mauvaises bases  :lol:  
 
Bon, j'ai installé un xampp + plug-in tomcat sous windows, et j'ai un soucis différent, il bloque au niveau de la récupération du fichier dans le war... (donc il va un peu plus loin)
 
Je crois que je vais déjà réécrire proprement mon appli ce week end, et j'y verrai peut être (miraculeusement) plus clair.

Reply

Marsh Posté le 13-10-2006 à 18:08:15    

à mon avis, ca vient plus de la conf de tomcat : dans le rep conf de tomcat tu vas trouver un fichier policy. édite le, tu devrais pouvoir le régler pour qu'il autorise ton code à accéder au système de fichier.
 
remarque : c'est la merde la syntaxe de ce fichier ... bon courage

Reply

Marsh Posté le 31-10-2006 à 11:34:03    

Bon, j'ai fini par faire ce que je voulais (ca fait une bonne semaine mais je n'avais pas encore eu le temps de repasser ici)...
 
Merci benou pour ta proposition, mais je n'ai pas utilisé cette technique finalement donc je ne peux pas confirmer que ca marche, ni donner un exemple concret :-/
 
En ce qui me concerne donc, je récupère le path réel de mon appli web :
 

Code :
  1. String v_contextRealPath = this.getServletContext().getRealPath("" );


 
J'obtiens donc un chemin absolu sur le disque du serveur qui pointe vers le dossier contenant mon appli web (typiquement /usr/local/tomcat/apache-tomcat-5.5.20/webapps/MonAppli  pour moi)
 
Et dans ce dossier et ses sous dossiers, je peux faire tout ce que je veux, c'est à dire créer des dossiers, en supprimer, en renommer, bref tout ce que je veux faire.
 
Voilà !
 
Merci à tous pour vos réponses.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed