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 :
- <%@ page import="java.util.ArrayList" %>
- <%! 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 :
- public class MaClass{
- int monInt;
- public MaClass(){
- monInt = 5;
- }
- public int getMonInt(){
- return monInt;
- }
- }
|
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