Em que pasta colocar as classes(bean)

13 respostas
K

Estou com um erro quando estou tentando usar um javabean. tenho um html que “chama” um arquivo jsp conforme abaixo:

<%@page import="recursos.*" %>
<jsp:useBean class="recursos.Cesta" id="minhaCesta" scope="session"/>
<%
    if(request.getParameter("acao").equals("add"))
      {
         String descr=request.getParameter("Pizza");
         String tam=request.getParameter("Tamanho");
         float pr=Float.parseFloat(request.getParameter("Preco"));
         minhaCesta.adicionarPizza(descr,tam,pr);
      }
      else if(request.getParameter("acao").equals("del"))
      {
          int indice=Integer.parseInt(request.getParameter("Indice"));
      }
      float total=0;
%>
<html>
<head>
<title> Pizzaria</title>
</head>
<body>

Quando executo este arquivo através da página html me dá o seguinte erro.

[list]type Exception report

message

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

exception

org.apache.jasper.JasperException: /projeto/jsp/cesta.jsp(2,0) The value for the useBean class attribute recursos.Cesta is invalid.

org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)

org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:405)

org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:146)

org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1223)

org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1116)

org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)

org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)

org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)

org.apache.jasper.compiler.Node$Root.accept(Node.java:456)

org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)

org.apache.jasper.compiler.Generator.generate(Generator.java:3268)

org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:189)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)

org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:556)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:296)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

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

[/list]

Já inseri o arquivo Cesta.java (meu bean) dentro das seguintes pastas
ROOT/projeto/jsp/recursos/Cesta.jsp
ROOT/projeto/jsp/WEB-INF/recursos/Cesta.jsp
ROOT/projeto/WEB-INF/recursos/Cesta.jsp

e até agora não deu certo, onde exatamente tenho que colocar o arquivo Cesta.jsp?
Me parece que ele não encontra o arquivo, ou tem algima coisa errada no código[/code]

13 Respostas

E

eae blz?

cara o problema não é com o local do jsp
mas sim com a sua classe…

o arquivo .class :wink:

<%@page import="recursos.*" %>
<jsp:useBean class="recursos.Cesta" id="minhaCesta" scope="session"/>

segundo este código aki o seu bean teria que estar localizado:

.../
    WEB-INF/
         recursos/
             Cesta.class
             ( Cesta.java pode estar aki tambem )

se sua classe do bean compilada estiver nesse local entaum vai funcionar
a principio :wink:

qq coisa soh falar

[]´s

D

anjoSupremo,

as classes em uma estrutura web só são enchergadas se estiverem abaixo da estrutura:

WEB-INF
       |- classes
               |- recursos
                       |- aqui os .class dele

estou errado?

K

Ainda não deu. Fiz o seguinte, gerei o Cesta.class e o coloquei em

C:\TOMCAT\Tomcat 5.5\webapps\ROOT\projeto\WEB-INF\classes\recursos

e também em

C:\TOMCAT\Tomcat 5.5\webapps\ROOT\WEB-INF\classes\recursos

o arquivo cesta.jsp que chama Cesta.class está em

C:\TOMCAT\Tomcat 5.5\webapps\ROOT\projeto\jsp

o erro continua o mesmo, não é problema de onde colocar?

Poderia então me dar outra opinião?

D

não é dentro de ROOT não, é só dentro de TOMCAT\webapps

K

Entaão eu devo criar uma pasta WEB-INF dentro de TOMCAT\webapps, pois esta pasta não existe.

E

hehe

vlws diogoacl

eu eskeci mesmo de referenciar a pasta classes :roll:

dentro de webapp do tomcat

projeto/
   ...
   arquivos *jsp
   outros arquivos caso necessário
   ...
   WEB-INF/
      ...
      web.xml
      outros arquivos de configuração *xml caso necessário
      obs.: ainda pode conter outras subpastas como acontece com a estrutura de uma aplicação em struts
      ...
      classes/
         ...
         nesta pasta colocar os seus pacotes como no caso seria:
         recursos/
            Cesta.class
         ...
      lib/
         ...
         colocar os seus jar´s que vc utilizará na pagina
         ...

onde projeto é o nome de sua aplicação (isso por default do tomcat)

seria essa a estrutura basica de uma aplicação jsp para o tomcat
e tambem pelo que eu sei é utilizada como um padrão para outros servidores, mesmo sabendo que existe alguns que naum seguem
totalmente esta conveção de estruta

[]´s

G

hum… :roll:

