Ok.
No seu DAO, adicione o seguinte método:
[code]public List listar() throws ExcecaoOblivion {
List<Produto> lista = new ArrayList<Produto>();
try {
Connection db = Conexao.getConnection();
PreparedStatement st =
db.prepareStatement( "SELECT * FROM produto ORDER BY descricao" );
ResultSet rs = st.executeQuery();
if ( rs.next() ) {
Produto produto = new Produto();
produto.setCodigo( rs.getInt( 1 ) );
produto.setDescricao( rs.getString( 2 ) );
produto.setQuantidade( rs.getInt( 3 ) );
produto.setEstoque( rs.getInt( 4 ) );
lista.add( produto );
}
rs.close();
st.close();
db.close();
} catch ( SQLException ex ) {
throw new ExcecaoOblivion( "Erro ao carregar um produto. Código " + ex.getSQLState()
+ "\nDescricao " + ex.getMessage(), 0 );
}
return lista;
}[/code]
Na classe Produto, adicione o seguinte método:
public String toJson() {
return "{" +
"codigo: " + codigo + ", " +
"descricao: '" + descricao + "', " +
"estoque: " + estoque + ", " +
"quantidade: " + quantidade + ", }";
}
Crie um Servlet e mapeie da forma que você quiser. No exemplo vou mapear como /servlets/ListarProdutosServlet
[code]public class ListarProdutosServlet extends HttpServlet {
protected void processRequest( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException {
response.setContentType( "text/json;charset=UTF-8" );
PrintWriter out = response.getWriter();
out.print( "{ successo: " );
try {
ProdutoDAO dao = new ProdutoDAO();
StringBuilder dados = new StringBuilder();
for ( Produto p : dao.listar() )
dados.append( p.toJson() + ", " );
out.print( "true, " );
out.print( "dados: [ " );
out.print( dados.toString() );
out.print( "]" );
} catch ( ExcecaoOblivion exc ) {
out.print( "false, " );
out.print( "mensagemErro: '" + exc.toString().replace( "\n", "\\n" ) + "'" );
} finally {
out.print( "}" );
out.close();
}
}
@Override
protected void doGet( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException {
processRequest( request, response );
}
@Override
protected void doPost( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException {
processRequest( request, response );
}
@Override
public String getServletInfo() {
return "Lista os produtos...";
}
}[/code]
Crie um JSP com seguinte conteúdo:
[code]<%@page contentType=“text/html” pageEncoding=“UTF-8”%>
Produtos...
$( document ).ready( function() {
// registra o evento click para o botão com id btnCarregar
$( '#btnCarregar' ).click( function() {
$.ajax({
dataType: 'json', // espera por dados no formato json (olhe o content type no servlet)
type: 'post', // envia a requisição via post
url: '${pageContext.request.contextPath}/servlets/ListarProdutosServlet', // url que vai retornar os dados
beforeSend: function( xmlHttp ) { // antes de fazer a requisição, muda o status
$( '#status' ).html( 'Carregando...' );
// limpa o conteúdo da tabela
$( '#conteudo' ).html( '' );
},
complete: function( xmlHttp, textStatus ) { // quanto a requisição completa, muda de novo
$( '#status' ).html( 'Pronto' );
},
success: function( data, textStatus ) {
// se o valor sucesso veio como true do servlet
if ( data.successo ) {
// dados dos produtos no formato json (atributo dados do valor retornado pelo servlet
var p = data.dados;
// itera pelos produtos
for ( var i = 0; i < p.length; i++ ) {
// para cada produto, cria uma nova linha
var linha = '<tr>' +
'<td>' + p[i].codigo + '</td>' +
'<td>' + p[i].descricao + '</td>' +
'<td>' + p[i].estoque + '</td>' +
'<td>' + p[i].quantidade + '</td></tr>';
// adiciona a linha criada no corpot da tabela
$( '#conteudo' ).append( linha );
}
// se falso, mostra a mensagem de erro (que veio da exceção)
} else {
alert( data.mensagemErro );
}
}
});
});
});
</script>
</head>
<body>
<table>
<thead>
<tr>
<th>Código</th>
<th>Descrição</th>
<th>Quantidade</th>
<th>Estoque</th>
</tr>
</thead>
<tbody id="conteudo">
</tbody>
</table>
<input id="btnCarregar" type="button" value="Carregar!"/>
<p><span id="status">Pronto</span></p>
</body>
[/code]
A instrução ${pageContext.request.contextPath} em EL no documento obtém sempre o contexto da aplicação. Olhe o código gerado (exibir código fonte no navegador) para ver o que acontece.
Não se esqueça de colocar a jQuery (http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2.min.js) na pasta javascript (que deve ficar no mesmo nível do JSP criado). Essa parte da inserção do javascript vc pode fazer da forma q está acostumado. Mude somente o src da tag script lá no meta.
Testa ai e avisa se funcionou. Qualquer dúvida no código posta de novo ![:wink: :wink:](https://www.guj.com.br/images/emoji/twitter/wink.png?v=6)