[JSP] Utilisation de classes personnelles

Utilisation de classes personnelles [JSP] - Java - Programmation

Marsh Posté le 17-11-2004 à 18:26:24    

Bonjour tout le monde,
 
j'ai acheté un livre sur J2EE et j'en suis seulement au début. Les pages JSP y sont traitées. J'essaye de réaliser les exemples du livre et certaines me posent problème.  
 
Lorsque je fais des pages devant importer des classes de bases de Java, je n'ai pas de problème.
 

Code :
  1. <%@ page import="java.util.ArrayList" %>
  2. <%! ArrayList list = new ArrayList(); %>


 
Ce code passe sans problèmes donc.
 
Si je décide par contre de créer une classe personnelle comme MaClass.java et que je compte l'utiliser dans une JSP alors j'obtiens des erreurs comme quoi le servlet ne peut comprendre le symbole MaClass lors de la compilation.
 
J'utilise le server fournit par défaut avec J2EE et l'outil de déploiement par défaut "deploytool". Cet outil me crée donc toute une hiérarchie de dossier, dont le fameux WEB-INF et son sous répertoire "class". J'ai bien essayé de placer ma classe dans ce répertoire (sous forme .java et/ou .class) mais sans plus de succès.
 
Je vais donc vous mettre la compostion de différents fichiers:
 
Le fichier index.jsp


<%@ page import="monPackage.MaClass;" %>
<%! MaClass maClass = new MaClass(); %>
<html>
<head>
      <title> Bonjour ! - test de l'installation du J2EE SDK
      </title>
</head>
<body>
<%
  for (int i=1; i<5; i++){
%>
  <h<%=i%>>Bonjour ! </h<%=i%>>
<% } %>
 
   Ma classe a un entier valant <%=maClass.getMonInt()%>
 
</body>
</html>


 
Le fichier monPackage\maClass.java

Code :
  1. public class MaClass{
  2. int monInt;
  3. public MaClass(){
  4.     monInt = 5;
  5. }
  6. public int getMonInt(){
  7.     return monInt;
  8. }
  9. }


 
DeployTool m'a créer une archive WAR a ma demande, dont le contenu est:
 


\META-INF\MANIFEST.MF
\WEB-INF\classes\monPackage\MaClass.class
\WEB-INF\sun-j2ee-ri.project
\WEB-INF\sun-web.xml
\WEB-INF\web.xml
\index.jsp


 
Le contenu du manifest


Manifest-Version: 1.1
Class-Path:  
 
Name: WEB-INF/classes/monPackage/MaClass.java
 
Name: WEB-INF/sun-j2ee-ri.project
 
Name: index.jsp


 
Le contenu de sun-j2ee-ri.project


# hello2 Project File
#Wed Nov 17 18:35:04 CET 2004
project.path=(Ch02b WEB-INF\\classes classes WEB-INF\\lib lib contentRoot .)
project.root=F\:\\j2ee


 
Le contenu de sun-web.xml


  <?xml version="1.0" encoding="UTF-8" ?>  
  <!DOCTYPE sun-web-app (View Source for full doctype...)>  
- <sun-web-app error-url="">
  <context-root>HelloAndClass2</context-root>  
  </sun-web-app>


 
Le contenu de web.xml


  <?xml version="1.0" encoding="UTF-8" ?>  
- <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <display-name xml:lang="fr">hello2</display-name>  
- <servlet>
  <display-name xml:lang="fr">index</display-name>  
  <servlet-name>index</servlet-name>  
  <jsp-file>/index.jsp</jsp-file>  
  </servlet>
  </web-app>


 
Voilà, encore heureux que le projet n'est pas énorme :)  
 
Pour finir je vous mets l'erreur générée lors de l'éxecution de index.jsp dans mon naviguateur (internet explorer).
 


org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP
 
Erreur de servlet générée:
    [javac] C:\Program Files\Java\Sun\AppServer\domains\domain1\generated\jsp\j2ee-modules\hello2\org\apache\jsp\index_jsp.java:6: package monPackage does not exist
    [javac] import monPackage.MaClass;;
    [javac]                   ^
 
 
Erreur de servlet générée:
    [javac] C:\Program Files\Java\Sun\AppServer\domains\domain1\generated\jsp\j2ee-modules\hello2\org\apache\jsp\index_jsp.java:11: cannot resolve symbol
    [javac] symbol  : class MaClass  
    [javac] location: class org.apache.jsp.index_jsp
    [javac]  MaClass maClass = new MaClass();  
    [javac]  ^
 
 
Erreur de servlet générée:
    [javac] C:\Program Files\Java\Sun\AppServer\domains\domain1\generated\jsp\j2ee-modules\hello2\org\apache\jsp\index_jsp.java:11: cannot resolve symbol
    [javac] symbol  : class MaClass  
    [javac] location: class org.apache.jsp.index_jsp
    [javac]  MaClass maClass = new MaClass();  
    [javac]                        ^
 
 