webapps

  • sua aplicação (nesse nível ficam os JSPs)
    - WEB-INF (nesse nível fica o web.xml)
    • classes (.class)
    • lib (jars)
    • src (.java)

:wink:

K

Pessoal, as coisas estão ficando um pouco mais complicadas agora, pelo menos para mim. Sempre estou executando os códigos JSP dentro da pasta
ROOT/projeto/jsp

ou seja, no endereço (URL) coloco http://localhost:8080/projeto/jsp/arquivo.jsp e de lá direciono para outros arquivos que estão em uma pasta dentro da pasta projeto que está dentro da pasta ROOT. Se eu for executar um arquivo JSP sem estar na pasta projeto, então coloco-o dentro da pasta ROOT e tentar colocar o endereço http://localhost:8080/Arquivo.jsp na url, pois é ele não acha o arquivo. Agora quando eu o coloco dentro do ROOT ele acha o arquivo digitando http://localhost:8080/Arquivo.jsp. Alguem poderia dar com detalhes as pastas que tenho que criar e onde exatamente fica cada arquivo.

Só para dar maiores detalhes fiz o seguinte
criei as pastas WEB-INF, classes, src dentro de webapps coloquei o arquivo .java dentro do src coloquei meu arquivo html que chama o arquivo jsp dentro de webapps coloquei o arquivo .class dentro de classes. no entanto não consigo ne chamar o arquivo html. Acredito que deve ser alterado alguma coisa no arquivo xml, não?

K

AnjoSupremo

em relação ao que descreveu tenho a seguinte situação

[list]
ROOT/
projeto/
html/

arquivos *.html
jsp/ …
arquivos *jsp
outros arquivos caso necessário

WEB-INF/

web.xml
outros arquivos de configuração *xml caso necessário
obs.: ainda pode conter outras subpastas como acontece com a estrutura de uma aplicação em struts

classes/

nesta pasta colocar os seus pacotes como no caso seria:
recursos/
Cesta.class

lib/

colocar os seus jar´s que vc utilizará na pagina

[/list]

É exatamente isso que tenho de pastas.

E

eae blz

bom pela estrutura que tu descreveu ai

testa o seguinte modificação o local da pasta projeto
retire de dentro da pasta ROOT
e coloque direto dentro da pasta webapps

achu que soh isso jah resolve toda questão inicial

depois que tu testar isso ai comenta se funcionou,
se aconteceu algum erro, … :wink:

fazendo isso o endereço ainda ficara o mesmo
http://localhost:8080/projeto/jsp/arquivo.jsp

[]´s

K

Melhorou, tirei a pasta projeto de dentro de ROOT e a coloquei em webapps. chamndo pelo endereço http://localhost:8080/projeto/html/pizza.html, a página é mostrada. quando clico no link para chamar o arquivo cesta.jsp me dá o seguinte erro

[list]type Exception report

message

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

exception

javax.servlet.ServletException: recursos/Cesta (wrong name: resursos/Cesta)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:253)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NoClassDefFoundError: recursos/Cesta (wrong name: resursos/Cesta)

java.lang.ClassLoader.defineClass1(Native Method)

java.lang.ClassLoader.defineClass(ClassLoader.java:620)

java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)

org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1626)

org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:850)

org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1299)

org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1181)

org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1210)

org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1116)

org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)

org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)

org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)

org.apache.jasper.compiler.Node$Root.accept(Node.java:456)

org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)

org.apache.jasper.compiler.Generator.generate(Generator.java:3268)

org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:189)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)

org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:556)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:296)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

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

[/list]

Criei uma pasta chamada classes em webapps e dentro desta criei outra pasta recursos onde está o arquivo Cesta.class.

Acho que agora estamos caminhando. O que devo fazer agora?
criar uma pasta WEF-INF dentro de webapps e lá criar a pasta classes e dentro desta a pasta recurso onde devo colocar o arquivo Cesta.class?

K

tinha um erro de digitação resusos, eu arrumei esta chamando a classe, agora preciso acertar algumas coisas e se não der certo eu continuo

K

Só para finalizarmos de vez este assunto, vou deixar aqui como ficou composto minhas pastas dentro do TOMCAT. Talvés seja interessante para outras pessoas o desfecho deste assunto

Pasta weapps
---------|_projeto
-------------|_html
-------------|_jsp
-------------|_WEB-INF
-------------------|_classes
------------------------|_recursos (coloquei o arquivo bean Cesta.class)

desta forma funcionou legal.

Criado 18 de maio de 2005
Ultima resposta 23 de mai. de 2005
Respostas 13
Participantes 4