Utilisation de classes personnelles [JSP] - Java - Programmation
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.
Marsh Posté le 17-11-2004 à 20:42:03
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à .
|
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.
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"
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 !
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)
Marsh Posté le 17-11-2004 à 21:23:49
J'ai viré tout ce qui était 1.5 chez moi. Ca roule bien maintenant
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" |
je viens d'avoir le même souci.
J'ai choisi de tout passé en 1.5 par contre en updatant mon Tomcat
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 ?
Marsh Posté le 10-12-2004 à 11:05:16
simogeo a écrit : je viens d'avoir le même souci. |
euh
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.
Marsh Posté le 10-12-2004 à 11:14:03
the real moins moins a écrit : euh |
me suis pas trop penché sur le fonctionnement détaillé de tomcat heinnnn.
uriel il a dit pas tout en même temps!
Marsh Posté le 10-12-2004 à 11:16:39
bah ça a rien à voir avec tomcat en particulier
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" |
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 ? |
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 ...
Marsh Posté le 14-12-2004 à 22:18:49
bidem a écrit : Je me suis déja fais avoir avec ce truc là. |
euh non, c'est la vm de windows qui est là
(qu'il faut donc en effet virer)
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à |
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 ...)
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 !?
Marsh Posté le 15-12-2004 à 21:42:33
the real moins moins a écrit : euh c'est récent ça ? |
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
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
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 |
tout pareil
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.
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
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