Ajuda com o jsp

8 respostas
thiagobernardo_si

Olá pessoal,

estou tentando realizar um select com um scriplet porem nao estou conseguindo, da uma olhada nos arquivos:

Tenho minha classe de conexao e consulta

Conexao.java

... //conexao com o mysql
public Conexao() {   
  
      try {   
  
         Class.forName("org.gjt.mm.mysql.Driver");   
         con = DriverManager.getConnection("jdbc:mysql://localhost:3306/projeto/","root","senha");   
         stm = con.createStatement();   
  
      } catch (Exception e) {   
         System.out.println("não foi possível conectar ao banco" + e.getMessage());   
      }   
   }
.. //meu metodo de consulta
public void setConsulta() {   
  
      try {   
         res = stm.executeQuery("select * from usuarios");   
      }   
      catch (SQLException e){   
         e.printStackTrace();   
      }   
  
   }   
  
   public ResultSet getResultado() {   
      return res;   
   }   
}   
...
//conexao com o mysql
public Conexao() {

      try {

         Class.forName("org.gjt.mm.mysql.Driver");
         con = DriverManager.getConnection("jdbc:mysql://localhost:3306/projeto/","root","senha");
         stm = con.createStatement();

      } catch (Exception e) {
         System.out.println("não foi possível conectar ao banco" + e.getMessage());
      }
   }

.. //meu metodo de consulta

public void setConsulta() {

      try {
         res = stm.executeQuery("select * from usuarios");
      }
      catch (SQLException e){
         e.printStackTrace();
      }

   }

   public ResultSet getResultado() {
      return res;
   }
}

agora o jsp que esta fazendo a chamada desse metodo:
listar.jsp

try {   
      
     con.setConsulta();   
     ResultSet temp = con.getResultado();   
          
      while (temp.next()){   
      %>   
      <tr>   
          <td width=200>   
               <%out.println(temp.getString("nome"));%>   
         </td>   
          <td width=50>   
               <%out.print(temp.getString("usuario"));%>   
         </td>   
          <td width=30>   
               <%out.print(temp.getString("senha"));%>   
         </td>   
      </tr>   
    <%}   
      
   }catch (Exception e) {   
      out.println("Não foi possivel realizar a listagem: "+ e.getMessage());   
   }   
      
%>  
try {
   
     con.setConsulta();
     ResultSet temp = con.getResultado();
       
      while (temp.next()){
      %>
      <tr>
          <td width=200>
               <%out.println(temp.getString("nome"));%>
         </td>
          <td width=50>
               <%out.print(temp.getString("usuario"));%>
         </td>
          <td width=30>
               <%out.print(temp.getString("senha"));%>
         </td>
      </tr>
    <%}
   
   }catch (Exception e) {
      out.println("Não foi possivel realizar a listagem: "+ e.getMessage());
   }
   
%>
só que quando eh executado ela nao traz nenhum informação, alguem poderia me explicar o que pode estar acontecendo?

vlw...

8 Respostas

Y

Cara, eu não tenho certeza se isso é um bug (muito horrível, pq persiste durante várias versões!!!) ou uma característica dos scriptlets. Eu já tive o mesmo problema que tu. A resolução? Não intercalar código HTML com comandos nos scriptlets diretamente, como tu fizeste no loop:

while (temp.next()){
       %>
       <tr>
           <td width=200>
                <%out.println(temp.getString("nome"));%>
          </td>
           <td width=50>
                <%out.print(temp.getString("usuario"));%>
          </td>
           <td width=30>
                <%out.print(temp.getString("senha"));%>
          </td>
       </tr>
     <%}

Tente usar o out.print para todas as linhas, inclusive pra isso:

out.print("</td>");

Ou seja, código para imprimir todas as linhas onde haja impressão dinâmica de conteúdo.

thiagobernardo_si

Puts que mals heim…

Mas brother valew pela ajuda vou tentar utilizar desta maneita qlqr coisa dou outro post… flw abçs

thiagobernardo_si

Puts, msm colcando dessa forma que vc me passou ainda nao funcionou…

acho que vou ter que desenvolver algum servlets para fazer isso…