Erreur de servlet générée:
    [javac] C:\Program Files\Java\Sun\AppServer\domains\domain1\generated\jsp\j2ee-modules\hello2\org\apache\jsp\index_jsp.java:55: cannot resolve symbol
    [javac] symbol  : variable list  
    [javac] location: class org.apache.jsp.index_jsp
    [javac]   list.add("Hello" );
    [javac]   ^
    [javac] 4 errors
 
 org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:88)
 org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:337)
 org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:417)
 org.apache.jasper.compiler.Compiler.compile(Compiler.java:477)
 org.apache.jasper.compiler.Compiler.compile(Compiler.java:456)
 org.apache.jasper.compiler.Compiler.compile(Compiler.java:444)
 org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:516)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:300)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:307)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:251)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
 sun.reflect.GeneratedMethodAccessor140.invoke(Unknown Source)
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 java.lang.reflect.Method.invoke(Method.java:324)
 org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:246)
 java.security.AccessController.doPrivileged(Native Method)
 javax.security.auth.Subject.doAsPrivileged(Subject.java:500)
 org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:273)
 org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)


 
En gros, il me faut savoir où donner l'information à ma jsp d'aller trouver son bonheur dans le répertoire \WEB-INF\class tout seul comme un grand.
 
Merci d'avoir lu jusque là :)
 
MachiiinE.


Message édité par Machiiine le 17-11-2004 à 21:06:11
Reply

Marsh Posté le 17-11-2004 à 18:26:24   

Reply

Marsh Posté le 17-11-2004 à 20:15:57    

Ta classe "MaClasse" n'est dans aucun package, or tu fais un import "monPackage.MaClass" dans ton JSP. Ca ne peut pas marcher.
 
Place toujours tes classes dans un package. En l'occurence, package monPackage; devrait faire l'affaire. Pense à utiliser un mon un peu plus significatif par la même occasion.
 
N'oublie pas non plus que ta structure de répertoire doit correspondre à ton packaging.
 
Ca devrait résoudre ton pb.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 17-11-2004 à 20:42:03    

:heink:  
 
comment j'ai déjà pû oublier ca...
 
Donc voilà, l'erreur du "package monPackage;" oublié dans le fichier .java est résolue.
 
J'obtiens dès lors cette erreur que je ne comprend pas du tout là  :pt1cable: .
 


Erreur de servlet générée:
    [javac] C:\Program Files\Java\Sun\AppServer\domains\domain1\generated\jsp\j2ee-modules\hello3\org\apache\jsp\index_jsp.java:6: cannot access monPackage.MaClass
 
 
Erreur de servlet générée:
    [javac] bad class file: C:\Program Files\Java\Sun\AppServer\domains\domain1\applications\j2ee-modules\hello3\WEB-INF\classes\monPackage\MaClass.class
    [javac] class file has wrong version 49.0, should be 48.0
    [javac] Please remove or make sure it appears in the correct subdirectory of the classpath.
    [javac] import monPackage.MaClass;;
    [javac]                   ^
    [javac] 1 error
 


 
Je me suis dit que je ne devais pas compiler le .java en .class mais si je ne le fais pas alors le jsp ne connait pas l'objet "maClass" comme avant. Donc je laisse le .class dans le package, mais j'obtiens alors l'erreur ci-dessus.
 
Merci d'avance.


Message édité par Machiiine le 17-11-2004 à 20:44:02
Reply

Marsh Posté le 17-11-2004 à 20:59:56    

La commande "java -version" présente dans mon PATH fournit la réponse "1.5.0" alors que la même commande avec le java présent dans le répertoire "C:\Program Files\Java\Sun\AppServer\jdk\jre\bin" fournit "1.4.2_05"  :pt1cable:  
 
Ca fait pas très propre :)
 
Ca viendrait de là ?
 
PS: Pour la remarque sur les noms de classe et de package, ;) c'est justement pour qu'on se comprennent facilement sur ce post.
 
 
EDIT: Résolu, ca vient bien de là. Il faut que j'utilise tout en version 1.4.2_05
 
C'était tout con, mais merci !


Message édité par Machiiine le 17-11-2004 à 21:07:15
Reply

Marsh Posté le 17-11-2004 à 21:10:02    

oui ça vient de là.
dans ton app server, tu dois pouvoir setter le JAVA_HOME qque part... pour lui dire quelle vm utiliser, les classes compilées avec 1.5 n'etant pas utilisables sur une 1.4  
(sauf en utilisant explicitement -target, en encore)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 17-11-2004 à 21:23:49    

J'ai viré tout ce qui était 1.5 chez moi. Ca roule bien maintenant :)

Reply

Marsh Posté le 10-12-2004 à 10:36:48    

MachiiinE a écrit :

La commande "java -version" présente dans mon PATH fournit la réponse "1.5.0" alors que la même commande avec le java présent dans le répertoire "C:\Program Files\Java\Sun\AppServer\jdk\jre\bin" fournit "1.4.2_05"  :pt1cable:  
 
