Problemas na compilação: Eclipse 3.4EE + Tomcat 5.5

4 respostas
ricardo.cocati

Boa tarde Amigos,

Estou tendo problemas na compilação de um JSP que estou desenvolvendo, não tenho certeza se é algo relacionado ao Banco de Dados ,alguma configuração no TomCat ou meu programa está escrito de forma errada.
Sempre que vou tentar compilar meu programa ele apresenta os seguintes erros quando vou tentar inserir um usuário ou listar, pesquisei aqui e em alguns outros fóruns e não consegui identificar a causa.
Segue abaixo lista de erros:

org.apache.jasper.JasperException: Exception in JSP: /lista_usuario.jsp:8

5: <jsp:getProperty name="usuario" property="senha"/>
6: <jsp:getProperty name="usuario" property="estabelecimento_idEstabelecimento"/>
7: <%
8: usuarioDAO.todosUsuarios(usuario);
9: %>
10: <html>
11: <head>


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause 

javax.servlet.ServletException: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
	org.apache.jsp.lista_005fusuario_jsp._jspService(lista_005fusuario_jsp.java:150)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause 

java.lang.Exception: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
	estacionamento.UsuarioDAO.todosUsuarios(UsuarioDAO.java:129)
	org.apache.jsp.lista_005fusuario_jsp._jspService(lista_005fusuario_jsp.java:75)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause 

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
	com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3279)
	com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3263)
	com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3305)
	com.mysql.jdbc.PreparedStatement.setInt(PreparedStatement.java:3249)
	estacionamento.UsuarioDAO.todosUsuarios(UsuarioDAO.java:121)
	org.apache.jsp.lista_005fusuario_jsp._jspService(lista_005fusuario_jsp.java:75)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

Segue também o arquivo jsp e parte do código do meu UsuarioDAO:

Codigo do lista_usuario.jsp

<%@page import="estacionamento.*"%>
<jsp:useBean id="usuario" class="estacionamento.Usuario"/>
<jsp:useBean id="usuarioDAO" class="estacionamento.UsuarioDAO"/>
<jsp:getProperty name="usuario" property="login"/>
<jsp:getProperty name="usuario" property="senha"/>
<jsp:getProperty name="usuario" property="estabelecimento_idEstabelecimento"/>
<%
usuarioDAO.todosUsuarios(usuario);
%>
<html>
<head>
    <link rel="stylesheet" href="images/Underground.css" type="text/css" />
<title>Lista Usuario</title>
</head>
	<body>
        <!-- wrap starts here -->
        <div id="wrap"><!-- header -->
            <div id="header"> <span id="slogan">O logo do projeto &eacute; aqui porra!!!!!!</span><!-- tabs -->
            </div>
            <div id="header-logo">
                <div id="logo">Estaciona<span class="red">Mento1.0</span></div>
            </div>
            <div id="sidebar">
				<!-- Início menu -->
				<jsp:include page="menu.jsp" flush="true"/>
                <!-- Fim menu -->
				<h1>Texto livre</h1>
                <div class="left-box">
                    <p>Sistema de gerenciamento para estacionamento desenvolvido nas linguagens:</p>
                    <p><a href="">JAVA</a></p>
                    <p><a href="">JSP</a></p>
                    <p><a href="">JavaScript</a></p>
                    <p><a href="">MySQL</a></p>
                    <p><a href="">CSS</a></p>
                    <p><a href="">Ajax</a></p>
                </div>
                <br />
            </div>
            <div id="main">
			<table border="1">
			    <thead>
			        <tr>
			            <th>Id do Usuario</th>
			            <th>Login</th>
			            <th>Senha</th>
			            <th>Id Estabelecimento</th>
			        </tr>
			    </thead>
			    <tbody>
			        <tr>
			            <td>${usuario.getIdUsuario}</td>
			            <td>${usuario.getLogin}</td>
			            <td>${usuario.getSenha}</td>
			            <td>${usuario.getEstabelecimento_idEstabelecimento}</td>
			        </tr>
			    </tbody>
			</table>
			</div>
            <br />
        </div>
        <!-- footer starts here -->
        <div class="footer">
            <p> &copy; 2008 <strong><a href="http://www.fated.edu.br/">Fated</a></strong> </p>
        </div>
    </body>
</html>

Parte do UsuarioDAO

