Eclipse + Tomcat + JSP - Testes Basicos

Pessoal,

Estou estudando a apostila FJ-21 da Caelum e estou com dificuldades sobre JSP chamando classes…

Criei uma classe de teste, MostrarMsg:

[code]package br.caelum.jdbc;

public class MostrarMsg {

void mostrar(){
	System.out.println("Mensagem");
}

}[/code]

e a seguinte JSP:

[code]<%@ page import=“java.util.,br.caelum.jdbc.” %>

<% MostrarMsg msg = new MostrarMsg(); msg.mostrar(); %> [/code]

E tenho o seguinte erro no console do eclipse…

14/04/2008 13:23:24 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 6 in the jsp file: /lista.jsp
MostrarMsg cannot be resolved to a type
3:
4:
5: <%
6: MostrarMsg msg = new MostrarMsg();
7: msg.mostrar();
8: %>
9:

An error occurred at line: 6 in the jsp file: /lista.jsp
MostrarMsg cannot be resolved to a type
3:
4:
5: <%
6: MostrarMsg msg = new MostrarMsg();
7: msg.mostrar();
8: %>
9:

Stacktrace:
at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)

Alguem sabe o q seria???
O Tom cat esta no ar!

Os arquivos .class estão dentro de WEB-INF/classes ??

André Fonseca ,

Deletei meu projeto e criei novamente…
Agora apresento-lhe um novo e classico erro, pelo que busquei no forum…

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

An error occurred at line: 8 in the jsp file: /mostramsg.jsp
MostraMsg cannot be resolved to a type
5:
6:
7: <%
8: MostraMsg mmsg = new MostraMsg();
9: mmsg.mostra();
10: %>
11:

An error occurred at line: 8 in the jsp file: /mostramsg.jsp
MostraMsg cannot be resolved to a type
5:
6:
7: <%
8: MostraMsg mmsg = new MostraMsg();
9: mmsg.mostra();
10: %>
11:

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:423)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.

[/code]

Minha Pagina

[code]<%@ page
import=“java.util.,br.teste.” %>

<%
MostraMsg mmsg = new MostraMsg();
mmsg.mostra();
%>

[/code]

Meu programa

[code]package br.teste;

public class MostrarMsg {

public void mostra() {
	System.out.println("Mensagem");
}

}[/code]

Minha Pagina
Projects\jspteste\web\mostramsg.jsp

Meus .class
Projects\jspteste\web\WEB-INF\classes\br\teste

Você fez o import errado, além disso deve declarar o método mostrar como public

A sua página .jsp fica assim

[code]<%@ page import=“java.util.,br.caelum.jdbc.” %>

<%
MostrarMsg mmsg = new MostrarMsg();
mmsg.mostrar();
%>

[/code]

O método já esta como public e o importa esta certo!!!

Ja meu post anterior… onde eu deletei o projeto e criei outro!

O Tomcat não consegue gerar o .class para a classe que você criou, as configurações das variáveis de ambiente JAVA_HOME, PATH e CLASSPATH estão corretas?? http://www.guj.com.br/java.tutorial.artigo.108.1.guj

Se você declarou o método como public, o import está correto, as classes estão sendo compiladas em WEB-INF/classes tente ver se as variáveis de ambiente estão OK. Para fazer um teste tente compilar o .java dentro do diretório classes usando prompt de comando do DOS, se não funcionar é porque as variáveis de ambiente não estão configuradas corretas…

[]´s

Entao…

A minha classe de teste, MostrarMsg, esta sendo gerada em Projects\jspteste\web\WEB-INF\classes\br\teste
o .class!

Agora fuçando um pouco mais… reparei a a pagina JSP… o .class dela nao esta sendo gerado quando utilizo uma classe externa, como a MostrarMsg.

Veja os diretorios!

[img]


Como eu falei, o arquivo MostrarMsg.class deve ser compilado em web/WEB-INF/classes

Para fazer isso você deve ir em Build Path do Projeto, Source, em Default Output Folder alterar para jspTeste/web/WEB-INF/classes

Para acessar depois a sua pagina de testes vá em http://localhost:8080/jspTeste/mostramsg.jsp

Em anexo um print de como deve ficar a sua estrutura de arquivos - utilize a visão Navigator para isso

[]´s


Tome cuidado com o nome da tua classe.
No JSP tu está chamando MostraMgm, mas o nome da classe é MostrarMgm!!

Quem sabe resolva!

Para mim ao menos funcionou!
Eu estava com um problema parecido, e depois de dar uma olhada neste tópico, consegui rodar!

Boa sorte!!