Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

JSP

Boa noite pessoal, estou aprendendo Java a poucos dias e tentei fazer uma tela de login e senha junto com um formulário, mas ao listar todos os contatos está dando erro. Vou enviar o código( me desculpem se estiver algo grosseiro no código)

lista.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%@ page import="java.util.*,
br.com.projeto.mercadoria.dao.ContatoDao.*,
br.com.projeto.mercadoria.produto.*," %>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<table>
<% MercadoriaDao dao = new MercadoriaDao();
    List<Mercadoria> mercadorias = dao.getLista();

    for (Mercadoria mercadoria : mercadorias){
    %>
    <tr> 
    <td><%=mercadoria.getCod_mercadoria() %></td>
    <td><%=mercadoria.getNome_mercadoria() %></td>
    <td><%=mercadoria.getTipo_mercadoria() %></td>
    <td><%=mercadoria.getQuantidade() %></td>
    <td><%=mercadoria.getTipo_negocio() %></td>
    <td><%=mercadoria.getPreco() %></td>
    <td><%=mercadoria.getData() %></td>
    </tr>
    <%
    }
    %>
    </table>
</body>
</html>

O Erro está no getLista();

e também não consegui conectar o eclipse com o meu banco de dados, tentei fazer a conexão com . class e não com .JSP, tem algum problema isso?

7 respostas

Oi Aline, tudo bom?

Que erro está acontecendo no seu código?

Não tem problema nenhum fazer a conexão dentro de arquivos .java, na verdade o ideal é que você coloque todo o código Java (import de classes, instanciação de objetos, etc) dentro de classe mesmo ao invés de deixá-lo na JSP.

Dá uma olhadinha depois no curso de JSTL (https://cursos.alura.com.br/course/jstl) para você conseguir tirar todos os Scriptlets (essas coisas com <% ... %>) da sua JSP.

Abraço!

Olá Joviane, boa noite vou estudar esse material que me enviou obrigada! vou colocar abaixo os erros. org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: [17] in the generated java file: [C:\Program Files\apache-tomcat-7.0.68-windows-x64\apache-tomcat-7.0.68\work\Catalina\localhost\mercadoria\org\apache\jsp\lista_jsp.java]
Syntax error on token "import", Name expected after this token

An error occurred at line: 15 in the jsp file: /lista.jsp
The method getLista() is undefined for the type MercadoriaDao
12: <body>
13: <table>
14: <% MercadoriaDao dao = new MercadoriaDao();
15:     List<Mercadoria> mercadorias = dao.getLista();
16:     
17:     for (Mercadoria mercadoria : mercadorias){
18:     %>

Stacktrace:

org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:490)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:379)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:341)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:662)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:364)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.apache.jsp.listadecontatos_jsp._jspService(listadecontatos_jsp.java:117)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Oi Aline,

Notei duas coisas na sua JSP:

<%@ page import="java.util.*,
br.com.projeto.mercadoria.dao.ContatoDao.*,
br.com.projeto.mercadoria.produto.*," %>

No seu import tem uma vírgula a mais ali depois do import do pacote produto. Isto está causando o erro de sintaxe do primeiro erro.

Já o segundo erro, sua JSP não está encontrando o método getLista da classe MercadoriaDao. Esta classe está em algum dos pacotes importados acima? O método getLista está realmente criado dentro da classe MercadoriaDao? Se sim, posta aqui esta classe para darmos uma olhadinha.

Abraço!

MercadoriaDao.jsp

package br.com.projeto.mercadoria.dao.ContatoDao;

import java.io.IOException;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.projeto.mercadoria.produto.Mercadoria;  

    public class MercadoriaDao extends HttpServlet{

        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            super.service(request, response);
        }
        private static Connection connection;           
        private static PreparedStatement pstmt = null;

        public MercadoriaDao () throws SQLException {  
            connection = new connection.getConnection(); 
        }
        public static boolean insere(Mercadoria mercadoriabean) {  

            try {  

                pstmt = connection.prepareStatement("insert into produtos (cod_mercadoria, nome_mercadoria, tipo_mercadoria, quantidade, preco, tipo_negocio, data) Values(?,?,?,?,?,?,?,?)");

                pstmt.setInt(1, mercadoriabean.getCod_mercadoria());  
                pstmt.setString(2, mercadoriabean.getNome_mercadoria());  
                pstmt.setString(3, mercadoriabean.getTipo_mercadoria());  
                pstmt.setFloat(4, mercadoriabean.getQuantidade());  
                pstmt.setInt(5, mercadoriabean.getPreco());  
                pstmt.setString(6, mercadoriabean.getTipo_negocio());  
                pstmt.setDate(7, new Date( mercadoriabean.getData().getTimeInMillis()));  
                pstmt.executeUpdate();  



                pstmt.close();  
                return true;  
            } catch (Exception e) {  
                e.printStackTrace();  
                System.out.println(e.toString());  
                return false;  
            }  
        }  
    }  
        rs.close();  
        stmt.close();  
        return _lista;  
}  
    }