/**
     * Método que retorna todos os usuarios.
     * @return objeto List
     * @throws java.lang.Exception Se não for possível retornar o objeto List.
     */
	@SuppressWarnings("unchecked")
	public List todosUsuarios(Usuario usuario) throws Exception{
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        
        try{
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM usuario");
            
            rs = ps.executeQuery();
            
            List<Usuario> list = new ArrayList<Usuario>();
            
            while(rs.next()){
            	ps.setInt(1, usuario.getIdUsuario());
                ps.setString(2, usuario.getLogin());
                ps.setString(3, usuario.getSenha());
                list.add(new Usuario(rs.getInt("idUsuario"), rs.getString("login"), rs.getString("senha"), rs.getInt("Estabelecimento_idEstabelecimento")));
            }
            return list;
            
        }catch(SQLException sqle){
            throw new Exception(sqle);
        }finally{
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }

Será que alguem poderia me ajudar a entender o que pode estar acontecendo de errado, um tutorial alguma coisa.

Desde já agradeço muito a atenção de todos.

4 Respostas

Andre_Fonseca

oi

segundo o log o erro está acontecendo em

estacionamento.UsuarioDAO.todosUsuarios(UsuarioDAO.java:129)

acho que o problema é no seu método todosUsuarios

tenta mudar para algo assim

public List todosUsuarios() throws Exception{  
         PreparedStatement ps = null;  
         Connection conn = null;  
         ResultSet rs = null;  
           
         try{  
             conn = this.conn;  
             ps = conn.prepareStatement("SELECT * FROM usuario");  
               
             rs = ps.executeQuery();  
               
             List&lt;Usuario&gt; list = new ArrayList&lt;Usuario&gt;();  
               
             while(rs.next()){  
                 Usuario = new Usuario();
                 usuario.setId(rs.getInt("idUsuario"));
                 usuario.setLogin(rs.getString("login"));
                 usuario.setSenha(rs.getString("senha"));
                 usuario.setEstabelecimentoId(rs.getInt("Estabelecimento_idEstabelecimento"));
                 list.add(usuario);  
             }  
             return list;  
               
         }catch(SQLException sqle){  
             throw new Exception(sqle);  
         }finally{  
             ConnectionFactory.closeConnection(conn, ps, rs);  
         }  
     }
ricardo.cocati

Muito obrigado André, antes de mais nada!!!

Fiz as alterações que me ensinou e ele ainda apresenta um pequeno problema ele está retornando tudo como null, veja a alteração que fiz:

@SuppressWarnings("unchecked")
	public List todosUsuarios(Usuario usuario) throws Exception{    
         PreparedStatement ps = null;    
         Connection conn = null;    
         ResultSet rs = null;    
             
         try{    
             conn = this.conn;    
             ps = conn.prepareStatement("SELECT * FROM usuario");    
                 
             rs = ps.executeQuery();    
                 
             List<Usuario> list = new ArrayList<Usuario>();    
                 
             while(rs.next()){    
                 usuario = new Usuario();
                 rs.getInt("idUsuario");
                 usuario.setLogin(rs.getString("login"));  
                 usuario.setSenha(rs.getString("senha"));  
                 usuario.setEstabelecimento_idEstabelecimento(rs.getInt("Estabelecimento_idEstabelecimento"));  
                 list.add(usuario);    
             }    
             return list;    
                 
         }catch(SQLException sqle){    
             throw new Exception(sqle);    
         }finally{    
             ConnectionFactory.closeConnection(conn, ps, rs);    
         }    
     }

E ao compilar ele me traz o lista_usuário.jsp com a mensagem no topo de null, sendo que há dados no banco inseridos

null null 0

O que posso estar fazendo de errado, agora parece ser um erro na lógica do meu lista_usuario.jsp…

Andre_Fonseca

Oi

Eu acho que agora o problema não é mais no método todosUsuarios mas em como você chama ele
Não entendi porque esse método precisa receber como parâmetro um Usuário, já que ele vai listar todos

Para ter certeza faça um teste unitário, ou seja, faça uma Main de teste que chama apenas o método todosUsuarios e imprime os valores, se retornar a lista preenchida é porque o problema é na JSP

Caso você já não conheça baixe a apostila da caelum que mostra como você usar JSTL vai ficar mais simples você interar na lista

basicamente você faria algo assim

# para usar as tags do core JSTL
&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %&gt;
# para instanciar o usuarioDAO como você já está fazendo
&lt;jsp:useBean id="usuarioDAO" class="estacionamento.UsuarioDAO"/&gt;
# para interar na lista usando foreach/JSTL
&lt;c:forEach var="usuario" items="${usuarioDAO.todosFuncionarios}"&gt;
<li>${usuario.id}, ${usuario.login}: ${usuario.senha}</li>
&lt;/c:forEach&gt;

só que para isso você deve alterar o nome do seu método para getTodosFuncionarios, ou então chame de getListaFuncionarios e na hora de interar na lista use items="${usuarioDAO.listaFuncionarios}"

ricardo.cocati

Bom dia André,

Desculpe a demora em responder, mas eu já resolvi meu problema, meu professor ajudou.
Veja a solução:

Criei no UsuarioDAO.java essa classe para a lista:

/**
 * A classe <B>UsuarioDAO</B> cria o CRUD necessário para manipular a tabela usuario
 * @author Ricardo Cocati
 * @since 11/09/2008
 * @version 1.0
 */
public class UsuarioDAO{
    
	List<Usuario> list;
	public static Usuario usuario;
	int posicao;
	
	public boolean next(){
		posicao++;
		if (posicao > list.size() - 1){
			return false;
		}else{
			getNextUsuario(posicao);
			return true;
		}
	}
	
	public void getNextUsuario(int posicao){
		usuario = list.get(posicao);
	}
	
    private Connection conn;
    /**
     * Método construtor que se conecta ao banco de dados
     * @throws java.lang.Exception Se não houver conexão com o banco de dados.
     */
    public UsuarioDAO() throws Exception{
        try{
            this.conn = ConnectionFactory.getConnection();
            
    		usuario = new Usuario();
    		posicao = 0;
    		list = new ArrayList<Usuario>();             
            
        }catch(Exception e){
            throw new Exception("Erro: "+":\n"+e.getMessage());
        }
    }
(.........)

/**
     * Método que retorna todos os usuarios.
     * @return objeto List
     * @throws java.lang.Exception Se não for possível retornar o objeto List.
     */
	@SuppressWarnings("unchecked")
	public List todosUsuarios(Usuario usuario) throws Exception{
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        
        try{
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM usuario");
            
            rs = ps.executeQuery();
            
            while(rs.next()){
                list.add(new Usuario(rs.getInt("idUsuario"), rs.getString("login"), rs.getString("senha"), rs.getInt("Estabelecimento_idEstabelecimento")));
            }
            posicao = -1;
            return list;
            
        }catch(SQLException sqle){
            throw new Exception(sqle);
        }finally{
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }

E por fim no JSP:

<%@page import="estacionamento.*"%>
<jsp:useBean id="usuario" class="estacionamento.Usuario"/>
<jsp:useBean id="usuarioDAO" class="estacionamento.UsuarioDAO"/>
<html>
<head>
    <link rel="stylesheet" href="images/Underground.css" type="text/css" />
    <title>Lista Usuario</title>
</head>
    <body>
        <!-- wrap starts here -->
        <div id="wrap"><!-- header -->
            <div id="header"> <span id="slogan">O logo do projeto &eacute; aqui porra!!!!!!</span><!-- tabs -->
            </div>
            <div id="header-logo">
                <div id="logo">Estaciona<span class="red">Mento1.0</span></div>
            </div>
            <div id="sidebar">
				<!-- Início menu -->
				<jsp:include page="menu.jsp" flush="true"/>
                <!-- Fim menu -->
				<h1>Texto livre</h1>
                <div class="left-box">
                    <p>Sistema de gerenciamento para estacionamento desenvolvido nas linguagens:</p>
                    <p><a href="">JAVA</a></p>
                    <p><a href="">JSP</a></p>
                    <p><a href="">JavaScript</a></p>
                    <p><a href="">MySQL</a></p>
                    <p><a href="">CSS</a></p>
                    <p><a href="">Ajax</a></p>
                </div>
                <br />
            </div>
			<div id="main">
			<table border="1">
			    <thead>
			        <tr>
			            <th>Id do Usuario</th>
			            <th>Login</th>
			            <th>Senha</th>
			            <th>Id Estabelecimento</th>
			        </tr>
			    </thead>
			    <tbody>
					<%
					usuarioDAO.todosUsuarios(usuario);
					while (usuarioDAO.next()){
					%>
			        <tr>
						<td><%=UsuarioDAO.usuario.getIdUsuario()%></td>
			            <td><%=UsuarioDAO.usuario.getLogin()%></td>
			            <td><%=UsuarioDAO.usuario.getSenha()%></td>
			            <td><%=UsuarioDAO.usuario.getEstabelecimento_idEstabelecimento()%></td>
			        </tr>
					<%
					}
					%>
			    </tbody>
			</table>
			</div>
		</div>
	</body>
</html>

Gostaria muito de agradecer sua atenção em tentar me ajudar, e aproveitar para parabenizar o fórum pela seriedade de seus participantes que é de suma importancia para o crescimento de todos que dela fazem parte.
Muito obrigado á todos!!!

Criado 28 de setembro de 2008
Ultima resposta 4 de out. de 2008
Respostas 4
Participantes 2