Ca fait pas très propre :)
 
Ca viendrait de là ?
 
PS: Pour la remarque sur les noms de classe et de package, ;) c'est justement pour qu'on se comprennent facilement sur ce post.
 
 
EDIT: Résolu, ca vient bien de là. Il faut que j'utilise tout en version 1.4.2_05
 
C'était tout con, mais merci !


 
je viens d'avoir le même souci.
J'ai choisi de tout passé en 1.5 par contre en updatant mon Tomcat :p
 
question : Pourquoi le problème ce rencontre avec les jsp mais pas avec les servlets ?  
Ils n'utilisent pas le même JRE pour la compilation ?


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 10-12-2004 à 11:05:16    

simogeo a écrit :

je viens d'avoir le même souci.
J'ai choisi de tout passé en 1.5 par contre en updatant mon Tomcat :p
 
question : Pourquoi le problème ce rencontre avec les jsp mais pas avec les servlets ?  
Ils n'utilisent pas le même JRE pour la compilation ?

euh [:petrus75]
 
 
et ils utilisent le meme si tu leur dit d'utiliser le meme. si tu leur dis d'utiliser un different, ben ils utilisent un different, et plop, ça marche plus.


Message édité par the real moins moins le 10-12-2004 à 11:05:27

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-12-2004 à 11:14:03    

the real moins moins a écrit :

euh [:petrus75]
 
 
et ils utilisent le meme si tu leur dit d'utiliser le meme. si tu leur dis d'utiliser un different, ben ils utilisent un different, et plop, ça marche plus.


 
me suis pas trop penché sur le fonctionnement détaillé de tomcat heinnnn.  [:canth]  
uriel il a dit pas tout en même temps! [:itm]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 10-12-2004 à 11:16:39    

bah ça a rien à voir avec tomcat en particulier


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-12-2004 à 11:16:39   

Reply

Marsh Posté le 14-12-2004 à 13:53:14    

MachiiinE a écrit :

La commande "java -version" présente dans mon PATH fournit la réponse "1.5.0" alors que la même commande avec le java présent dans le répertoire "C:\Program Files\Java\Sun\AppServer\jdk\jre\bin" fournit "1.4.2_05"  :pt1cable:  


 
Je me suis déja fais avoir avec ce truc là.
Quand tu installes une JRE l'installeur va aussi mettre un java.exe et un javaw.exe dans un répertoire system (C:\Windows\System32 par exemple)...
 
Maintenant, dès que je fais une installation de JDK ou de JRE, je les vire.
 

Citation :

question : Pourquoi le problème ce rencontre avec les jsp mais pas avec les servlets ?  
Ils n'utilisent pas le même JRE pour la compilation ?


 
Les servlets sont compilées par le JDK que tu as utilisé tandis que, pour les jsp, ton serveur d'applications va compiler les classes générées avec le tools.jar qui correspond à la JRE qui a servi à le lancer.
 
Notez bien la nuance qu'il y a entre JDK et JRE, o fait souvent l'amalgamme entre les 2 car quand tu installes un JDK il installe en plus une JRE ...

Reply

Marsh Posté le 14-12-2004 à 22:18:49    

bidem a écrit :

Je me suis déja fais avoir avec ce truc là.
Quand tu installes une JRE l'installeur va aussi mettre un java.exe et un javaw.exe dans un répertoire system (C:\Windows\System32 par exemple)...
 

euh non, c'est la vm de windows qui est là
(qu'il faut donc en effet virer)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 15-12-2004 à 10:37:20    

the real moins moins a écrit :

euh non, c'est la vm de windows qui est là
(qu'il faut donc en effet virer)


nan nan, c'est bien des exe du JRE de Sun, qui s'ajoute là ...  
(peut être pour écraser la vm de windows d'ailleur ...)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-12-2004 à 21:40:15    

euh c'est récent ça ?
parce que je me souviens avoir eu des tas de pb a cause de java.exe qui étaient là, problèmes qui ont magiquement(?) disparu après effaçage des exe en question !?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 15-12-2004 à 21:42:33    

the real moins moins a écrit :

euh c'est récent ça ?
parce que je me souviens avoir eu des tas de pb a cause de java.exe qui étaient là, problèmes qui ont magiquement(?) disparu après effaçage des exe en question !?


moi aussi ...
j'ai remarqué que je les retrouvais après chaque installation du jdk ...
 
je sais pas exactement comment ils marchent. peut être que ces exe se servent des infos en base de registre pour sélectionner le JRE à utiliser... j'ai jamais trop compris leur intérêt, à part qu'ils soient directement accessible puisque placé dans un rep inclut dans le path


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-12-2004 à 21:43:37    

ouaif; ben pour moi c'est poubelle et reglage du path à la main au cas par cas [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 15-12-2004 à 21:46:33    

the real moins moins a écrit :

ouaif; ben pour moi c'est poubelle et reglage du path à la main au cas par cas [:itm]


tout pareil :)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Sujets relatifs:

Leave a Replay

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