Lista.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%@ page import="java.util.*,
br.com.projeto.mercadoria.dao.ContatoDao.*,
br.com.projeto.mercadoria.produto.*" %>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<table>
<% MercadoriaDao dao = new MercadoriaDao();
    List<Mercadoria> mercadorias = dao.getLista();

    for (Mercadoria mercadoria : mercadorias){
    %>
    <tr> 
    <td><%=mercadoria.getCod_mercadoria() %></td>
    <td><%=mercadoria.getNome_mercadoria() %></td>
    <td><%=mercadoria.getTipo_mercadoria() %></td>
    <td><%=mercadoria.getQuantidade() %></td>
    <td><%=mercadoria.getTipo_negocio() %></td>
    <td><%=mercadoria.getPreco_mercadoria() %></td>
    <td><%=mercadoria.getData() %></td>
    </tr>
    <%
    }
    %>
    </table>
</body>
</html>

Desculpa saiu destorcido, vou enviar novamente

MercadoriaDao.jsp

package br.com.projeto.mercadoria.dao.ContatoDao;

import java.io.IOException; import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.SQLException;

import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

import br.com.projeto.mercadoria.produto.Mercadoria;

public class MercadoriaDao extends HttpServlet{

@Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub super.service(request, response); } private static Connection connection; private static PreparedStatement pstmt = null;

public MercadoriaDao () throws SQLException { connection = new connection.getConnection(); } public static boolean insere(Mercadoria mercadoriabean) {

try {

pstmt = connection.prepareStatement("insert into produtos (cod_mercadoria, nome_mercadoria, tipo_mercadoria, quantidade, preco, tipo_negocio, data) Values(?,?,?,?,?,?,?,?)");

pstmt.setInt(1, mercadoriabean.getCod_mercadoria()); pstmt.setString(2, mercadoriabean.getNome_mercadoria()); pstmt.setString(3, mercadoriabean.getTipo_mercadoria()); pstmt.setFloat(4, mercadoriabean.getQuantidade()); pstmt.setInt(5, mercadoriabean.getPreco()); pstmt.setString(6, mercadoriabean.getTipo_negocio()); pstmt.setDate(7, new Date( mercadoriabean.getData().getTimeInMillis())); pstmt.executeUpdate();

pstmt.close(); return true; } catch (Exception e) { e.printStackTrace(); System.out.println(e.toString()); return false; } } } rs.close(); stmt.close(); return _lista;} }
solução!

Oi Aline,

Perceba que você realmente não possui o método getLista dentro da sua classe MovimentacaoDao, você precisa criá-lo por isso que o método não está sendo encontrado.

Uma dica que te dou é tentar separar as responsabilidades em classes separadas. Por exemplo, faz sentido MovimentacaoDao ser uma HttpServlet? Este padrão DAO quer dizer que você tem sua parte de acesso a dados isolada nesta classe, devendo assim ter somente os métodos que lidam com banco de dados por exemplo.

Já na Servlet você terá as coisas referentes a parte Web, coisas que você quiser disponibilizar para a JSP por exemplo e algumas outras regras.

Para você conseguir ficar craque e entender certinho , recomendo que você assista o curso de Java Web (https://cursos.alura.com.br/course/servlet-3-e-fundamentos-web), para a parte da Servlet, e o curso de JDBC (https://cursos.alura.com.br/course/jdbc), para a parte do DAO. O melhor é assistir estes dois antes daquele que te passei mais acima.

Ficou tudo claro?

OBS: Eu editei a sua resposta pra ver melhor o código mas pra inserir o código formatado bonitinho você deve colocar 3 backticks (`) nas linhas acima e abaixo do seu código.

Ex (coloquei um espaço só pra poder aparecer na resposta):

` ``

código

` ``

Abraço!

Bom dia Joviane.

Agradeço pela sua atenção, vou assistir os vídeos e fazer as alterações no meu código.

Muito obrigada.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software