PDA

View Full Version : [JSP] Non riesco ad importare classi JAVA


soundsgood
14-03-2010, 14:00
Ciao ragazzi, vi scrivo perche non riesco ad importare una classe Java dentro una pagina JSP. Per capirne il perche sto facendo un esempio il piu facile possibile. Intanto vi dico che utilizzo Windows Vista e Tomcat 6 e che Tomcat funziona se faccio pagine html o scrivo quanche jsp che stampa a video qualcosa.

Procedo nel seguente modo:

dentro la cartella Tomcat/webapps/gestione piazzo i seguenti file:

index.jsp il cui codice è:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>

</head>

<body>

<% String stringa = "mm";
Classe classe = new Classe();
stringa = classe.metodo();
out.print(stringa);
%>

</body>
</html>



Classe.class il cui sorgente è:

public class Classe {

public String metodo() {

return "funziona";
}
}


quando sul browser digito: http://localhost:8080/gestione/index.jsp e mi da il seguente messaggio

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 18 in the jsp file: /index.jsp
Classe cannot be resolved to a type
15: <%@ page import = "java.util.*, java.text.*, Classi.*, java.net.*, java.rmi.*, javax.xml.namespace.*, javax.xml.rpc.*, org.apache.axis.client.Call, org.apache.axis.client.Service, org.apache.axis.encoding.ser.*, java.io.*, org.jdom.Document, org.jdom.Element, org.jdom.output.Format, org.jdom.output.XMLOutputter, org.jdom.*, org.jdom.input.*" %>
16:
17: <% String stringa = "mm";
18: Classe classe = new Classe();
19: stringa = classe.metodo();
20: out.print(stringa);
21: %>


An error occurred at line: 18 in the jsp file: /index.jsp
Classe cannot be resolved to a type
15: <%@ page import = "java.util.*, java.text.*, Classi.*, java.net.*, java.rmi.*, javax.xml.namespace.*, javax.xml.rpc.*, org.apache.axis.client.Call, org.apache.axis.client.Service, org.apache.axis.encoding.ser.*, java.io.*, org.jdom.Document, org.jdom.Element, org.jdom.output.Format, org.jdom.output.XMLOutputter, org.jdom.*, org.jdom.input.*" %>
16:
17: <% String stringa = "mm";
18: Classe classe = new Classe();
19: stringa = classe.metodo();
20: out.print(stringa);
21: %>


Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:589)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.24 logs.

ps: in precedenza ho provato a mettere il .class dentro C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\WEB-INF ed utilizzare la direttiva import ma dava lo stesso messaggio.

Non so quando ci possa entrare qui le cartelle dove mettere il .class e la variabile d'ambiente classpath o qualche file di configurazione xml

aspetto vostri suggerimenti

lovaz
14-03-2010, 14:40
Le classi compilate non andrebbero in
WEB-INF/classes/
?

khelidan1980
14-03-2010, 16:18
ma hai fatto tramite eclipse? Sciegliendo dynamic web project?In tal caso non devi spostare niente ti fai lui il war da deployare su tomcat,e se lo hai aggiunto come runtime fa tutto da solo

soundsgood
14-03-2010, 19:05
Faccio tutto a mano. Non vorrei usare nessun programma che fa "da tramite" .

Per quanto riguarda la cartella "WEB-INF/classes/" si intende quale delle due?

- " Tomcat 6.0\webapps\ROOT\WEB-INF\classes"

oppure

- "Tomcat 6.0\webapps\gestione\WEB-INF\classes"

(gestione è la classe dove ho i miei file)


Inoltre questa classe (quella giusta tra le due) va messa nella variabile classpath di ambiente?

nerthase
14-03-2010, 22:07
Ciao, i file .class già compilati vanno nella cartella WEB-INF/classes/ relativa al tuo progetto, quindi la seconda opzione che hai detto.

Successivamente, nella pagina JSP devi importare le classi che ti sono necessarie, ad esempio, come prima istruzione JSP, io farei:

<%@page import="package1.package2.Classe"%>

Sostituendo il percorso della classe con i valori opportuni del tuo caso.
Non devi modificare in nessun caso le variabili d'ambiente. Ci manca solo che per un semplice programma ci sia bisogno di modificare così tanto... :D

soundsgood
15-03-2010, 10:41
come suggerito ho messo il file Classe.class dentro la cartella

\Tomcat 6.0\webapps\gestione\WEB-INF\classes

Il codice sorgente della classe è quello postato sopra, senza nessuna dichiarazione di package, quindi non ho fatto la import e non funziona, il codice di errore è sempre quello postato sopra.

Dovrei fare la import?
Quando faccio la import Tomcat sa di default che deve vedere dentro "gestione\WEB-INF\classes" ? Se fosse cosi dovrebbe funzionare senza la import perche non ci sono package

Aspetto suggerimenti..

soundsgood
15-03-2010, 11:12
Adesso funziona.. non so che ho fatto di preciso. Comunque ho messo il file Classe.class dentro

\Tomcat 6.0\webapps\gestione\WEB-INF\classes senza usare la import, poiche non ho dichiarato nessun package ed il file lo ho messo direttamente dentro classes

soundsgood
15-03-2010, 15:31
correggo quanto ho detto sopra. Stranamente devo mettere un package nel file class (dichiararlo nel codice sorgente prima di compilarlo), poi mettere il file .class in ..classes\package e fare la import <%@ page import = "package.*" %>
altrimenti non funziona

vi è capitato?

nerthase
15-03-2010, 19:58
Ciao, sono contento che hai risolto.

Scusami se ho dato per scontato l'uso dei package, ma io non ne faccio mai a meno. Ti consiglio di fare altrettanto, di usare sempre almeno un package.

Per quanto riguarda il fatto di non usare Eclipse o simili, mi trovi in disappunto... Ti consiglio vivamente Eclipse o l'IDE con il quale ti trovi meglio... Una volta stabilito un rapporto... non potrai più farne a meno... :D

Se vuoi maggiori informazioni contattami pure..

A presto

soundsgood
16-03-2010, 21:32
Ti ringrazio. L'unica ragione per cui non uso questi programmi è che ogni volta che voglio fare qualcosa di semplice ecc bisogna creare progetti ecc.. e mi ci mette in mezzo file e cartelle che non so neanche a cosa servono..

Facendo a mano capisco meglio i meccanismi di come strutturare le cose.

Comunque per editare file html e jsp ecc uso dreamweaver o netbeans, ma li creo dall'esterno se uso netbeans.

il tuo dovrei provarlo

nerthase
16-03-2010, 22:30
Ok. In effetti anche io per i file in cui faccio piccole prove, o piccoli progetti, non uso un IDE. Mi limito ad usare TextMate su Mac, che mi evidenzia la sintassi e mi compila automaticamente.

Comunque se serve altro aiuto, puoi trovarmi su www.nerthase.com (http://www.nerthase.com). Risponderò sicuramente più velocemente che non qui sul forum.

A presto

MarvivrA
23-08-2010, 07:49
ma una volta importate le classi possono essere istanziate ed utilizzate senza necessariamente adottare la tecnologia javabean?

MarvivrA
26-08-2010, 10:35
ma una volta importate le classi possono essere istanziate ed utilizzate senza necessariamente adottare la tecnologia javabean?

nessuno?