mas se alguem ainda souber posta aeee…

vlw…

Y

Cara, é muito provável que haja algum erro de lógica ou alguma coisa em alguma parte do código, seja em conexão com banco de dados ou outra coisa. O problema é que tu estás mandando todas as excesões para o printStackTrace() ou System.out. Acontece que esses métodos e objetos rodam no prompt no console, então as mensagens são enviadas para o mesmo, e não para a tela.

Tu podes fazer duas coisas para procurar e detectar onde está o erro. Uma opção é mais rápida pórém servirá só para esta resolução. A outra solução é um pouquinho mais demorada porém será melhor aproveitada agora e futuramente.

A primeira solução: crie uma classe similar ao teu list.jsp que deve rodar o mesmo código (mas sem as tags HTML) para rodar no prompt do Windows. Posteriormente, rodando esta classe no prompt do Windows, você terá todas as mensagens emitidas pelas classes (incluindo os erros!), e aí sim poderá detectar onde está o erro.

A segunda solução: coloquei cláusulas throws nos teus contrutores e métodos que podem eventualmente liberar excessões. Então, na tua página JSP, coloque o seguinte atributo na tua psge:

<%@ page errorPage="error.jsp" %>

E no arquivo error.jsp você põe o seguinte código:

<%@ pahe isErrorPage="true" %>

<%= e.getClass.getCanonicalName() %>
<br>
<%= e.getMessage() %>

Pronto, agora rode a tua página list.jsp. Caso ocorra alguma excessão (o que é muito provável), a excessão causada será redirecionada para a página error.jsp e esta, por sua vez, irá “imprimir” na tela a classe da excessão (IOException, SQLException, SQLException, etc) e qual a mensagem que a excessão possui (se possuir).

Perceba que a primeira solução pode até ser mais rápida, mas ela só te ajudará nesse caso. Usando a segunda alternativa de criar a página de erro, caso futuramente tu tenhas problemas com o banco de dados ou qualquer coisa com o servidor e afins, o erro será impresso na tela e será mais fácil saber qual o erro lançado e possivelmente o porquê de estar ocorrendo.

Depois posta ae no que deu, flws.

thiagobernardo_si

Ow blz,

vou tentar das duas maneiras para ver o que esta acontecendo… mas ta dificil rsrs… irmao valeu pela ajuda…obrigado mesmo…

flw t+

thiagobernardo_si

Olá novamente,

cara o que foi passado ate agora consegui corrigir o erro, fiz a classe roda sem problemas da seguiente maneira

package conexao;
/**
 * @(#)teste.java
 *
 *
 * @author 
 * @version 1.00 2007/1/12
 */
import java.sql.*;
import conexao.Conexao;


public class Teste {
	public static void main (String[] args){
		Conexao con = new Conexao();	
    	try{
    		
	    	con.setConsulta();
	        ResultSet temp = con.getResultado();
        
         	while (temp.next()){
	       		System.out.print(temp.getString("nome"));
	            System.out.print(temp.getString("usuario"));
	            System.out.print(temp.getString("senha"));
	                       }
		}catch(Exception e){
      	System.out.println("Não foi possivel realizar a listagem: "+ e.getMessage());    
   	  	}  	
	}
	
}

acrecentando apenas

Conexao con = new Conexao();

funcionou corretamente… mas e agora? nao posso utilizar dessa maneira no jsp ok? tenho que utilizar alguma bean? como posso escrever isso no jsp? pois agora sei que os metodos con.setConsulta() e ResultSet temp = con.getResultado(); nao esta sendo localizados pela jsp…

vlw mais uma vez…

Ironlynx

Thiago, dah uma lidinha nessa apostila aqui que suas dúvidas serão sanadas:
http://www.caelum.com.br/caelum/curso-21.jsp
É só fazer o download!!!

Y

Altamente recomendável ler a apostila como o usuário acima citou. Respondendo a tua pergunta: sim, use preferencialmente um bean. &lt;jsp:useBean id="con" scope="page" class="seupacote.Conexao"&gt;

Criado 9 de janeiro de 2007
Ultima resposta 12 de jan. de 2007
Respostas 8
Participantes 3